Вы можете использовать keyframe
для запроса значений кривой анимации, которая не связана ни с каким атрибутом. Вот пример, который создаст анимированную кривую с 2 ключами, распечатает значения ключей, а затем распечатает их значение в каждом кадре:
import maya.cmds as cmds
# Create an animation curve with 2 keys.
anim_curve = cmds.createNode("animCurveTL")
cmds.setKeyframe(anim_curve, t=0, v=0)
cmds.setKeyframe(anim_curve, t=10, v=10)
# Get its key count.
key_count = cmds.keyframe(anim_curve, q=True, keyframeCount=True)
# Iterate through key count and print all key values.
for i in range(key_count):
print cmds.keyframe(anim_curve, q=True, index=(i, i))[0]
# Get the scene's frame ranges.
start = int(cmds.playbackOptions(q=True, min=True))
end = int(cmds.playbackOptions(q=True, max=True))
# Iterate through each frame and print the anim curve's value.
for f in range(start, end):
print f, cmds.keyframe(anim_curve, q=True, eval=True, time=(f, f))[0]
Получение значения в заданный момент времени достаточно просто, вот что последний часть делает.
Получение времени с заданным значением - нет, и вам, возможно, придется пересмотреть свой подход. Во-первых, можно иметь значение во время подкадров, но я предполагаю, что вы захотите проигнорировать это. Также вы пытаетесь сопоставить значение с плавающей запятой, что сложно в программировании. Поскольку значение 3,5 не будет соответствовать значению 3,5000001, что, вероятно, является типом значений, которые будет иметь кривая, поскольку она интерполирует между ключевыми значениями.
Но если вы настаиваете на этом, вам, вероятно, нужно сравнивайте значение в каждом кадре между первым / последним ключевым временем кривой. Когда вы сравниваете значение, вам может потребоваться некоторый порог, который считается приемлемым или достаточно близким, чтобы решить проблемы с точностью. Если он пройдет, вы можете добавить время к list
и return
позже.
Надеюсь, это укажет вам правильное направление.