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_frames
sys._get_frame
module.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 パスを検索します。
スクリプト結果は、[MAXScript リスナー](MAXScript Listener)ウィンドウに出力されます。
MAXScript の Python インタフェースには、MAXScript で Python を使用するためのメソッドが含まれています。 MAXScript で
showinterface python
を実行すると、MAXScript リスナーに、使用可能なメソッドのリストが表示されます。以下、これらのプロパティ、メソッド、引数について説明します。
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
#executeError
throwOnError
キーワード引数: メソッド実行中にエラーが発生した場合に、MAXScript がランタイム例外をスローするかどうかを制御します。true
に設定した場合は、#success
の結果コードが必ず戻ります。それ以外の場合は、ラン タイム例外がスローされます。例外処理用に try/catch 内で呼び出しを行うかどうかは、スクリプトの開発者に委ねられます。