MAXScript から Python を実行

MAXScript で Python ライブラリを使用

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()で機能しない呼び出しの例をいくつか示します。

  • sys._current_frames
  • sys._get_frame
  • module.globals()
  • module.locals()

MAXScript から Python を実行

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\pythonuserscripts\startup\pythonscripts\pythonscripts\startup\python のディレクトリ以下の Windows パスを検索します。

スクリプト結果は、[MAXScript リスナー](MAXScript Listener)ウィンドウに出力されます。

注: MAXScript で実行される Python スクリプトはスレッドセーフではありません。Python コマンドは必ず、メインの 3ds Max スレッドで実行されます。スクリプト内で個別のスレッドを生成すべきではありません(たとえば、Python スレッド モジュールを使用して)。

Python インタフェース メソッド

MAXScript の Python インタフェースには、MAXScript で Python を使用するためのメソッドが含まれています。 MAXScript で

showinterface python

を実行すると、MAXScript リスナーに、使用可能なメソッドのリストが表示されます。以下、これらのメソッドと引数について説明します。