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

Why does my object not go to 0,0,0 when using the xform Maya command

我正在使用 Maya,我想将我的对象移动到世界 space 中的 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)

结果如下:

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

您的对象可能存在轴偏移,xform 没有考虑到这一点。您可以通过选择您的对象、转到属性编辑器并在本地 Space 选项卡下查看来验证这一点。如果所有值都不为 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 将它以世界原点为中心。