Sunday, July 20, 2008

MEulerRotation::decompose()

MEulerRotation::decompose() seems to be buggy.


import math
import maya.OpenMaya as OpenMaya

def _getScaleMMatrix(sx, sy, sz, space = OpenMaya.MSpace.kTransform):
ar = OpenMaya.MScriptUtil()
ar.createFromDouble(sx, sy, sz)
trns = OpenMaya.MTransformationMatrix()
trns.setScale(ar.asDoublePtr(), space)
return trns.asMatrix()

def _getRotationMMatrix(rx, ry, rz):
ar = OpenMaya.MScriptUtil()
ar.createFromDouble(rx, ry, rz)
trns = OpenMaya.MTransformationMatrix()
trns.setRotation(ar.asDoublePtr(), OpenMaya.MTransformationMatrix.kXYZ, OpenMaya.MSpace.kTransform)
return trns.asMatrix()

mmat = OpenMaya.MMatrix()
mmat *= _getScaleMMatrix(1.0, 10.0, 1.0)
mmat *= _getRotationMMatrix(math.radians(30), math.radians(80), math.radians(0))
euler = OpenMaya.MEulerRotation.decompose(mmat, OpenMaya.MEulerRotation.kXZY)

print math.degrees(euler.x), math.degrees(euler.y), math.degrees(euler.z)



It prints 3.30430518016 80.0 0.0, not 30.0, 80.0, 0.0 or equivalent.


No comments: