Python と MEL 間の通信

 
 
 

Maya の MEL と Python はそれぞれお互いと通信するビルトイン コマンドを持ちます。MEL と Python は相手の言語でコマンドをコールし、最後に実行したコマンドの結果を評価します。

Python は eval() コマンドを使用して MEL と通信します。このレッスンの他の Python コマンドと違って、eval() 関数は Maya コマンド モジュール(maya.cmds)に属しません。eval() 関数は maya.mel モジュールに属します。eval() 関数は MEL スクリプトをコールするか、コマンドを文字列として送信して MEL コマンドを実行します。複数の MEL コマンドを文字列でコールするには、コマンドをセミコロン(;)で区切ります。Python eval() 関数は、最後に実行した MEL スクリプトの結果または eval カッコ内のコマンドを返します。

MEL は python コマンドを使用して Python と通信します。python コマンドは文字列だけを引数として受け入れます。文字列が Python に送信されて評価されると、結果が MEL に返されます。Python はより説明的なタイプのシステムなので、MEL に返される Python コマンドからの結果によってはデータ型が修正されることがあります。タイプ変換の詳細については、MEL と Python の通信(Maya ユーザ ガイド)を参照してください。

Python から MEL コマンドをコールするには

  1. スクリプト エディタ(Script Editor)Python タブを選択します。
  2. MEL モジュールを読み込みます。
    import maya.mel
    

    maya.mel モジュールは Python で MEL エクスプレッションを評価するモジュールです。

  3. 次のように入力して MEL コマンドをコールします。
    maya.mel.eval("sphere -radius 3;")
    

    Python コマンドを使用したのとまったく同じように、半径 3 の球が原点に作成されます。

  4. スクリプト エディタ(Script Editor)MEL タブを選択します。
  5. 次のように入力して MEL タブで変数を宣言します。
    global float $MyMELVariable=22.7;
    

    Python 内からアクセスできるのは、グローバル MEL プロシージャ、変数およびスクリプトだけです。

  6. Python タブを選択します。
  7. 次のように入力して MEL 変数の値を Python に転送します。
    TransferMELvar = maya.mel.eval("$temp=$MyMELVariable")
    

    MEL と Python の間で変数を転送する場合、関数はステートメントの値を返します。MEL 構文では、変数をコマンド文字列として使用して変数の値を返すことはできません。MEL では、変数に値が割り当てられると、値はスクリプト エディタに返されます。eval() ステートメント内では、グローバル MEL 変数の値はテンポラリ変数に割り当てられます。

  8. 次のように、Python コマンドを使用して、転送された MEL 変数の値を出力します。
    print TransferMELvar;
    

MEL から Python コマンドをコールするには

  1. スクリプト エディタ(Script Editor)MEL タブを選択します。

    MEL タブに入力したコマンドが MEL で実行されます。

  2. 次のように入力して Python コマンドをコールします。
    python "cmds.sphere()";
    

    あたかも Python タブでコマンドを入力したかのように、球が原点に作成されます。

  3. スクリプト エディタ(Script Editor)Python タブを選択します。
  4. 次のように入力して、Python タブで変数を宣言します。
    MyPythonVariable=22.7
    
  5. スクリプト エディタ(Script Editor)MEL タブを選択します。
  6. 次のように入力して Python 変数の値を MEL に転送します。
    float $TransferVarPy = `python "MyPythonVariable"`;
    

    通常は戻り値がスクリプト エディタ(Script Editor)のヒストリ ウィンドウに返されるような場合に、MEL ではコマンドの戻り値の割り当てに逆引用符(`)を使用します。

  7. 転送された変数の値を MEL で出力します。
    print $TransferVarPy;
    
    ヒント:

    Python と Maya の間の値の送信は、非表示のユーザ インタフェース要素を使用して行うこともできます。両方のスクリプト言語でユーザ インタフェース要素の内容を編集、検索要求することができます。