[Maya API] 一、基本類型介紹

1、Maya API基本結構

1.1 API語言支持

C++ API(Application Programmer Interface) 比MEL和Python有更好的性能,你可以使用API創建你自己的新的節點,運算能力超過MEL大約10倍,你也可以使用API調用MEL腳本

Python API基於C++ API構建的可以使用python編程的API,現在Python API具有1.0和2.0兩個版本

1.2 API 編譯的插件後綴

Linux:.so

Window:.mll

Mac OS X: .bundle

通用型插件:.py

1.3 API內置庫

OpenMaya         基本的操作工具類

OpenMayaUI     界面工具類

OpenMayaAnim  動畫工具類

OpenMayaFX      特效工具類

OpenMayaRender  渲染工具類

1.4 API命名規則

M classes -基本的數據類型   類似python中的字符串這些基本類型

MFn - Function 函數工具類

MIt - Iterator 迭代器類型

MPx - 代理類型,擴展Maya功能需要繼承的類

如果要使用API,則需要把節點或者物體初始化爲以M開頭的類型,API才能識別

MFn:我們可以通過這種方法,針對不同的物體進行各自的操作

MIt:對於一批物體需要逐個訪問、要使用這種迭代器類型,使用循環挨個訪問他們的元素

MPx:按照這種格式編寫好插件,Maya就可以根據定義好的格式來加載這些插件,人工編寫,Maya自動識別

2.DependencyNode 和 DagNode

DependencyNode Maya最基本的節點種類

在maya中,所有的節點都是一個DependcyNode(依賴節點),我們所有的數據都是依賴於節點來計算的,每個節點存儲了我們所需要的數據,節點之間的相互計算,形成節點網絡,也就形成了我們最終的文件。那麼最基本的一個節點就是DependencyNody,類似我們的材質節點,獨立的單個節點。

Maya DagNode就是帶有層級關係的,也就是說在大綱裏,我們就可以設置他的父子關係了。DagNode是從DenpendcyNode擴展而來的,DagNode擁有DependcyNode的所有方法,可以使用DependcyNode的方法來處理任何一個DagNode,但是類似於層級操作這種,比如獲取物體的上下級關係

3.Mobject Maya最基本的對象指針

Maya API類型基礎類型,所有類型繼承於此。代表一個指向節點的指針

Mobject:Maya最基本的一個對象,如果使用API的話,Mobject是我們處理的最基本的一個數據,就像python編程中,一個變量,雖然時字符串或者整數,它都是一個python的基本對象。在Maya API中,它不能以字符串這種來處理節點,必須要轉化程一個MObject才能處理,也就是說Maya中任何一個對象都是一個Object,當然處理類似於他的名字、屬性值,這種字符串或者數值例外,也就是說這是一個最基本的索引。他指向了每一個節點,我們在處理某一個節點就認爲他是一個MObject。

如何查詢Maya API文檔:

~MObject  析構函數:一般不會用到它,除非我們編寫節點的時候,需要用到他來清理內存

如何創建一個MObject?

我們要使用Maya API就要先導入OpenMaya

import Maya.OpenMaya as OpenMaya

創建一個MObject

import Maya.OpenMaya as OpenMaya

OpenMaya.MObject()

那麼,他生成了一個MObject,但是這個Object是空的,因爲我們沒有給他指向任何一個物體。

我們需要給Object傳入一個物體,所以我們可以借用pymel來生成一個物體

import maya.OpenMaya as OpenMaya
import pymel.core as pm

ball_pml_node = pm.PyNode('pSphere1') #ball_pml_node爲pymel節點,
ball_api_node = ball_pml_node.__apimobject__()  #生成了一個MDagPath,與OpenMaya.MObject相同, 
                                                #但它指向的是一個物體
ball_api_node.isNull()  #判斷API節點是否爲空
ball_api_node.apiType()  #api節點類型

我們在處理任何一個節點時,都要轉化爲MObject。任何一個DagNode,也就是說大綱裏的物體都是一個DenpendecyNode也都擁有MObject,那麼他當然有自己的一種索引方式,就是DagPath。

DagPath

我們可以新定義一個DagPath,也可以從另一個DagPath來生成一個新的DagPath,這個他就會追蹤我們大綱裏的一個節點,方法要比剛纔的MObject要多,它還有靜態的方法,也就是說我們可以通過一個剛纔的類似於那種MObject來抓取他的DagPath,或者是直接從PyMel來生成。

靜態方法的意思是:我們沒有實例化一個結點之前我們就可以調用他的這些通用的方法。

import maya.OpenMaya as OpenMaya
import pymel.core as pm

ball_pml_node = pm.PyNode('pSphere1') #ball_pml_node爲pymel節點,
ball_api_node = ball_pml_node.__apimobject__()  #生成了一個OpenMaya.MObject
                                                #但它指向的是一個物體

ball_dag_path = OpenMaya.MDagPath() #創建一個空的DagPath對象

OpenMaya.MDagPath.getAPathTo(ball_api_node,ball_dag_path)

"""
執行邏輯就是抓取MObject的DagPath存儲到一個DagPath中
"""

ball_dag_path.fullPathName()  #在大綱裏的一個長名

ball_dag_path.partitialPathName()  #在大綱的短名

總結:

MObject:任何一個節點,都通過把它交給API來處理。

MDagPath:可以把大綱裏的物體通過它來交給API進行處理

MObject與MDagPath也是有聯繫的,我們可以通過MDagPath找到物體對應的MObject,也可以通過傳入MObject,給物體定義好一個DagPath來處理他的層級關係。

發佈了59 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章