[英]Any way to set multiple keys and values at once in Maya using python?
我正在尋找一個解決方案,它允許設置值列表
[0,1,2]
超過給定的時間列表
[0,1,2]
一次,沒有循環,像這樣:
for frame, value in zip([0,1,2], [0,1,2]):
cmds.keyframe(node, e=True, vc=value, t=frame)
有命令
cmds.setKeyframe()
和
cmds.keyframe()
允許在給定時間設置動畫關鍵點但不允許在時間范圍內設置值范圍(幀)。
可以在時間范圍內放置相同的值,但事實並非如此。
mel.eval("setKeyframe -e -v %s -t 0 -t 1 -t 2 %s" % (value, node))
我試圖獲取動畫曲線節點的屬性,該節點將鍵存儲在其中,但輸出為空。
node = '...'
types = cmds.listAttr(node)
for t in types:
if cmds.objExists(node+t):
try:
print t, cmds.getAttr(node+t)
except:
print 'failed with', t
continue
...
keyTimeValue [()]
...
想通了。 這是關於動畫曲線節點的文檔。 https://download.autodesk.com/us/maya/2011help/Nodes/animCurveUU.html
您可以看到,keyTimeValue 屬性本身不存儲任何數據。 但是它的屬性 keyTimeValue.keyTime 和 keyTimeValue.keyValue 可以。
此命令按我的預期工作:
def keyframe_range(node, values, id_range):
eval("cmds.setAttr('%s.ktv[%s].kv', %s, size=%s)" % (
node, id_range, ','.join([str(v) for v in values]), str(len(values))))
selected_id = cmds.keyframe(sl=True, query=True, iv=True)
index_range = '%s:%s' % (str(selected_id[0]), str(selected_id[-1]))
selected_curve = cmds.keyframe(query=True, name=True)
keyframe_range(selected_curve[0], values, index_range)
但是在 Python 2.7 中,一個函數最多可以獲取 255 個參數。 一旦將值直接提供給函數,一次最多可以處理 255 個鍵。
最新方法在 2019 Maya 中不起作用。 對於那些偶然發現的人,這里是正確的代碼。
def add_keys(plugName, times, values, changeCache=None):
# Get the plug to be animated.
sel = om.MSelectionList()
sel.add(plugName)
plug = om.MPlug()
sel.getPlug(0, plug)
# Create the animCurve.
animfn = oma.MFnAnimCurve(plug)
timeArray = om.MTimeArray()
valueArray = om.MDoubleArray()
for i in range(len(times)):
timeArray.append(om.MTime(times[i], om.MTime.uiUnit()))
valueArray.append(values[i])
# Add the keys to the animCurve.
animfn.addKeys(
timeArray,
valueArray,
oma.MFnAnimCurve.kTangentGlobal,
oma.MFnAnimCurve.kTangentGlobal,
False,
changeCache)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.