我需要帮助做以下事情:
使用关键帧方法(和标志)从选定的一组键中提取信息,以将它们存储在嵌套字典中。这些关键帧对应于动画,其中复制了所有关键帧以根据需要粘贴到其他关节上。我一直在梳理网络上的文档和不同来源,但我遇到了我不熟悉的动画术语和概念。 我稍后会访问这个词典,在一个格式很好的窗口中显示关键帧信息,这样我写这个的艺术家可以看到粘贴动画之前的效果。
到目前为止我的这部分代码:
else:
key_list = mc.copyKey()
# check to see if window exists already
if mc.window(copyAnim, exists = True):
mc.deleteUI(copyAnim)
# create window
copyAnim = mc.window(title="Transfer Animation Tool", backgroundColor= [0.3,0.3,0.3],sizeable=False,resizeToFitChildren=True)
#set the layout for UI
mc.columnLayout(adjustableColumn=True)
tx_src = mc.textFieldGrp(label="Source Object", editable=False, text=sel[0])
int_offset = mc.intFieldGrp(label="Frame Offset Amount", value1=0)
#displaying what info will be transferred - here is where I would use
#keyframe() instead -- getting an error because copyKey() returns an
#int which is not iterable. As you can see the return value for copyKey
#is being stored in key_list.
for key in key_list:
display_info = mc.textFieldGrp(label="Copy Value", editable=False, text=key_list[item])
文档链接: http://download.autodesk.com/us/maya/2011help/CommandsPython/keyframe.html
答案 0 :(得分:1)
听起来这个应用程序需要的唯一标志是-vc
,它可以获取值-tc
,它可以获得时间(与-q
标志结合使用时查询。
如果你想要的只是价值键的字典,它基本上只使用dict()
和zip()
:
def keys_as_dictionary(channel):
"""return a dictionay of times:values for <channel>"""
keys = cmds.keyframe(channel, q=True, tc=True) or []
values = cmds.keyframe(channel, q=True, vc=True) or []
return dict(zip(keys, values))
def channels(object):
"""return a dictionary of <plug>:<channel_dict> for each animated plug on <object>"""
keys = cmds.keyframe(object, n=True, q=True)
result = {}
for k in keys:
plugs = cmds.listConnections(k, p=True)[0]
result[plugs]= keys_as_dictionary(k)
return result
在对象上调用channels()
将返回一个由动画曲线键入的字典,其中的值是时间和值的字典:
import pprint
pprint.pprint(channels('pCube2'))
{u'pCube2.translateX': {4.955: 4.164464499411458,
10.89: -0.8212519883789916,
15.465: -0.6405074625130949,
22.65: -1.7965970091598258},
u'pCube2.translateY': {4.955: 8.271115169656772,
10.89: 0.3862609404272041,
15.465: 7.77669517461548,
22.65: 0.6892861215369379},
u'pCube2.translateZ': {4.955: -1.4066258181614297,
10.89: -4.891368771063121,
15.465: 4.340776804349586,
22.65: -3.5676492042261776}}
警告词:这应该适用于简单的动画对象,但是对于共享动画曲线,实例化节点,约束或锁定频道没有做任何明智的事情.... FYI ...... < / p>