使用 keyframe() 在 Maya 中使用 Python 显示嵌套字典信息
Using keyframe() to display nested dictionary info using Python in Maya
我在以下方面需要帮助:
使用关键帧方法(和标志)从一组选定的键中提取信息,以将它们存储在嵌套字典中。这些关键帧对应于一个动画,其中复制了所有关键帧以根据需要粘贴到其他关节上。我一直在梳理文档和网络上的不同来源,但 运行 进入了我不熟悉的动画术语和概念。
稍后我将访问此字典以格式良好的方式显示关键帧信息 window 以便我为其编写此代码的艺术家可以在粘贴动画之前看到效果。
到目前为止我对这部分的代码:
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])
Link 到文档:
http://download.autodesk.com/us/maya/2011help/CommandsPython/keyframe.html
听起来这个应用程序唯一需要的标志是 -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}}
警告词:这应该适用于普通动画对象,但对共享动画曲线、实例节点、约束或锁定通道没有做任何聪明的事情……仅供参考....
我在以下方面需要帮助:
使用关键帧方法(和标志)从一组选定的键中提取信息,以将它们存储在嵌套字典中。这些关键帧对应于一个动画,其中复制了所有关键帧以根据需要粘贴到其他关节上。我一直在梳理文档和网络上的不同来源,但 运行 进入了我不熟悉的动画术语和概念。 稍后我将访问此字典以格式良好的方式显示关键帧信息 window 以便我为其编写此代码的艺术家可以在粘贴动画之前看到效果。
到目前为止我对这部分的代码:
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])
Link 到文档: http://download.autodesk.com/us/maya/2011help/CommandsPython/keyframe.html
听起来这个应用程序唯一需要的标志是 -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}}
警告词:这应该适用于普通动画对象,但对共享动画曲线、实例节点、约束或锁定通道没有做任何聪明的事情……仅供参考....