Saturday, April 30, 2011

我的 Maya Python scripted API 學習之旅 (二)

  • CircleNode : 一個 DG node,input 可以是一個數值(例如時間),然後 output 是根據 input算出的 sine 或 cosine,在 plug-ins 的目錄底下還有一個 circleNode.mel 示範要如何使用這個 circleNode,我覺得這個範例雖然說沒有很複雜,但卻清楚說明了 Maya 設計上的理念,整個 Maya 無數個 node 所組合成,每個 node 的功能都明確的定義,資料進,經過加工處理,輸出新的資料,node 與 node 間乾乾淨淨沒有相依關係,這也是我相當為 Maya 著迷一個原因。  
import pymel.core as pm  
# 建一個 circleNode
pm.createNode("spCircle", name="circleNode1")
# 建一個球
newSphere = pm.sphere(r=1)
# 將時間的 outTime 串到 circleNode 的 input
pm.connectAttr("time1.outTime", "circleNode1.input")
# 將 circleNode 的 sineOutput 串到球的 translate Y
pm.connectAttr("circleNode1.sineOutput", '%s.ty' % newSphere[0])
# 將 circleNode 的 cosineOutput 串到球的 translate Z
pm.connectAttr("circleNode1.cosineOutput", '%s.tz' % newSphere[0])

  • customImagePlane : 如何使用 MPxImagePlane 的範例,可以讓使用者定義新的 image plane 使用特定的 image 格式或是改變現有 image plane 的行為。
  • customNodeFileTranslator : 非常陽春的 exporter/importer,輸出場景中 node 的名字,讀進來的時候,就將輸出檔中的名字列印出來。
  • filmMoveManip : 一個自訂的 manipulator 用來控制 camera 的 filmTranslateH 和 fileTranslateV ,這個範例有一個 bug ,在 updateManipulators 這一個 function 中    selectionIter = OpenMaya.MItSelectionList(selectionList, OpenMaya.MFn.kInvalid)用 OpenMaya.MFn.kInvalid 是沒辦法選到 Camera 的,需要改成 OpenMaya.MFn.kCamera 才行,執行以下的 script 可以在 Custom 的 shelf 做出一個按鈕,選一個 camera 後,按下按鈕,按鈕會被 highlight 然後就可以在 viewport 裡秀出這個 manipulator 來拖拉改變 camera 的設定。
     
import maya  
maya.cmds.spFilmMoveManipCtxCmd( 'spFilmMoveManipContext1' )
maya.cmds.setParent( 'Custom' )
maya.cmds.toolButton( 'spFilmMoveManip1', cl='toolCluster', t='spFilmMoveManipContext1', i1="filmMoveManip.xpm" )

No comments: