Скорее всего, на вашем объекте есть смещение центра, и xform
не учитывает это.Вы можете убедиться в этом, выбрав свой объект, перейдя в редактор атрибутов и перейдя на вкладку Local 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
, как вы изначально хотели центрировать его в мировом происхождении.