3ds max, Programming

Py3dsMaxでKrakatoa PRTローダを操作する

Py3dsMax 関連でドハマりしたのでメモ。

Py3dsMax であるクラスに関連するオブジェクトを取得するのは、maxScript にある getClassInstances() 関数を使えば取得できます。が、どうやらモノによってはこれで取得したオブジェクトだと、親クラスで定義されているプロパティにアクセスできないようです。


from Py3dsMax import mxs 
for n in mxs.getClassInstances(mxs.KrakatoaPRTLoader): 
    print n.name

これは一見 OK そうですが、実はダメです。なーぜーーーーー!?

PRT Loader を選択した状態で selection から拾う、


from Py3dsMax import mxs 
for n in mxs.selection: 
    print n.name

これならイケるんですね。ぐぬぬぬ。何が違うのか全く不明です。

ちなみにどちらの例でも fileList のように KrakatoaPRTLoaderクラスで定義されているプロパティはアクセスできます。

でまあ、いろいろ試行錯誤した結果こんな感じに。ここで得られた objs なら、 show するなり何なりで通常のオブジェクトと同じように操作できます。


from Py3dsMax import mxs

objs = []
for n in mxs.getClassInstances(mxs.KrakatoaPRTLoader): 
    objs.append('selectMore ' + mxs.exprForMAXObject(n))

s = '''undo on
(
clearSelection()
%s
)''' % '\n'.join(objs)

mxs.execute(s)
objs = mxs.selection
mxs.execute('max undo')

for o in objs:
    print o.name

良い子はマネしちゃいけない、極悪非道なコードです。あまりにも酷すぎます。

全く、なんなんでしょうね、、、、、

Py3dsMaxでKrakatoa PRTローダを操作する”への2件のコメント

  1. Did you ever tried using the mxs.undoOn function with the Python Blur shell for 3dsmax?
    Wondering how this function could be use with Python…. any idea?

    1. sorry fo late response. actually, no. If it doesn’t work, you can try mxs.execute() to run max script from python. sometime it works.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です