簡単なプラグイン

Python プラグイン

Maya はプラグインによって、機能を拡張することができます。 通常、プラグインは C++ 言語によって作成しますが、 8.5 より Python によってもプラグインを作成することができるようになりました。

コマンドプラグイン

MEL のコマンドを作成するプラグインです。
コマンドプラグインを作成するためには、以下のクラスと関数を用意します。

コマンドプラグインの作り方と実行例

まず、簡単な Python プラグインを作ってみましょう。

  1. Python フォルダーの中に helloWorld.py というファイルをエディターによって作ります。
    ファイル(helloWorld.py)の内容は、以下のように書いておきます。
    import sys
    import maya.OpenMayaMPx
    
    kPluginCmdName = 'helloWorld'
    
    class Hello(maya.OpenMayaMPx.MPxCommand):
        def __init__(self):
            maya.OpenMayaMPx.MPxCommand.__init__(self)
        def doIt(self, args):
            print 'Hello World!'
    
    def creator():
        return maya.OpenMayaMPx.asMPxPtr(Hello())
        
    def initializePlugin(mObject):
        mPlugin = maya.OpenMayaMPx.MFnPlugin(mObject)
        try:
            mPlugin.registerCommand(kPluginCmdName, creator)
        except:
            sys.stderr.write('Failed load plugin : %s' % kPluginCmdName)
            raise
    
    def uninitializePlugin(mObject):
        mPlugin = maya.OpenMayaMPx.MFnPlugin(mObject)
        try:
            mPlugin.deregisterCommand(kPluginCmdName)
        except:
            sys.stderr.write('Failed unload plugin : %s' % kPluginCmdName)
            raise
    
  2. helloWorld.py をロードします。
    以下のどちらかの方法でロードします。
  3. スクリプト エディタ の MEL タブから以下のように実行します。
    helloWorld;

スクリプトの解説

import sys
sys モジュールをインポートします。
ここでは、エラーの表示をするために必要です。
import maya.OpenMayaMPx
maya.OpenMayaMPx モジュールをインポートします。
コマンド用のクラスで、このモジュールの MPxCommand を継承します。
kPluginCmdName = 'helloWorld'
このコマンドの名前を helloWorld とします。
このプラグインをロードした後に、 スクリプトエディタで helloWorld というコマンド名で実行できるようになります。
class Hello(maya.OpenMayaMPx.MPxCommand):
MPxCommand クラスを継承して、Hello というクラスを定義します。
コマンドプラグインを作成する場合は、 このクラスに doIt() メソッドが必要です。
def __init__(self):
クラスのインスタンスを作成するときに実行されるメソッドです。
maya.OpenMayaMPx.MPxCommand.__init__(self)
親クラスである MPxCommand の初期化メソッド __init__ を実行します。
def doIt(self, args):
helloWorld コマンドが実行されたときに、 実行されるメソッドです。
args にはコマンドの引数が入っています。
print 'Hello World!'
文字列 'Hello World!' を表示します。
def creator():
クラス Hello のインスタンスを作成するための関数です。
Maya がコマンドのインスタンスを作成するために、この関数が必要です。
return maya.OpenMayaMPx.asMPxPtr( Hello() )
Hello クラスのインスタンスを作成して、返します。
def initializePlugin(mObject):
プラグインがロードされるときに実行される関数です。
この関数がないとプラグインがロードされません。
mPlugin = maya.OpenMayaMPx.MFnPlugin(mObject)
MFnPlugin クラスのインスタンスを作成します。
try:
mPlugin.registerCommand( kPluginCmdName, creator )
プラグインを Maya に登録します。
コマンド名が変数 kPluginCmdName に代入された 'helloWorld'、 コマンドのインスタンスを作成する関数が creator() になります。
try によって、ロードに失敗した場合は例外を送出します。
except:
sys.stderr.write( u'コマンド登録失敗 : %s\n' % kPluginCmdName )
raise
プラグインの登録に失敗した場合に、メッセージを表示します。
受け取った例外は、raise によって送出しなおされます。
def uninitializePlugin(mObject):
プラグインをアンロードするときに実行される関数です。
mPlugin = maya.OpenMayaMPx.MFnPlugin(mObject)
MFnPlugin クラスのインスタンスを作成します。
try:
  mPlugin.deregisterCommand( kPluginCmdName )
プラグインをアンロードします。
try によって、アンロードに失敗した場合は例外を送出します。
except:
  sys.stderr.write( u'コマンド登録失敗 : %s\n' % kPluginCmdName )
  raise
プラグインのアンロードに失敗した場合に、メッセージを表示します。
受け取った例外は、raise によって送出しなおされます。

% 演算子

% 演算子を使うと、 C 言語の printf() 関数のように文字列中に数値・文字列を挿入することができます。

val2 = 3
s1 = 'test'
s2 = 'this is %s, %d times' % (s1, val2) # s2 == 'this is test, 3 times'

Tips (デバッグ方法)

プラグインのロード時にエラーが起きた場合、または、機能を追加・改良した場合は、 プラグインをアンロードして、ロードしなおします。

練習

まとめ

参考


Prev | Next
Home | Contents
Mail