月: 2013年2月

3ds max, Programming

Py3dsMaxでmaxの特殊な引数への対応

max script で各種操作を行う際によく目にする、# 付きのパラメータ(named parameter? name type?)を Py3dsMax で扱うためのメモ。

本家のドキュメントの Type Conversion でも簡単には触れられているのですが、 “testing” という文字列を #testing という名前としての値に変換するには max script では


"testing" as name
#testing

とし、同様のことを Py3dsmax で行うには


>>> mxs.pyhelper.namify("testing")
#testing

とします。ここまでは OK。で、ここからが疑問で、関数への引数として渡すには? ということが書いてないです。どうすればいいんでしょう?

答えとしては単純で、namify された値をそのまま渡せばいけました。これに気づくまで、わざわざ max script のコードを生成してそれを実行してましたよ。。。。。

たとえば、確認ダイアログを出さないでシーンをリセットする場合。


noPrompt = mxs.pyhelper.namify('noPrompt')
mxs.resetMaxFile(noPrompt)

こんな感じです。メンドクサイですけど、しかたないですね、、、

コンピュータ

iTunesのデータをNASに置きたい

新しい iTunes が OSX 10.8 でサポートしていないということで Windows で iTunes を使えるようにするついでに NAS 上に iPhone のバックアップデータやらライブラリやらを置くようにしたのでその作業メモ。

Twitter であーでもないこーでもないとグダグダ呟いていたらいろいと御助言頂けた @takmiz 君、@kaoru さん、@cokeraita さん、@AItoiI さんたちには大感謝です!!

実作業

基本は、”放牧82日~iTunesのバックアップ保存場所変更方法(windows vista)~” の記事をそのまま実行しただけですw

ちょっと違うのが、元記事ではドライブ内のパスにリンクをはっているものを NAS 上のパスに直接リンクをはってしまったところです。こうすることで、NAS 上に iTunes のデータを置くことができます。私のようにメイン PC がノートで、SSD を使っているために容量に余裕が無い人なんかはこのような形で運用できると結構嬉しいのではないでしょうか。

iTunes で厄介なのが、iPhone などのバックアップデータを置く場所と音楽などのライブラリを置く場所が別々になっていることです。しかも一見するとどこにあるのか全くわかりません。普段意識させないのはいいんですが、完全に隠されると困ります 🙁

とグチは置いておいて、ググってファイルのありかを見つけたら二つともリンクをはります。

iTunes ディレクトリのリンクをはる

mklink /d C:\Users\chiyama\Music \\NAS01\home\chiyama\Music\iTunes

Backup ディレクトリのリンクをはる

mklink /d “C:\Users\chiyama\AppData\Roaming\Apple Computer\MobileSync\Backup” “\\NAS01\home\chiyama\Library\Application Support\MobileSync\Backup”

この二つでOK。ユーザー名とかパスは適宜読み替えてください。

mklink は何故か普通のコマンドとはオプションが逆で、

mklink /d “リンク先” “リンク元”

となっています。このコマンドを作った人のセンスを疑いますね 🙁

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

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

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