Python脚本:用立方体替换对象

5
我正在尝试创建一个Python脚本,在Maya中生成代表物体空间边界框的立方体。
例如,如果我在Maya中创建随机对象(如球体、立方体、金字塔、圆锥体等),我想用该对象的边界框尺寸替换所选对象的立方体。
因此,如果我创建了三个不同的对象(例如圆锥体、球体和金字塔),则应该有三个单独的立方体是这些对象的边界框。
这是我尝试构建的脚本,但是我在这之后卡住了。
我遵循的步骤:
1. 创建一个球体。(手动通过在Maya程序上点击“生成球体按钮”实现) 2. 在第一步之后,运行我构建的脚本。
import maya.cmds as cmds

sel = cmds.ls(sl=True)
print sel
bbox = cmds.exactWorldBoundingBox(sel)
print bbox
cmds.polyCube()
1个回答

5
你最好在边界框行中将6个值提取到有用的变量中:
```html

你最好在边界框行中将6个值提取到有用的变量中:

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

此外,polyCube返回一个包含2个项的列表。我们需要第一个 - transform:
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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接