Python脚本用多维数据集替换对象

时间:2013-12-07 19:31:45

标签: python maya

我正在尝试创建一个Python脚本来在Maya中生成多维数据集,这些多维数据集表示对象框的对象空间。

例如,如果我在Maya中创建随机对象(球体,立方体,金字塔,圆锥等),我想用一个具有该对象边界框尺寸的立方体替换这些选定对象。

因此,如果我创建3个不同的对象(例如圆锥体,球体和金字塔),则应该有三个单独的立方体作为这些对象的边界框。

这是我尝试构建的脚本,但在此之后我就被卡住了。

我遵循的步骤:

  1. 创建一个球体。 (通过单击Maya程序上的“生成球体按钮”手动)

  2. 在第1步之后,运行我构建的脚本

  3. import maya.cmds as cmds
    
    sel = cmds.ls(sl=True)
    print sel
    bbox = cmds.exactWorldBoundingBox(sel)
    print bbox
    cmds.polyCube()
    

1 个答案:

答案 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)