QQ登录 微博登录 帐号登录 我已阅读并接受《用户协议》
QQ、微博及系统账号均为独立账号,账号信息不互通
欢迎来到C4D素材网
赞助会员下载VIP模型
立即加入
您的VIP会员开通成功!
您的VIP会员开通成功!
今日下载数已用完
赞助会员
感谢您留下宝贵的建议
下载提示!请输入验证码验证哦!
看不清,重新获取
提交验证码
首页 > 插件下载 > 关键帧/烘培 >

C4D时间关键帧对齐插件AglinmentCKey v1.0

aW9C4D模型
aW9C4D模型
AlignmentCKeys是一个可以在C4D软件的时间线窗口中将选中的关键帧对齐的插件。可以帮助在做动画的过程中手动对齐。就是我们熟知的垂直对齐、水平对齐、水平分布,垂直分布等功能。aW9C4D模型
aW9C4D模型
实现这个功能比较简单的,分为三个部分:aW9C4D模型
-1.获取选中的对象并遍历CTrack及其CKey。aW9C4D模型
-2.判断得到的CTrack和CKey哪些是被选中的,并计算这些被选中的CKey值。aW9C4D模型
-3.对这些CKey做出对齐的操作设置。aW9C4D模型
aW9C4D模型
获取选中的CTrack  aW9C4D模型
先获取选中对象和场景中所有对象(这里拿全部对象是为了实现反选对象设置,但是该插件后来并没有实现这个功能)。

def get_all_objects(doc):aW9C4D模型
    objects = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN)aW9C4D模型
    c4d.CallCommand(12112)aW9C4D模型
    all_objects = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN)aW9C4D模型
    lst = []aW9C4D模型
    lst = get_children(all_objects, lst)aW9C4D模型
    c4d.CallCommand(12113)aW9C4D模型
    for obj in objects:aW9C4D模型
        obj.SetBit(c4d.BIT_ACTIVE)aW9C4D模型
    return lst, objectsaW9C4D模型

 

def get_children(objs, lst):aW9C4D模型
    for obj in objs:aW9C4D模型
        lst.append(obj)aW9C4D模型
        if obj.GetChildren():aW9C4D模型
            lst = self.get_children(obj.GetChildren(), lst)aW9C4D模型
    return lstaW9C4D模型

aW9C4D模型
获取选中的CKey  aW9C4D模型
对选中的物体进行遍历并获取被选中的CTrack。上一篇文章中介绍过如何判断被选中的CTrack和CKey对象(c4d.NBIT_TL1_SELECT2值代表了是否被选中)。

def GetActiveCTracksByObjects(*args):aW9C4D模型
    return [track for obj in args for track in obj.GetCTracks() if track.GetNBit(c4d.NBIT_TL1_SELECT2)]aW9C4D模型

aW9C4D模型
在上一步拿到被选中的CTrack列表之后,去获取被选中的CKey。先构造一个函数GetActiveCKeysByCTrack()用于通过CTrack获取上面被选中的CKey,再通过这个函数再构造一个可以获取场景所有CTrack对象的函数就轻而易举了。

def GetActiveAllCKeys(tracks):aW9C4D模型
    lst = []aW9C4D模型
    for track in tracks:aW9C4D模型
        _, ckeys = GetActiveCKeysByCTrack(track)aW9C4D模型
        lst += ckeysaW9C4D模型
    lst.sort(key=lambda x: x.GetTime(), reverse=False)aW9C4D模型
    return lstaW9C4D模型

 

def GetActiveCKeysByCTrack(track):aW9C4D模型
    all_lst = []aW9C4D模型
    active_lst = []aW9C4D模型
    curve = track.GetCurve()aW9C4D模型
    for index in range(curve.GetKeyCount()):aW9C4D模型
        ckey = curve.GetKey(index)aW9C4D模型
        all_lst.append(ckey)aW9C4D模型
        if ckey.GetNBit(c4d.NBIT_TL1_SELECT2):aW9C4D模型
            active_lst.append(ckey)aW9C4D模型
    return all_lst, active_lstaW9C4D模型

aW9C4D模型
GetActiveAllCKeys()函数中,对选中的CKey对象列表进行BaseTime维度的排序,保证CKey列表是按照正向的时间顺序,为后续的操作做准备。aW9C4D模型
aW9C4D模型
这里需要预埋一个doc.AddUndo(c4d.UNDOTYPE_CHANGE, ckey)函数,用于CTRL+Z可以恢复这步操作。相关Undo的方法可以参考官方文档设置,不同的回退有不同的设置方法,此案例中,需要将undo方法添加在变更对象参数的前面。aW9C4D模型
aW9C4D模型
水平对齐  aW9C4D模型
将传入的选中CKey对象列表,都赋予列表首歌CKey的值。

