Python.Import()を使用すると、Python ライブラリを読み込んで、MAXScript 内で使用することができます。 この例では、Python の組み込みメソッドおよび定数を読み込んで、pow()関数を使用します。
bi = Python.Import "__builtin__" -- <module '__builtin__' (built-in)> bi.pow 2 3 -- 8
モジュールがダーティになった場合は(キーワードが再定義された場合など)、Python.Reload()を使用して再度読み込むことができます。
python.reload bi -- <module '__builtin__' (built-in)>
int、bool、float、str などのシンプルな Python の型は、対応する MAXScript の型にコピーされます。リスト、タプル、辞書、クラスなどの複雑な型は、ラッパー オブジェクトによってマーシャリングされます。型のプロパティおよび関数には名前でアクセスできます。リストなどのシーケンス型の場合は、インデックスを使用して繰り返すことができます。MAXScript に渡された Python のリストは 1 をベースとします。
たとえば、Python タプルを作成してアクセスするには、以下を実行します。
bi = python.import("__builtin__") tp = bi.Tuple(#(1,2,3)) --(1, 2, 3) print tp[0] -- output: 1 bi.type(tp) -- output: <type 'tuple'>
Python 辞書を作成してアクセスするには、以下を実行します。
d = bi.dict one:1 two:2 three:3 -- {u'one': 1, u'three': 3, u'two': 2} d["four"] = 4 bi.print(d["four"]) -- 4
次に、Python から MAXScript に渡された、1 をベースとするリストの例を示します。
str = python.import("string") mystrlist = str.split("an example string") mystrlist[1] -- prints "an"
Python にバインドされた MAXScript、メソッド、および関数における Python のラッピング方法が原因で、実行フレームは予測どおりに機能しなません。次に、Python.import()で機能しない呼び出しの例をいくつか示します。
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 スクリプトを探します。
たとえば、3ds Max は、userscripts\python、userscripts\startup\python、scripts\python、scripts\startup\python のディレクトリ以下の Windows パスを検索します。
スクリプト結果は、[MAXScript リスナー](MAXScript Listener)ウィンドウに出力されます。
MAXScript の Python インタフェースには、MAXScript で Python を使用するためのメソッドが含まれています。 MAXScript で
showinterface python
を実行すると、MAXScript リスナーに、使用可能なメソッドのリストが表示されます。以下、これらのメソッドと引数について説明します。
GetLastError(): Init() メソッド、Execute() メソッド、または ExecuteFile() メソッドの実行中に発生した最後のエラーに関連するエラーメッセージを文字列として返します。