[Maya API] lesson25_Maya API 中的多边形处理 - MFnMesh/MItMesh
MFnMesh
功能:作为最常用物体类型的基础函数类,MFnMesh包含了所有的polygon操作方法
特性:可以采集所有的polygon信息以及编辑polygon
我们主要使用MFnMesh进行查询和编辑多边形,所有的多边形都可以使用他的方法
从帮助文档中可以看到:
我们可以不传入任何参数,创建一个MFnMesh,那么我们也可以把现有的多边形传进去,然后来生成一个MFnMesh。
那么我们传进去一个空的呢,实际上是没有任何的东西出现的,我们还需要使用create方法,来把这个多边形创建出来,实际上对于我们现有的场景,我们呢直接就可以传入他的MObject或者传入他的MDagPath就可以了
我们使用最基本的一个球体,首先导入pymel和OpenMaya,
定义mfn = OpenMaya.MFMesh
import maya.OpenMaya as OpenMaya
import pymel.core as pm
mfn = OpenMaya.MFnMesh(pm.PyNode('pSphere1').__apiobject__())
# 生成一个MFnMesh,我们定义了这个实例,实力就与这个物体已经绑定上了,就可以对他进行查询和编辑了
mfn.numVertices() # 查询他有多少个点,一个基本的球,就有382个点
mfn.numEdges() # 查询他有多少根线
mfn.numPolygon # 查询他有多少个面
point = OpenMaya.MPoint(0, 2, 0) #定义一个MPoint,存放点的坐标
mfn.setPoint(100, point) # 需要一个ID和MPoint 设置索引为100的点的坐标为MPoint里面的数值
print(point.x, point.y, point.z)
MItMesh
关于多边形的迭代器,有好几种:
我们可以使用MItMeshVertex、MItMeshEdge、MItMeshFaceVertex,实际上我们用的最多的就是Vertex、Polygon、Edge
点线面我们都可以操作了,实际上已经够我们的需求了
我们要生成一个点的迭代器,我们就只能传入一个MObject,就不能传入MDagPath,所以在这里我们要把我们的物体生成一个MObject,然后再传给她,可以使用它的方法
import maya.OpenMaya as OpenMaya
import pymel.core as pm
iterator = OpenMaya.MItMeshVertex(pm.PyNode('pSphereShape1').__apimobject__())
while not iterator.isDone():
point = iterator.position()
print point.x, point.y, point.z
point = OpenMaya.MPoint(0, 0, 0)
iterator.setPosition(point)
iterator.next()
在这里pSphere1是一个transform,实际上我们要传入他的shape了:pSphereShape1,我们直接使用__apiobject__生成的是一个MDagPath,那么我们直接加上MObject,那么他生成的就是一个OpenMaya.MObejct,iterator.count返回的的就是点的数量,因为在迭代器里面,我们实际上是针对的某一个点,所以说我们一直求他的总数量,setposition
MItMesh
共有四种不同的迭代器可以使用,可以迭代不同的组件
MItMeshEdge
MItFaceVertex
MItMeshPloygon
MItMeshVertex
上一篇: 这么用01串