由於東西很多,所以我先鎖定 scripted 的 plug-ins ,看看 Python 寫的 plug-in 可以做到那些事情,
1,animCubeNode : input 是一個 time 值,output 是一個會隨時間改變大小的 mesh,可以用以下的 script 對這個 node 有比較清楚的體會。
import pymel.core as pm
# 建一個 transform node pm.createNode("transform", name="animCube1")
# 建一個空的 mesh node pm.createNode("mesh", name="animCubeShape1", parent="animCube1")
# 加到 initialShadingGroup pm.sets("initialShadingGroup", add="animCubeShape1")
# 建一個 animNode
pm.createNode("spAnimCube", name="animCubeNode1")
# 將 input 和 output 的屬性串起來 pm.connectAttr("time1.outTime", "animCubeNode1.time") pm.connectAttr("animCubeNode1.outputMesh", "animCubeShape1.inMesh")
2. basicObjectSet : 這是一個 command 可以將所選的物件加到 "spBasicObjectSet" 的 set 中,使用 MDagModifier 來建 node 和 connection,看到這裡的時候,我突然發現 MayaPython 和 Maya Python API 怎麼好像可以混在一起用的樣子!? pymel.createNode 和 OpenMaya.MDGModifier().createNode 可以做到一樣的事? 實際測試過後,在 Python 的 script 中直接呼叫 Python API 的 function 有些看起來似乎可以用(沒有錯誤訊息傳出),但大部份的 API 會傳回 # Error: RuntimeError: (kFailure): Unexpected Internal Failure # 想必是有做一些內部執行時的檢查(只是猜測),要不然寫 Python scripted API 用 pymel 或是 Maya Python 的 command,寫 script 的時候呼叫 API 裡的 function 那不就是一團混亂 ^^?
3. basicShape : user defined shape 的範例,定義了三種形狀,circle,rectangle 和 triangle,並示範如何利用 MpxSurfaceShape 和 MpxSurfaceShapeUI 來畫出使用者自訂的物件和選取的行為。
4. blindDoubleDataCmd : 示範如何加入讀,寫使用者定義的資料型別,所有 Maya 裡用到的型別都需要繼承 MPxData,而且需實作 readASCII/Binary 和 writeASCII/Binary,讓 Maya 在讀/寫檔的時候可以認得這些使用者定義的資料型別。
No comments:
Post a Comment