2014-10-09 45 views
0

是否可以單獨導出給定對象的關鍵幀在其自己的關鍵幀範圍內?導出對象範圍內的關鍵幀

示例camA在第1幀到第10幀的範圍內是關鍵幀。但是,當我試圖以另一種格式導出本相機時,它將考慮整體時間滑塊。因此exported_camA在第1幀到第24幀範圍內是關鍵幀(24是我的時間滑塊的最大範圍)

這可能嗎?我嘗試了用cmds.playbackOptions但顯然它是根據時間滑塊範圍還出口了

def __init__(self, transform, startAnimation, endAnimation, cameraObj): 

    self.fileExport = [] 
    print ">>> Exported : %s" %self.fileExport 

    mayaGlobal = OpenMaya.MGlobal() 
    mayaGlobal.viewFrame(OpenMaya.MTime(1)) 

    for i in range(startAnimation, endAnimation): 

     focalLength = cameraObj.focalLength() 

     vFilmApp = cameraObj.verticalFilmAperture() 

     focalOut = 2* math.degrees(math.atan(vFilmApp * 25.4/ (2* focalLength))) 

     myEuler = OpenMaya.MEulerRotation() 
     spc = OpenMaya.MSpace.kWorld 

     trans = transform.getTranslation(spc) 

     rotation = transform.getRotation(myEuler) 
     rotVector = OpenMaya.MVector(myEuler.asVector()) 

     self.fileExport.append((str(i) + '\t' + str(trans[0]) + "\t" + str(trans[1]) + "\t" + str(trans[2]) + "\t" + str(math.degrees(rotVector[0])) + "\t" + str(math.degrees(rotVector[1])) + "\t" + str(math.degrees(rotVector[2])) + "\t" + str(focalOut) + "\n")) 

     mayaGlobal.viewFrame(OpenMaya.MTime(i+1)) 

回答

1
cmds

你可以得到的最大和最小的時間對於一個給定的動畫是這樣的:

key_times = cmds.keyframe('pCube1', attribute = 'translate', q=True, tc=True) 
first_key = key_times[0] 
last_key = key_times[-1] 

注這必須應用於特定屬性(在本例中,我使用'translate'),否則您將從Maya在對象上找到的第一條動畫曲線中獲取關鍵點。

也就是說,通常認爲導出場景關鍵幀範圍或明確設置的幀範圍是最好的。否則,你可能會讓某人在場景中工作並擦洗時間,然後導出並查看更少的幀。

+0

謝謝你的信息。我還譴責我是否應該允許用戶通過場景範圍或者上述選擇範圍內的範圍允許用戶自由導出動畫。即使這樣,現在,後者是我正在嘗試在當前代碼中實現的。如果我想進一步改進我的代碼,我會考慮前者。再次感謝! – dissidia 2014-10-10 02:18:23

0

我也發現了這個命令 - cmds.findKeyframe以便捕捉所選對象的動畫關鍵幀,它也有助於我的代碼以及

雖然我不知道這是否會產生以後任何不良影響,看到我還沒有遇到一個:X

例如:

minTime = cmds.findKeyframe(which='first') # First keyframe 
maxTime = cmds.findKeyframe(which='last') # Last keyframe