Maya Python:应用变换矩阵

Maya Python:应用变换矩阵,python,matrix,maya,Python,Matrix,Maya,我一直在寻找这个答案,但我似乎没有找到答案,所以我希望我能在这里得到我的答案 我在Maya Python API中,我想将变换矩阵应用于网格 这是我制作网格的方式: mesh = om.MFnMesh() ShapeMesh = cmds.group(em=True) parentOwner = get_mobject( ShapeMesh ) meshMObj = mesh.create(NumVerts, len(FaceCount), VertArray,

我一直在寻找这个答案,但我似乎没有找到答案,所以我希望我能在这里得到我的答案

我在Maya Python API中,我想将变换矩阵应用于网格

这是我制作网格的方式:

    mesh = om.MFnMesh()
    ShapeMesh = cmds.group(em=True)
    parentOwner = get_mobject( ShapeMesh )
    meshMObj = mesh.create(NumVerts, len(FaceCount), VertArray, FaceCount, FaceArray ,parentOwner)
    cmds.sets( ShapeMesh, e=True,forceElement='initialShadingGroup')
    defaultUVSetName = ''
    defaultUVSetName = mesh.currentUVSetName(-1)
    mesh.setUVs ( UArray, VArray, defaultUVSetName )
    mesh.assignUVs ( FaceCount,  FaceArray, defaultUVSetName )
以下是我创建TFM的方式:

m = struct.unpack("<16f",f.read(64))
mm = om.MMatrix()
om.MScriptUtil.createMatrixFromList(m,mm)
mt = om.MTransformationMatrix(mm)
现在,我的最后一步是将此矩阵应用于网格,但我找不到一个好方法,有人知道如何在maya上执行此操作吗

提前感谢:
Seyren.

不确定将矩阵应用于网格是什么意思,但如果您希望通过使用该矩阵变换来更新每个点的位置,则可以使用给定的MFnMesh
网格
和给定的MMatrix
矩阵

import banana.maya
banana.maya.patch()
from maya import OpenMaya

mesh = OpenMaya.MFnMesh.bnn_get('pCubeShape1')
matrix = OpenMaya.MMatrix()

points = OpenMaya.MPointArray()
mesh.getPoints(points)
for i in range(points.length()):
    points.set(points[i] * matrix, i)

mesh.setPoints(points)
如果不想直接更新网格的点,则需要通过检索其父变换并使用
MFnTransform::set()
方法将矩阵应用于变换节点


请注意,我在代码片段中使用了我编写的一组扩展,如果您使用的是Maya Python API,这可能会有所帮助。代码在上提供,它还附带了一个示例,让您了解一些情况。

网格没有变换,而是变换的父节点。为什么要用api命令来做这件事呢?我的意思是,cmds.xform在这方面做得很好,您不需要实现撤销。现在我们来了,您知道如何使用API从特定顶点查询矩阵吗?我知道如何获取点,以及在世界空间中的每一个转换,与MMatrix相同,我知道如何从和对象查询矩阵,但我需要从每个顶点执行,提前感谢
import banana.maya
banana.maya.patch()
from maya import OpenMaya

mesh = OpenMaya.MFnMesh.bnn_get('pCubeShape1')
matrix = OpenMaya.MMatrix()

points = OpenMaya.MPointArray()
mesh.getPoints(points)
for i in range(points.length()):
    points.set(points[i] * matrix, i)

mesh.setPoints(points)