为什么在使用xform Maya命令时我的对象没有变为0,0,0

时间:2019-07-11 02:53:24

标签: python maya

我正在使用Maya,并且想将我的对象移动到世界空间中的0,0,0。我正在使用xform命令,并且我的对象不会移动(基于其居中的枢轴)到0,0,0。这是我正在运行的:

import maya.cmds as cmds

temp_xforms = [0,0,0]
cmds.xform('Bottle_new',translation = temp_xforms,worldSpace = True)

这是结果:

enter image description here

这是我期望并希望发生的事情:

enter image description here

1 个答案:

答案 0 :(得分:1)

您的对象上可能存在枢轴偏移,xform并未考虑到这一点。您可以通过选择对象,进入“属性编辑器”并在“本地空间”选项卡下查看来验证这一点。如果所有值都不都是0,那么它会有一个偏移量。

您可以通过查询这些枢轴值,然后在xform命令中提供它们的否定版本,来使枢轴回到世界起源。

应该是这样的:

import maya.cmds as cmds

pivs = cmds.xform("Bottle_new", q=True, piv=True)[:3]  # Get pivot offset values.

# Multiply all pivot values with -1.
for i in range(len(pivs)):
    pivs[i] *= -1

cmds.xform("Bottle_new", ws=True, t=pivs)  # Instead of [0, 0, 0] use the pivot values to snap it back to world origin.

另一种很俗气的方法是使用matchTransform,因为它确实考虑了枢轴,但是您需要另一个可以对齐的对象。因此,您可以在世界原点创建一个临时变换,使其与之对齐,然后删除该变换。我相信matchTransform仅在Maya 2016中可用。

import maya.cmds as cmds

temp_transform = cmds.createNode("transform")  # Create a temporary transform at world origin.
cmds.matchTransform("Bottle_new", temp_transform, position=True)  # Align your object to the transform.
cmds.delete(temp_transform)  # Delete the transform.

或者,如果删除对象上的任何偏移量,然后选择顶点并将其移动到枢轴的中心,则可以完全避免所有这些情况。有了这个,就不会有偏移,您可以像原本想将其居中放置到世界原点一样使用xform