Sunday, May 1, 2011

Maya Python API 2.0!

Maya 2012 的 hotfix 1主打的一個項目就是 Python API 2.0! 根據宮方說法,新的 Python API 執行的更快,看起來也更 Pythonic,讓熟悉 Python 的開發者可以更容易的上手,從文件的說明有幾個重點,第一個就是新舊 API 可以共存,但不能共用,文件中提供了一個例子如下,



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: