欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-19 21:35:27
...

MFnMesh

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

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

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

从帮助文档中可以看到:

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

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

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

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

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