2013-12-07 55 views
4

我想創建一個Python腳本來在Maya中生成代表對象空間邊界框的多維數據集。例如,如果我在Maya中創建了隨機對象(球體,立方體,金字塔,錐體等),我想用具有該對象邊界框尺寸的立方體替換這些選定的對象。因此,如果我創建3個不同的對象(例如錐體,球體和金字塔),則應該有三個獨立的立方體作爲這些對象的邊界框。用腳本代替對象的Python腳本

這是我試圖構建的腳本,但在此之後我就被卡住了。

的步驟,我跟着:

  1. 創建一個球體。 (手動點擊「生成球體按鈕」瑪雅程序)

  2. 步驟1之後,運行我建

import maya.cmds as cmds 

sel = cmds.ls(sl=True) 
print sel 
bbox = cmds.exactWorldBoundingBox(sel) 
print bbox 
cmds.polyCube() 

回答

4

你還不如拉6個值伸到腳本在邊框線使用的變量:

x1, y1, z1, x2, y2, z2 = cmds.exactWorldBoundingBox(sel) 

此外,polyCube返回的2項的列表。我們希望第一個 - 變換:

cube = cmds.polyCube()[0] 

現在,我們需要在每個維度的中心點,所以我們平均的邊緣:

xc = (x2 + x1)/2.0 
yc = (y2 + y1)/2.0 
zc = (z2 + z1)/2.0 

我們還希望的尺寸,所以我們可以擴大規模我們單位規模的聚立方體:

xw = x2 - x1 
yw = y2 - y1 
zw = z2 - z1 

現在我們可以只移動和縮放聚立方體變換這些值:

cmds.move(xc, yc, zc, cube) 
cmds.scale(xw, yw, zw, cube) 

即移動變換polyCube的匹配,但是如果你只是想移動部件,你可以這樣做(注意,我不得不使用calculateExactly標誌爲它在我的測試正常工作:

sel = cmds.ls(sl=True) 

x1, y1, z1, x2, y2, z2 = cmds.exactWorldBoundingBox(sel, calculateExactly=True) 

cube = cmds.polyCube()[0] 
cmds.move(x1, '%s.f[5]' % cube, x=True) 
cmds.move(y1, '%s.f[3]' % cube, y=True) 
cmds.move(z1, '%s.f[2]' % cube, z=True) 
cmds.move(x2, '%s.f[4]' % cube, x=True) 
cmds.move(y2, '%s.f[1]' % cube, y=True) 
cmds.move(z2, '%s.f[0]' % cube, z=True)