2013/04/19

にわかスクリプト~動いてる奴だけ選択

はいさい。引き続き選択系。
選んでるオブジェクトの階層下で、アニメーションついてるヤツだけ選択的なアレ。

すっごい無理矢理な感じが否めないけど一応動いてるから許してください。
このやり方だと一回パラメータ全部かき集めちゃうから、if文使ってアニメーションしてるパラメータがあったら
そのオブジェクトを取得的な感じにした方がいい気がするが。。
もう心が折れてるので修正はあとにしような(´・ω・`)
var oRoot = ActiveSceneroot;
var oCollParam = XSIFactory.CreateObject( "XSI.Collection" );
var oCollObj = XSIFactory.CreateObject( "XSI.Collection" );

for( var i=0; i<Selection.count; i++ )
{
 var oSel = oRoot.FindChildren(Selection(i));
  for( var j=0; j<oSel.count; j++ )
 {
  var oChild = oSel(j).FindChildren();
  var oAnimPram = oSel(j).AnimatedParameters2(siFCurveSource);
  oCollParam.AddItems(oAnimPram);
 }
}

oSelectPram = SelectObj(oCollParam, null, null);

for ( var k=0; k<Selection.count; k++ )
{
 oSel = Selection(k).Parent3DObject
 oCollObj.AddItems(oSel);
}

Selectobj(oCollObj);

Twitterで@FumotoKZさんに助けていただいて何とかでけた。
本当に感謝です。自分だけじゃ何もできません(´;ω;`)ウッ…

2 件のコメント:

  1. お久しぶりです。
    Object.IsNodeAnimated(siFCurveSource) というのもあります。これを使えば後半の部分は要りません。

    そして、forループを使う時に変数を宣言(var)したほうが良いですよ。念のため。

    もう一つ、「for (j=0) 等」の部分は要らないと思います。
    oSel = oRoot.FindChildren(selection(i))
    selection(i) を使っているのでフルネームになります。
    ということで、 oSel は コレクションではなく1つのオブジェクトです。まぁ、それでも動きますけど。

    返信削除
  2. お久しぶりです!助言ありがとうございます!

    が、しかし2日ほど奮闘してみたのですが惨敗でしたorz
    というか何故これが動いているのかすら分からなくなってきました(・_・;)

    このままだとコメント返すタイミング失うので敗北宣言を。。。・゚・(ノД`)・゚・。ブワッ
    時間見つけて直してみます!!

    返信削除