def get_all_objects(doc):
objects = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN)
c4d.CallCommand(12112)
all_objects = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN)
lst = []
lst = get_children(all_objects, lst)
c4d.CallCommand(12113)
for obj in objects:
obj.SetBit(c4d.BIT_ACTIVE)
return lst, objects
def get_children(objs, lst):
for obj in objs:
lst.append(obj)
if obj.GetChildren():
lst = self.get_children(obj.GetChildren(), lst)
return lst
def GetActiveCTracksByObjects(*args):
return [track for obj in args for track in obj.GetCTracks() if track.GetNBit(c4d.NBIT_TL1_SELECT2)]
def GetActiveAllCKeys(tracks):
lst = []
for track in tracks:
_, ckeys = GetActiveCKeysByCTrack(track)
lst += ckeys
lst.sort(key=lambda x: x.GetTime(), reverse=False)
return lst
def GetActiveCKeysByCTrack(track):
all_lst = []
active_lst = []
curve = track.GetCurve()
for index in range(curve.GetKeyCount()):
ckey = curve.GetKey(index)
all_lst.append(ckey)
if ckey.GetNBit(c4d.NBIT_TL1_SELECT2):
active_lst.append(ckey)
return all_lst, active_lst
def X_Align(ckeys,doc):
for ckey in ckeys:
doc.AddUndo(c4d.UNDOTYPE_CHANGE, ckey)
ckey.SetValue(ckey.GetCurve(), ckeys[0].GetValue())
return True
def Y_Align(ckeys,doc):
for ckey in ckeys:
doc.AddUndo(c4d.UNDOTYPE_CHANGE, ckey)
ckey.SetTime(ckey.GetCurve(), ckeys[0].GetTime())
return True
def HorizontalEqualization(ckeys,doc):
if len(ckeys) > 1:
temp = ckeys[-1].GetTime() - ckeys[0].GetTime()
for i, ckey in enumerate(ckeys):
doc.AddUndo(c4d.UNDOTYPE_CHANGE, ckeys[i])
ckeys[i].SetTime(ckeys[i].GetCurve(), temp * i / (len(ckeys) - 1) + ckeys[0].GetTime())
return True
return False
def VerticalEquipartition(ckeys,doc):
if len(ckeys) > 1:
values = [key.GetValue() for key in ckeys]
temp = max(values) - min(values)
for i, ckey in enumerate(ckeys):
doc.AddUndo(c4d.UNDOTYPE_CHANGE, ckeys[i])
ckeys[i].SetValue(ckeys[i].GetCurve(), temp * i / (len(ckeys) - 1) + min(values))
return True
return False
以上,就是本次的插件各项功能。def LineAlign(ckeys,doc):
if len(ckeys) > 1:
value_temp = ckeys[-1].GetValue() - ckeys[0].GetValue()
time_temp = ckeys[-1].GetTime() - ckeys[0].GetTime()
for i, ckey in enumerate(ckeys):
doc.AddUndo(c4d.UNDOTYPE_CHANGE, ckeys[i])
ckeys[i].SetValue(ckeys[i].GetCurve(), value_temp * i / (len(ckeys) - 1) + ckeys[0].GetValue())
ckeys[i].SetTime(ckeys[i].GetCurve(), time_temp * i / (len(ckeys) - 1) + ckeys[0].GetTime())
return True
return False
C4D插件:C4D时间关键帧对齐插件AglinmentCKey v1.0(时间关键帧,C4D关键帧,关键帧对齐,AglinmentCKey,垂直对齐,水平对齐,水平分布,垂直分布),版本为AglinmentCKey v1.0/C4D R19+,分类属于关键帧/烘培,软件语言为中文,支持PC(Windows) , MAC(Mac OS)系统平台,安装好的插件会出现在CINEMA 4D软件的插件(扩展)菜单下拉位置,附件大小约292.63 KB,下载方式为本地下载。更多不错关键帧/烘培下载,尽在C4D模型-C4D.COM。