[Maya API] lesson25_Maya API 中的多边形处理 - MFnMesh/MItMesh

MFnMesh

功能:作为最常用物体类型的基础函数类,MFnMesh包含了所有的polygon操作方法

特性:可以采集所有的polygon信息以及编辑polygon

我们主要使用MFnMesh进行查询和编辑多边形,所有的多边形都可以使用他的方法

从帮助文档中可以看到:

[Maya API] lesson25_Maya API 中的多边形处理 - MFnMesh/MItMesh_第1张图片

我们可以不传入任何参数,创建一个MFnMesh,那么我们也可以把现有的多边形传进去,然后来生成一个MFnMesh。

那么我们传进去一个空的呢,实际上是没有任何的东西出现的,我们还需要使用create方法,来把这个多边形创建出来,实际上对于我们现有的场景,我们呢直接就可以传入他的MObject或者传入他的MDagPath就可以了

[Maya API] lesson25_Maya API 中的多边形处理 - MFnMesh/MItMesh_第2张图片

我们使用最基本的一个球体,首先导入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

 

你可能感兴趣的:(Maya,API)