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" )

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

對我來說,最好的學習資料來源就是 Maya DevKit 裡的範例,每一次新版 Maya 更新,我都會先去瞧一瞧裡面有沒有什麼新東西,也常常會有意料之外的驚喜,但最近也突然發現自已對這些最好的研究資料掌握度並沒有很高,很多東西都只有一知半解(可能連半解都不到),想趁著自已有空閒的時間,好好的走過這些開發團隊的心血,

Sunday, April 24, 2011

Tetrix in Maya with PyQt

在瀏覽 PyQt 的範例時,意外發現有一個 tetrix 的範例,不知為什麼就很想看看在 Maya 裡玩 tetrix 是怎樣的感覺,雖然很久以前好像就知道有人做過類似的東西(用 mel 做的? 我是只有聽過啦),總之,帶著興奮的心情就開始了,

Friday, April 8, 2011

第一個 Maya PyQt 的小程式

Maya 2011 的介面使用 Qt ,那到底帶給開發者什麼樣的好處呢?我第一直覺就是 ya! 可以使用 QtDesigner 來設定介面,不用在一行一行去設定 UI 的大小位置,但第二直覺就在想那 Maya 厡生的 UI control 如 gradientControl 或是 attrNavigationControlGrp 等要如何去整合到 QtDesigner 裡呢,雖然我是覺得可以用Qt所供的元件再去實作出一樣的 Maya UI 元件,但感覺卻是一件大工程 ^^? 有點偏題了,這次的練習想由 QtDesigner 做出介面,並使用 PyMel 來實作功能,想做怎樣的東西卻有點苦腦,最後決定做一個可以用 regular expression 來搜尋場景中物件的小工具,

Vim 學習筆記 (三)

什麼是人的隋性,看看自己的 blog 就可以有深刻的體會!! 離上一次寫寫東西居然已經過了三個月了 (迷之聲:明明就是自己懶隋,還要拖別人下水)也再一次的體驗到時光飛逝的速度,使用 vim 的時間又增加了一些些,但一直覺得 taglist 不能用在 Maya mel 實在有些不方便,厡因是Exuberant Ctags 沒有支援 Mel,想說會不會已經有解,但很可惜的找了許久還是沒有找到,但我需要的功能又不用太複雜,只要可以找到 function 的定義就夠了,想著想著,乾脆自己來