什麼是pymel咧?有在寫mel的應該都知道Maya在8.5版之後,有跟python做結合。但是....結合的不是很好,有很多python的優勢沒有發揮出來,像是對資料的動態處理。所以呢,就有幾位工程師,開始著手改良python與maya的結合~~~pymel就誕生了。話說某天用maya原本的python在寫一個工具,為了要動態的存取stringarray這個type的attribute,try了很久,但是卻一直跳error出來,而我現在的主管就在這時向我介紹了這好物,整個輕鬆解決了那時的問題。先介紹一下一下怎麼安裝,再敘述當時遇到的狀況囉~
可以先去這個連結:
http://www.highend3d.com/maya/downloads/tools/syntax_scripting/Pymel-4844.html
下載pymel的壓縮檔,解壓縮後,會得到一個名稱為pymel的資料夾。如果是Windows的使用者,直接將此資料夾複製到My Document\maya\prefs\script裡,即可使用。
來敘述一下當時遇到的問題吧,先看以下code:
###########################################################
import maya.cmds as mcmds
#宣告一個array, 值為a, b, c
TestStringArray=['a','b','c']
#新增一個transform的node,並將其命名為testnode
mcmds.createNode( 'transform', n='testnode' )
#給testnode新增一個資料型態為stringArray的屬性,其名稱為test_stringArray
mcmds.addAttr('testnode', longName='test_stringArray', dt='stringArray')
#將TestStringArray的值,assign給testnode.test_stringArray
mcmds.setAttr('testnode.test_stringArray', 3, TestStringArray, type='stringArray')
###########################################################
執行的話,會在最後一行發生error,因為它不能先宣告一個array (test_stringArray=['a','b','c']),然後再把這個array的值set給testnode.test_stringArray。所以得將最後一行改成
mcmds.setAttr('testnode.test_stringArray', 3, 'a', 'b', 'c', type='stringArray')
如果現在要在這個testnode.test_stringArray放100筆資料呢.....總不能這樣寫
mcmds.setAttr('testnode.test_stringArray', 100, 'a1', 'a2', 'a3',...bla bla...,'a100', type='stringArray')
很恐怖吶!!
但是換成用pymel的話,就可以直接用已經宣告好的array來用,如下:
#先import pymel的module
from pymel import *
#將TestStringArray assign給testnode.test_stringArray
setAttr('testnode.test_stringArray', TestStringArray)
酷吧~ 而pymel在寫UI時,也有其便利性在,以後有機會在寫上來囉~
Blog停止更新,請各位移駕其他SNS平台。
1 個月前
我一樣是 pymel 的忠實愛用者 :D:D
回覆刪除果然是好物,所以使用它就不需要打一堆mcmds.囉?
回覆刪除maya2011好像将pymel完善了很多
回覆刪除很喜欢看你写的东西
能不能再写点关于pymel的东西啊
嘿嘿
前輩 你好
回覆刪除我是最近剛踏入maya script的新人
看了前輩這篇文章,有點疑問
之前在maya的script editer上
有看到兩個標籤,分別是MEL和Python
然後,想請問前輩, 文章之中提到的pymel
就是指Python這個標籤嗎
還是說pymel的環境需要額外建立
晚備用的軟體是 maya 2011