def X_Align(ckeys,doc):aW9C4D模型
    for ckey in ckeys:aW9C4D模型
        doc.AddUndo(c4d.UNDOTYPE_CHANGE, ckey)aW9C4D模型
        ckey.SetValue(ckey.GetCurve(), ckeys[0].GetValue())aW9C4D模型
    return TrueaW9C4D模型

aW9C4D模型
垂直对齐  

def Y_Align(ckeys,doc):aW9C4D模型
    for ckey in ckeys:aW9C4D模型
        doc.AddUndo(c4d.UNDOTYPE_CHANGE, ckey)aW9C4D模型
        ckey.SetTime(ckey.GetCurve(), ckeys[0].GetTime())aW9C4D模型
    return TrueaW9C4D模型

aW9C4D模型
水平平均分布  aW9C4D模型
根据类似于向量的方法,计算和观察得到对象的BaseTime对象。

def HorizontalEqualization(ckeys,doc):aW9C4D模型
    if len(ckeys) > 1:aW9C4D模型
        temp = ckeys[-1].GetTime() - ckeys[0].GetTime()aW9C4D模型
        for i, ckey in enumerate(ckeys):aW9C4D模型
            doc.AddUndo(c4d.UNDOTYPE_CHANGE, ckeys[i])aW9C4D模型
            ckeys[i].SetTime(ckeys[i].GetCurve(), temp * i / (len(ckeys) - 1) + ckeys[0].GetTime())aW9C4D模型
        return TrueaW9C4D模型
    return FalseaW9C4D模型

aW9C4D模型
垂直平均分布  

def VerticalEquipartition(ckeys,doc):aW9C4D模型
    if len(ckeys) > 1:aW9C4D模型
        values = [key.GetValue() for key in ckeys]aW9C4D模型
        temp = max(values) - min(values)aW9C4D模型
        for i, ckey in enumerate(ckeys):aW9C4D模型
            doc.AddUndo(c4d.UNDOTYPE_CHANGE, ckeys[i])aW9C4D模型
            ckeys[i].SetValue(ckeys[i].GetCurve(), temp * i / (len(ckeys) - 1) + min(values))aW9C4D模型
        return TrueaW9C4D模型
    return FalseaW9C4D模型

aW9C4D模型
直线平均分布  aW9C4D模型
选中的CKey列表中,根据收尾两个CKey对象的值,可以通过公式计算得到中间在两点连线上的CKey参数。

def LineAlign(ckeys,doc):aW9C4D模型
    if len(ckeys) > 1:aW9C4D模型
        value_temp = ckeys[-1].GetValue() - ckeys[0].GetValue()aW9C4D模型
        time_temp = ckeys[-1].GetTime() - ckeys[0].GetTime()aW9C4D模型
        for i, ckey in enumerate(ckeys):aW9C4D模型
            doc.AddUndo(c4d.UNDOTYPE_CHANGE, ckeys[i])aW9C4D模型
            ckeys[i].SetValue(ckeys[i].GetCurve(), value_temp * i / (len(ckeys) - 1) + ckeys[0].GetValue())aW9C4D模型
            ckeys[i].SetTime(ckeys[i].GetCurve(), time_temp * i / (len(ckeys) - 1) + ckeys[0].GetTime())aW9C4D模型
        return TrueaW9C4D模型
    return FalseaW9C4D模型

以上,就是本次的插件各项功能。aW9C4D模型
aW9C4D模型
【脚本安装】aW9C4D模型
【1】将 AlignmentCKeys 文件夹拷贝 C4D 安装目录 D:\Program Files\Maxon Cinema 4D R26\plugins 下,重新启动 C4D(请根据个人安装位置放置)aW9C4D模型
【2】重新打开C4D之后,shift+F12 打 开【 命 令 管 理 器 】,在 搜 索 框 中 输 入 AlignmentCKeys。同时设置快捷键。aW9C4D模型
【3】将 AlignmentCKeys 拖入 C4D 的窗口合适的位置,保存窗口布局方便使用。aW9C4D模型
【使用步骤】aW9C4D模型
1. 在时间线中选中关键帧(通过 Shift + F3 打开时间线窗口)。 aW9C4D模型
aW9C4D模型
aW9C4D模型
【版本信息】C4D R19 及以上。aW9C4D模型
【作者信息】西技大神

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。

立即下载
收藏
78
0
5
  • 提供者:
  • 插件评分:
  • 编号:
    7602
  • 权限:
  • 模点:
    0点
  • 属性:
    关键帧/烘培插件
  • 语言:
    中文
  • 平台:
    PC(Windows) / MAC(Mac OS)
  • 版本:
    AglinmentCKey v1.0/C4D R19+
  • 位置:
    插件(扩展)菜单下拉
  • 大小:
    292.63 KB
  • 下载方式:
    本地下载
  • 更新时间:
    2023-09-28 11:01:31
您可能还喜欢其他相关插件