【问题标题】:Getting rotation from matrix, OpenMaya从矩阵获取旋转,OpenMaya
【发布时间】:2021-08-26 10:45:41
【问题描述】:

我正在使用 OpenMaya,我需要从矩阵中获取欧拉旋转,但在启动此简单代码时出现错误:

代码:

import maya.OpenMaya as OpenMaya
import maya.cmds as mc
crcl=mc.circle()
matrx=(OpenMaya.MMatrix(mc.xform(crcl,q=1,m=1)))
tMat = OpenMaya.MTransformationMatrix(matrx)
eulerRotation = tMat.rotation(asQuaternion=False)

错误

Error: in method 'new_MMatrix', argument 1 of type 'float const [4][4]'

问题是OpenMaya.MTransformationMatrix(matrx),看起来不接受我的矩阵。 有什么帮助吗?

MTransformationMatrix documentation

我确定这是一个我缺少的简单修复

【问题讨论】:

    标签: matrix 3d maya pymel maya-api


    【解决方案1】:

    获取矩阵的一种方法是避免通过 MEL 命令并直接使用OpenMaya API。

    import math
    # I'm Using `maya.api.OpenMaya` here since I'm testing on Maya 2019.
    # Change according to your version.
    import maya.api.OpenMaya as OpenMaya
    import maya.cmds as mc
    
    crcl = mc.circle()
    mc.rotate(45.0, 10.0, 5.0, crcl)
    
    # Add the circle to the selection so we can retrieve its `MObject`.
    selection = OpenMaya.MSelectionList()
    selection.add(crcl[0])
    
    # Get the circle `MObject` and create a `MFnDagNode` from it.
    obj = selection.getDependNode(0)
    dagNode = OpenMaya.MFnDagNode(obj)
    
    matrix = dagNode.transformationMatrix()
    tMat = OpenMaya.MTransformationMatrix(matrix)
    eulerRotation = tMat.rotation(asQuaternion=False)
    
    # This should print the following (only differences would potentially be in
    # floating point accuracy):
    # [45.0, 10.0, 5.0]
    print(map(math.degrees, eulerRotation))
    

    【讨论】:

    • 这很有帮助!谢谢,我设法找到了代码上的错误,我使用的是maya.OpenMaya 而不是maya.api.OpenMaya 事实上,如果你只改变那部分代码就可以了!
    猜你喜欢
    • 1970-01-01
    • 2021-07-17
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    相关资源
    最近更新 更多