如何使用 cmds.selectKey 找到特定关键帧的时间?

How do I find the time of a particular keyframe using cmds.selectKey?

我正在尝试从键的 animCurve 节点(下面代码中的 "lastKey")中找到特定 selected 键的时间。我可以 select 我的密钥使用:

cmds.selectKey(lastKey, index=(1, 1))

但是 cmds.selectKey 只有 returns 键的数量 selected。而且命令中似乎没有查询键索引时间的方法。

我试过使用 cmds.keyframe,但我的密钥不在特定属性上,它是一个 Set Driven Key。

print cmds.keyframe(lastKey, index=(1,1), query=True)

"None" 返回。

如果您知道您正在处理哪个对象 and/or 属性,您可以像这样获取时间:

import maya.cmds as cmds

# Get index value of last key
keyIndex = (cmds.keyframe("myObject.attribute", indexValue=True, q=True))[-1]

# Get time of key index
keyFrame = cmds.keyframe("myObject.attribute", q=True, index=(1, keyIndex))

这个有用吗? cmds.keyframe() returns 查询关键帧的时间值列表。

一个更简单的方法可能是简单查询lastKey的关键帧,然后取列表中的最后一个元素,就像这样

import maya.cmds as cmds
keyFrame = (cmds.keyFrame("myAnimCurve", q=True))[-1]

这是假设 lastKey 只附加了一个 animCurve。否则列表会有点乱。


针对驱动键进行编辑

我刚刚注意到关于 Driven Key 的一点。如果以下不是您要查找的内容,您能否详细说明您的问题?

如果你有 animCurve,你可以得到一个 Driver 值的列表,就像这样

driverKeys = cmds.keyframe("myAnimCurve", q=True, floatChange=True)

同样,您随后可以获得 Driven 值的列表,如下所示

drivenKeys = cmds.keyframe("myAnimCurve", q=True, valueChange=True)

最后,您可以使用 [-1]

简单地获取列表中的最后一个元素
print(driverKeys[-1])  # return time of last driven keyframe
print(drivenKeys[-1])  # return value at last driven keyframe

注意:列表的顺序基于驱动程序的值。