我正在尝试创建一个Python脚本来在Maya中生成多维数据集,这些多维数据集表示对象框的对象空间。
例如,如果我在Maya中创建随机对象(球体,立方体,金字塔,圆锥等),我想用一个具有该对象边界框尺寸的立方体替换这些选定对象。
因此,如果我创建3个不同的对象(例如圆锥体,球体和金字塔),则应该有三个单独的立方体作为这些对象的边界框。
这是我尝试构建的脚本,但在此之后我就被卡住了。
我遵循的步骤:
创建一个球体。 (通过单击Maya程序上的“生成球体按钮”手动)
在第1步之后,运行我构建的脚本
import maya.cmds as cmds
sel = cmds.ls(sl=True)
print sel
bbox = cmds.exactWorldBoundingBox(sel)
print bbox
cmds.polyCube()
答案 0 :(得分: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)