Python API 2.0 を使用する

Python API 2.0 を使用する

新しい Python API モジュールは、maya.api にあります。 例:

import maya.api.OpenMaya as om

モジュール名は古い API と同じですが、プロキシ クラス(MPx で始まるクラス)は、それ自身のモジュールを持たず、他の関連クラスと同じモジュールに常駐します。これは、より C++ API に似た構造になっています。

クラス名は、古い Python API および C++ API の場合と同じです。 メソッド名はほとんど同じで、ワークフローに影響する場合にいくつかの違いがあります。 単にオブジェクト上で値を取得または設定するメソッドのいくつかは、Python オブジェクト アトリビュートに置き換えられました。

新しい API クラスと古い API クラスを同じスクリプト内で使用することができますが、それらのオブジェクトには相互運用性はありません。 したがって、以下は実行可能です。

import maya.api.OpenMaya as newOM
import maya.OpenMaya as oldOM

newAttrObj = newOM.MObject()
oldNodeObj = oldOM.MObject()

#...

newAttrFn = newOM.MFnAttribute(newAttrObj)
oldNodeFn = oldOM.MFnDependencyNode(oldNodeObj)
	
# OKAY: Print names from old and new function sets.
print("Attribute name is %s.%s" % (oldNodeFn.name(), newAttrFn.name))

しかし、以下は実行できません。

import maya.api.OpenMaya as newOM
import maya.OpenMaya as oldOM

newAttrObj = newOM.MObject()
oldNodeObj = oldOM.MObject()

#...

# BAD: Passing an old API MObject to a new API method.
newPlug = newOM.MPlug(oldNodeObj, newAttrObj)

クラスとメソッド名が 2 つの API 間でまったく同一の場合、混乱の可能性が高くなります。したがって、可能であればそれらを混用しないでください。

新しい API を使用するプラグインを記述する場合、プラグインは maya_useNewAPI と呼ばれる関数を定義しなければなりません。これによって、Maya は、古い API からではなく新しい API からオブジェクトをプラグインに渡すことができます。 次に例を示します。

def maya_useNewAPI():
    pass

Maya のヘルプ メニューから利用可能なオンラインのコメント送付サイト、および Autodesk Developer Network を利用し、この新しい Python API についてのフィードバックをぜひお寄せください。

Python 2.0 クラスのリストについては、Maya Python API 2.0 リファレンスを参照してください。