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 の通信」を参照してください。
import maya.mel
maya.mel.eval("sphere -radius 3;")
global float $MyMELVariable=22.7;
TransferMELvar = maya.mel.eval("$temp=$MyMELVariable")
MEL と Python の間で変数を転送する場合、関数はステートメントの値を返します。MEL 構文では、変数をコマンド文字列として使用して変数の値を返すことはできません。MEL では、変数に値が割り当てられると、値はスクリプト エディタに返されます。eval() ステートメント内では、グローバル MEL 変数の値はテンポラリ変数に割り当てられます。
print TransferMELvar;
python "cmds.sphere()";
MyPythonVariable=22.7
float $TransferVarPy = `python "MyPythonVariable"`;
通常は戻り値がスクリプト エディタのヒストリ ウィンドウに返されるような場合に、MEL ではコマンドの戻り値の割り当てに逆引用符(`)を使用します。
print $TransferVarPy;