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 コマンドからの結果によってはデータ型が修正されることがあります。タイプ変換の詳細については、『Python』マニュアルの「 MEL と Python の通信」を参照してください。

Python から MEL コマンドを呼び出すには

  1. スクリプト エディタPython タブを選択します。
  2. MEL モジュールをインポートします。
    import maya.mel

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

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

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

  4. スクリプト エディタ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. スクリプト エディタMEL タブを選択します。

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

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

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

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

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

  7. 転送された変数の値を MEL で出力します。
    print $TransferVarPy;
    ヒント:Python と Maya の間の値の送信は、非表示のユーザ インタフェース要素を使用して行うこともできます。両方のスクリプト言語でユーザ インタフェース要素の内容を編集し、照会することができます。