Maya Templates

Maya每個節點都會帶有一個Attribute屬性界面。這個界面的定義在 maya安裝目錄下的 scripts\AETemplates 。

屬性界面操作常用命令:
editorTemplate、setParent、frameLayout、connectAttr等等。

屬性界面的基本原理:
1.Maya啓動時,不加載任何屬性界面。
2.若選擇一個節點,並且調出了屬性編輯器。
3.讀取AEnodenameTemplate對應的mel文件,把方法加載到內存中。
4.給新的屬性界面分配佈局位置。一般爲MayaWindow|MainFormLayout|....之類的。
5.把佈局位置分配給當前Template。
6.執行已經分配到內存裏的AEnodenameTemplate方法。
7.執行mel文件裏的佈局程序,並且立刻執行佈局時需要調用的-callCustom參數對應的new方法。
8.更新完成後,每次屬性的更改、每次切換節點等都會觸發-callCustom參數對應的modifier方法。

需要注意的事項:
1.因爲每個節點加載到內存中只有一次機會創建屬性佈局,所以一旦分配好佈局位置這個節點就不會變。
  從這個意義上講,如果獲得了佈局位置,那麼就可以任何時間內無限次動態修改一個節點的屬性界面。
  因爲沒有簡便方法能夠獲得每個節點所在的佈局位置(有方法,不過較爲麻煩),所以較難修改其他的屬性界面。
  內部集成化,可以有效減少誤操作。但有個壞處,就是一旦系統分配的屬性界面被改壞了,就需要重啓Maya。
  (當然,這個問題可以使用重刷佈局的方法刷回來。反正Maya系統里布局的位置只是映射了一堆字符串而已。)
2.-callCustom後的方法爲什麼都是global的?因爲在創建控件的時候,它必然先調new方法,給控件佔位。
  方便接着後面的佈局操作。而如果是非global的函數,則有可能調用非global才能調用方法、事件。
  而爲了使得控件能夠高效地加載,Maya選擇了減少數據調用層次+消耗內存的方法來實現。
  (其實這個問題對於喜歡寫冗餘程序的人來說,根本不算一個限制。)
3.modifier方法僅僅是爲了刷新,那麼它裏面的內容有時會跟new是重複的,但更多的是new的精簡版。
4.Maya的Template一開始是沒有任何加載的。同樣都是global函數,調用另一個未加載的界面佈局內的其他函數是會報錯。
5.layout的查詢是根據每個layout的不同類型分別查詢的。否則就不出結果。

製作了三天Maya的Template界面,還是小有收穫。又找到了編程的感覺。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章