2016-02-13 54 views
0

我正在嘗試編寫一個自定義腳本來導出場景中的對象與它們的旋轉中心。下面是我的算法看起來像得到旋轉中心:使用其名稱 1選擇對象,然後調用 2 - 捕捉光標反對(中心) 3-獲取鼠標座標 4-寫鼠標座標攪拌機的自定義導出腳本

import bpy 

sce = bpy.context.scene 
ob_list = sce.objects 

path = 'C:\\Users\\bestc\\Dropbox\\NetBeansProjects\\MoonlightWanderer\\res\\Character\\player.dat' 

# Now copy the coordinate of the mouse as center of rotation 
try: 
    outfile = open(path, 'w') 
    for ob in ob_list: 
     if ob.name != "Camera" and ob.name != "Lamp": 
      ob.select = True 
      bpy.ops.view3d.snap_cursor_to_selected() 

      mouseX, mouseY, mouseZ = bpy.ops.view3d.cursor_location 
      # write object name, coords, center of rotation and rotation followed by a newline 
      outfile.write("%s\n" % (ob.name)) 

      x, y, z = ob.location # unpack the ob.loc tuple for printing 
      x2, y2, z2 = ob.rotation_euler # unpack the ob.rot tuple for printing 
      outfile.write("%f %f %f %f %f\n" % (y, z, mouseY, mouseZ, y2)) 

    #outfile.close() 

except Exception as e: 
    print ("Oh no! something went wrong:", e) 

else: 
    if outfile: outfile.close() 
    print("done writing")`enter code here` 

顯然問題是第2步和第3步,但我不知道如何將光標捕捉到對象並獲取光標座標。

回答

0

當您從攪拌器文本編輯器運行腳本時,當您嘗試運行大多數操作員時,將會出現上下文錯誤,但是您需要的信息可以在不使用操作員的情況下進行檢索。

如果你想3DCursor位置,您可以在scene.cursor_location

找到它,如果你已經拍下了光標的對象,然後將光標位置將等於物體的位置,這是在object.location,作爲貼緊光標將使光標提供相同的值,您只需使用對象位置,而不必將光標捕捉到它。你的代碼實際上在做什麼(如果它正在工作的話)是將光標捕捉到選定的對象上,將它定位在所有選定對象之間的中間點。當你循環你的對象時,你正在選擇每個對象,但是你並沒有取消選擇它們,所以每次迭代都會將另一個對象添加到選擇中,每次將光標偏移到不同的位置,但僅限於第一個對象的位置如果所有對象在開始時都未被選中。

的對象旋轉存儲爲弧度,所以你可能要import math,並使用math.degrees()

還一個目的可以有你應該找到更準確的測試對象類型選擇什麼出口任何名稱。

for ob in ob_list: 
    if ob.type != "CAMERA" and ob.type != "LAMP": 

     mouseX, mouseY, mouseZ = sce.cursor_location 
     # write object name, coords, center of rotation and rotation followed by a newline 
     outfile.write("%s\n" % (ob.name)) 

     x, y, z = ob.location # unpack the ob.loc tuple for printing 
     x2, y2, z2 = ob.rotation_euler # unpack the ob.rot tuple for printing 
     outfile.write("%f %f %f %f %f\n" % (y, z, mouseY, mouseZ, y2)) 
+0

確實沒有必要捕捉到光標,因爲對象的位置指的是它的中心。謝謝你的時間 :) ! –