import maya.api.OpenMaya as newOM import maya.OpenMaya as oldOM newAttrObj = newOM.MObject() oldNodeObj = oldOM.MObject() ... newAttrFn = newOM.MFnAttribute(newAttrObj) ldNodeFn = oldOM.MFnDependencyNode(oldNodeObj) # 沒問題,新和舊的 API 分別使用不同的 function set print("Attribute name is %s.%s" % (oldNodeFn.name(), newAttrFn.name)) # 新舊混在一起用就不行了 newPlug = newOM.MPlug(oldNodeObj, newAttrObj)
使用 API 2.0 的 script 也必需提供 maya_useNewAPI 這個 function 讓 Maya
知道這是一個使用 API 2.0 的物件
def maya_useNewAPI(): pass
速度的提升主要是來自於 MArray 新增的 reference semantics ,相較於之前所使用的 value semantics 對於大型物件的 copy 可以大大的提升效率,但因為 Maya 沒有提供 reference counting 的機制,必需靠開發者使用上的注意,不然,如果使用一個已被刪掉的物件會造成 Maya 的當掉 (這還是好的結果,因為至少知道有問題), 要不就造成 Maya 的不穩,這就麻煩了。
文件也明確說到,歡迎各式各樣的 feedback ,不難感覺目前 Maya Python API 2.0 正在
如火如茶的開發中,我自已也很期待,這次 2.0 已經可以感覺到改進了不少,由其是這一點
"There are more types of exceptions used when
methods fail. Not everything is a RuntimeError, as was the case in the old
API."
這真是一個大利多,至少以後不用再亂猜到底是為什麼 methods 會呼叫失敗了(希望~)
No comments:
Post a Comment