赞
踩
功能:作为最常用物体类型的基础函数类,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)
关于多边形的迭代器,有好几种:
我们可以使用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
共有四种不同的迭代器可以使用,可以迭代不同的组件
MItMeshEdge
MItFaceVertex
MItMeshPloygon
MItMeshVertex
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。