これが、あなたがくれたアイデアで作業するためのコードです。今とても理にかなっています!
import maya.OpenMaya as OpenMaya
import maya.cmds as cmds
import math
reflectObj = cmds.xform('pSphere1', query=True, ws=True, matrix=True)
targetObj = cmds.xform('pSphere2', query=True, ws=True, matrix=True)
reflectXZ = [-1 * reflectObj[0], -1 * reflectObj[1], -1 * reflectObj[2], reflectObj[3],
-1 * reflectObj[4], -1 * reflectObj[5], -1 * reflectObj[6], reflectObj[7],
reflectObj[8], reflectObj[9], reflectObj[10], reflectObj[11],
reflectObj[12], reflectObj[13], reflectObj[14], reflectObj[15]]
targetMMatrix = OpenMaya.MMatrix()
OpenMaya.MScriptUtil.createMatrixFromList(targetObj, targetMMatrix)
reflectObjMMatrix = OpenMaya.MMatrix()
OpenMaya.MScriptUtil.createMatrixFromList(reflectObj, reflectObjMMatrix)
reflectXZMMatrix = OpenMaya.MMatrix()
OpenMaya.MScriptUtil.createMatrixFromList(reflectXZ, reflectXZMMatrix)
reflected_matrix = targetMMatrix * reflectObjMMatrix.inverse()
result = reflected_matrix * reflectXZMMatrix
mt = OpenMaya.MTransformationMatrix(result)
trans = mt.translation(OpenMaya.MSpace.kWorld)
eulerRot = mt.rotation().asEulerRotation()
angles = [math.degrees(angle) for angle in (eulerRot.x, eulerRot.y, eulerRot.z)]
loc = cmds.spaceLocator()
cmds.move(trans[0], trans[1], trans[2], loc[0])
cmds.rotate(angles[0], angles[1], angles[2], loc[0])
この場合、私は 2 つの球体を作成しただけで、それらの行列を反映することができました。編集:これを修正して、回転を無効にしました。