簡體   English   中英

有什么方法可以使用 python 在 Maya 中一次設置多個鍵和值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM