2014年8月30日土曜日

Maxscript ParticleFlowの見えないあいつ等をなんとかしたい

パーティクルフローの見えないあいつ等やっかいですよね。レイヤー消せない時の理由の10割が大体こいつらのせい。最近のバージョンでは厄介ではなくなっているんですかね?

パーティクルフローに関係する奴らを1つのレイヤーにまとめるスクリプトでも。
僕がrefs.dependentsを知ったきっかけになったテーマでもあります。知り合いの方に教えて頂きました。

--------------
LAYERNAME = "particle flow"
l = LayerManager.getLayerFromName LAYERNAME --名前でレイヤー取得
if l == undefined  then l = LayerManager.newLayerFromName LAYERNAME -- 見つからなかったら"particle flow"レイヤー作成
pfs = getClassInstances PF_Source --シーン内のパーティクルフロークラス収集
/***************************************
選択しているパーティクルフローだけで行いたい場合は
 pfs = getClassInstances PF_Source target:$
とか
**************************************/
for p in pfs do (
    rfs =  refs.dependents p -- パーティクルフローと関係する奴ら収集
    for r in rfs do (
        try(l.addNode r) catch()--片っ端からレイヤーに突っ込んでみる
    )
)
l.current = True --なくてもいいです。作ったレイヤーをアクティブにしたいとき
-------------


なんかコメント入れたらブログでは非常に見づらかったのでコメント取り除いたものも・・・


--------------
LAYERNAME = "particle flow"
l = LayerManager.getLayerFromName LAYERNAME
if l == undefined  then l = LayerManager.newLayerFromName LAYERNAME
pfs = getClassInstances PF_Source

for p in pfs do (
    rfs =  refs.dependents p
    for r in rfs do (
        try(l.addNode r) catch()
    )
)
-------------

ちなみにですが、MAXScriptは大文字小文字関係ないので全部小文字でもいいのですが見やすくするために大文字小文字を上手く使う事があるようです。また、僕個人としてはMaxscriptはどれが関数名でどれが引数だとか非常に見づらい印象があるので、引数とかに()つけるようにとかしてます。

if l == undefined  then l = LayerManager.newLayerFromName LAYERNAME


if (l == undefined) then (l = LayerManager.newLayerFromName(LAYERNAME))

追記:もしかしたら、スペースワープとか関係あったらそいつらもまとめてレイヤーに入れてしまうかもです・・・・。

なんか他にいい方法あったりするんですかね?削除する時もなんか残りますよね?
いい方法ご存じな方、教えてください。

しかし・・・記事書いてて感じるこの「今更感」 なんでしょうね?これからスクリプト始めたい人はPythonをお勧めします。MaxのPythonどうなんでしょうね?

0 件のコメント:

コメントを投稿