2016-06-28 35 views
0

Ich versuche, ein Werkzeug in Maya mit Python erstellen, die Kurven basierend auf einem Objekt Keyframe Positionen erstellt. Das Endziel besteht darin, verschiedene Animationskurven zu erstellen, zwischen denen das Objekt mischen kann, um Anpassungen an der Hauptanimation zu erstellen. Hier ist, was ich bisher habe. Es wird eine Kurve erstellt, die dem Bewegungspfad folgt, jedoch nicht auf der Position des Keyframes basiert. Jede Hilfe würde wirklich geschätzt werden.Benötigen Sie Hilfe bei der Erstellung von Kurven basierend auf set keyframe-Positionen (maya/python)

import maya.cmds as cmds 

def createAnimCurve(startFrame, endFrame, numCV, object): 
    curveCVstep = ((endFrame - startFrame)+startFrame)/numCV 
    points = [] 
    for step in range(startFrame, endFrame, int(curveCVstep)): 
     # Moves throughout the specified timeline to find point results 
     cmds.currentTime(step) 
     # Queries the pivot position to draw the curve relative to the controller 
     xpos = cmds.xform(object,q=1,ws=1,rp=1) 
     # convert the tuple (vector) to a string 
     points.append(xpos) 
    cmds.curve(d=3, ws=True, p=points, n=object+'_xPath') 

createAnimCurve(1,24,12,"L_hand_CTL") 

Antwort

2

Wenn ich Sie richtig verstanden habe, werden Sie durch Schlüsselbilder zu durchlaufen wollen (mit keyframe timeChange Abfrage), anstatt ein Start/End-Bereich Schritt numCvs.

keyframes = sorted(list(set(cmds.keyframe(object, q=True, timeChange=True)))) 

Vermeiden Sie auch object als Variablennamen, es ist ein eingebaut.

+0

Das klingt nach dem, was ich brauche, aber wenn ich mir die Ausgabe anschaue, scheint es, als würde ich die paar Keyframes immer und immer wieder loopen. Hier ist ein Beispiel, was ich meine. [1,0, 5,0, 9,0, 13,0, 17,0, 21,0, 24,0, 1,0, 5,0, 9,0, 13,0, 17,0, 21,0, 24,0, 1,0, 5,0, 9,0, 13,0, 17,0, 21,0, 24,0, 1,0, 5,0, 9,0, 13.0, 17,0, 21.0, 24.0, 1.0, 5.0, 9.0, 13.0, 17.0, 21.0, 24.0, 1.0, 5.0, 9.0, 13.0, 17.0, 21.0, 24.0, 1.0, 5.0, 9.0, 13.0, 17.0, 21.0, 24.0, 1.0, 5.0, 9.0, 13.0, 17.0, 21.0, 24.0, 1.0, 5.0, 9.0, 13.0, 17.0, 21.0, 24.0] Auch danke ich werde sicherstellen, die Objektvariable zu etwas anderem zu ändern. – zaidi92

+0

Ah natürlich gibt es Ihnen Zeitänderungen für jede Kurve. Entweder übergeben Sie eine animCurve, wenn Sie nach Keyframes per abimCurve oder für alle Keyframes einen Satz sortieren (siehe Bearbeiten). –

+0

Oder Sie könnten ein Listenverständnis verwenden, um zu überprüfen, ob jeder Wert eindeutig ist, bevor Sie Instanzen hinzufügen, in denen Sie sich nicht auf das Sortieren verlassen können. –