Python.Import() を使用すると、Python ライブラリを読み込んで、MAXScript 内で使用することができます。この例では、Python の組み込みメソッドおよび定数を読み込んで、pow() 関数を使用します。
bi = Python.Import "builtins"
--> <module 'builtins' (built-in)>
bi.pow 2 3
--> 8モジュールがダーティになった場合は(キーワードが再定義された場合など)、Python.Reload() を使用して再度読み込むことができます。
Python.Reload bi
--> <module 'builtins' (built-in)>int、bool、float、str などのシンプルな Python の型は、対応する MAXScript の型にコピーされます。リスト、タプル、辞書、クラスなどの複雑な型は、ラッパー オブジェクトによってマーシャリングされます。型のプロパティおよび関数には名前でアクセスできます。リストなどのシーケンス型の場合は、インデックスを使用して繰り返すことができます。MAXScript に渡された Python のリストは 1 をベースとします。
たとえば、Python タプルを作成してアクセスするには、以下を実行します。
bi = Python.Import "builtins"
tp = bi.tuple(#(1,2,3)) --(1, 2, 3)
print tp[1] -- output: 1
print tp[0] -- output: 3, same as tp[3]
bi.type(tp) -- output: <class 'tuple'>Python 辞書を作成してアクセスするには、以下を実行します。
d = bi.dict one:1 two:2 three:3 -- {'one': 1, 'two': 2, 'three': 3}
d["four"] = 4
bi.print(d["four"]) -- 4次に、Python から MAXScript に渡された、1 をベースとするリストの例を示します。
mystrlist = bi.str.split "an example string"
-- ['an', 'example', 'string']
mystrlist[1]
-- prints "an"Python にバインドされた MAXScript、メソッド、および関数における Python のラッピング方法が原因で、実行フレームは予測どおりに機能しなません。次に、Python.import() で機能しない呼び出しの例をいくつか示します。
sys._current_framessys._get_framemodule.globals()module.locals()MAXScript 内部から、Python のコマンドとステートメント(単一のコマンド/式または一連のステートメント)、または Python スクリプト(.py スクリプトなど)を実行できます。次のように python.Execute コマンドと python.ExecuteFile コマンドをそれぞれ使用します。
python.Execute "print('hello')"python.ExecuteFile "demoBentCylinder.py"たとえば次のように ExecuteFile コマンドを使用して完全パスを指定すると、3ds Max は、指定パスから Python ファイルを探します。
python.ExecuteFile @"C:\Program Files\Autodesk\3ds Max 2015\scripts\Python\demoBentCylinder.py"そうでない場合は、3ds Max は次のディレクトリ以下から Python スクリプトを探します。
Path 環境変数によって指定される Windows パス。これらのディレクトリを一覧表示するには、コマンド プロンプトに echo %path% と入力します。たとえば、3ds Max は、userscripts\\python、userscripts\\startup\\python、scripts\\python、scripts\\startup\\python のディレクトリ以下の Windows パスを検索します。
スクリプト結果は、[スクリプト リスナー](Scripting Listener)ウィンドウに出力されます。
MAXScript の Python インタフェースには、MAXScript で Python を使用するためのメソッドが含まれています。MAXScript で
showinterface pythonを実行すると、スクリプト リスナーに、使用可能なメソッドのリストが表示されます。以下、これらのプロパティ、メソッド、引数について説明します。
Import: Python モジュールを読み込みます。Reload: Python モジュールが再定義されている場合などに、このモジュールを再ロードします。これらは Python インタフェースのプロパティとしてリストされますが、引数(Python モジュールの名前)を取り、読み込まれたモジュールへの参照を返すという点では、メソッドと同様に動作します。上記の例を参照してください。
Init(): まだロードされていない場合に Python がロードされます。
Execute() および ExecuteFile(): まだロードされていない場合に Python がロードされます。Python を使用することがわかっていて、最初に使用するときに発生するロード関連の遅延を回避したい場合に Init() を使用します。3ds Max を実際に使用しているときではなく、起動時にロードする場合に、スタートアップ スクリプトで python.Init() を呼び出します。
GetLastError(): Init() メソッド、Execute() メソッド、または ExecuteFile() メソッドの実行中に発生した最後のエラーに関連するエラーメッセージを文字列として返します。
結果コード (enums): Python を MAXScript から実行すると、結果コードは次の定数になる可能性があります。
#success#pathError#initError#scriptFileError#executeErrorthrowOnError キーワード引数: メソッド実行中にエラーが発生した場合に、MAXScript がランタイム例外をスローするかどうかを制御します。true に設定した場合は、#success の結果コードが必ず戻ります。それ以外の場合は、ランタイム例外がスローされます。例外処理用に try/catch 内で呼び出しを行うかどうかは、スクリプトの開発者に委ねられます。