Не существует единого лайнера, похожего на идиому MXS, и нет простого способа сделать это в mel. Однако в Python вы можете сделать это довольно легко.
Сначала вам нужно получить матрицу для системы координат, которую вы хотите, как MMatrix
, которая является частью OpenMaya api. Затем получите позицию, которую хотите проверить, как MPoint, то есть еще один класс api. Вот самый дешевый способ их получить (есть более быстрые методы, но они намного многословнее):
from maya.api.OpenMaya import MVector, MMatrix, MPoint
import maya.cmds as cmds
def world_matrix(obj):
"""'
convenience method to get the world matrix of <obj> as a matrix object
"""
return MMatrix( cmds.xform(obj, q=True, matrix=True, ws=True))
def world_pos(obj):
"""'
convenience method to get the world position of <obj> as an MPoint
"""
return MPoint( cmds.xform(obj, q=True, t=True, ws=True))
Если у вас есть матрица и точка, относительное положение равно точке, умноженной на обратную матрице:
relative_position = world_pos('pSphere1') * world_matrix('pCube1').inverse()
print relative_position
# (0.756766, -0.0498943, 3.38499, 1)
Результатом будет MPoint с 4 числами (x, y, z и w); 4-й всегда будет 1, так что вы можете просто проигнорировать его, хотя математике он нужен для учета масштабов и ножниц.
person
theodox
schedule
15.11.2017