问题描述
我正在尝试使用Maya Standalone获取动画的第一个和最后一个关键帧。如果不确定,Maya Standalone意味着没有用户界面。这完全是命令行,Maya没有运行。这意味着您通常在Maya中可以做的某些事情需要特殊的工作。 我正在做的是使用maya.mel.eval('setPlaybackRangetoMinMax'),但令人惊讶的是,这在独立Maya中不起作用。 因此,我正在寻找一种解决方法,可以使用pymel.core根据现有动画设置最小和最大播放范围。到目前为止,我还没有找到任何成功,我想知道是否有人对此有任何示例。提前谢谢。
解决方法
您可以使用pymel
或cmds
的以下内容获取当前场景范围:
import pymel.core as pymel
pymel.playbackOptions(q=True,min=True)
pymel.playbackOptions(q=True,max=True)
import maya.cmds as cmds
cmds.playbackOptions(q=True,min=True)
cmds.playbackOptions(q=True,max=True)
批量运行或界面运行都没有关系。 Check out the docs了解更多信息。
编辑:
您是否要获取给定对象的第一个和最后一个关键帧的范围?如果是这种情况,则需要使用cmds.keyframe
。您可以传入一个对象,它将返回所有关键帧的列表。从那里可以对其进行排序,然后获得第一个和最后一个键,这就是您要查找的范围:
import maya.cmds
obj = "pSphere1" # Object to check animation range with.
all_keys = sorted(cmds.keyframe(obj,q=True) or []) # Get all the keys and sort them by order. We use `or []` in-case it has no keys,which will use an empty list instead so it doesn't crash `sort`.
if all_keys: # Check to see if it at least has one key.
print all_keys[0],all_keys[-1] # Print the start and end frames
如果您不想检查所有属性,则可以包括一个属性以检查按键。因此,举例来说,假设您对球体的平移进行了动画处理,可以像下面这样从cmds.keyframe("pSphere1.tx",q=True)
中获取来自translateX的所有键。
好吧,经过进一步的测试,我能够使以下内容起作用。
# Assuming that I've already imported or opened an animation file and selected the object
import pymel.core as pmc
keyframes = pmc.keyframe(q=True,time=(-9999999,9999999))
min_max = sorted(keyframes)
min = min_max[0]
max = min_max[-1]
这已成功返回了我要做其余工作所需的第一个和最后一个关键帧。我正在处理供应商的MoCap数据,因此我必须测试极限时间范围才能找到所有关键帧,但是它确实有效。