matrix - 从矩阵获取旋转,OpenMaya
问题描述
我正在使用 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)
,看起来不接受我的矩阵。有什么帮助吗?
我确定这是我缺少的简单修复
解决方案
获取矩阵的一种方法是避免通过 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))
推荐阅读
- python - 如何删除错误消息:没有找到这样的文件或目录 Python?
- json - 删除 XSLT 3.0 xml-to-json 转换结果中的引号
- .net - 使用异步 .NET 方法作为 Win32 API 回调
- java - Excel 文件保存在 Eclipse jee 文件夹中,而不是项目文件夹中
- angular - 无法以 Angular 7 下载 zip 文件
- c++ - 如何使用 C++ 获取硬件的唯一标识符
- python - 将句子表示为图神经网络 - NLP
- php - 在模板刀片 laravel 上设置 CURL
- matplotlib - Ubuntu 中的 Matplotlib 内存泄漏,但在 Windows 10 中没有
- excel - 如何自动将列值填充到 Excel 中的另一个工作表中?