[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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章