« ctr_dist と this_model の和解。 | トップページ | アップベクちゃんご主人様捜索。 »

2012年1月16日 (月)

脱退グループ。

書きたてほやほや。




//////    脱退グループ

//    Group 入れる箱ヨーイ
var oGroups = XSIFactory.CreateObject( "XSI.Collection" );

//    現在選択中のブツをループ
for ( var i=0; i<Selection.count; i++ )
{
   
//選択中のブツの Owners をループして Group だったら箱にブチ込む
    var oOwners = Selection(i).Owners;
    for ( var j=0; j<oOwners.count; j++ )
    {
        if ( oOwners(j).type == siGroupType )
        {
            oGroups.Add(  oOwners(j) );
        }
    }
}

//    確認用
//Logmessage( "所属Group = " + oGroups );

//    見つかったグループを全てループし、選択中のブツを RemoveMember していく
for ( var i=0; i<oGroups.count; i++ )
{

 //    その Group に所属してないやつを含んでる状態で RemoveMember しても別に怒られないみた
    oGroups(i).RemoveMember( Selection );
}





オブジェクトを適当に選んで実行します。 するとそのオブジェクトは、所属していた全ての Group から脱退します。 つまりどの Group にも属さないオブジェクトになるということです。


もともと複製して作ったオブジェクトなどは特に、シーンを整理して行くうちに、ああめんどくせえ、何がどれだかわかんなくなった、いったん全部の Group から脱退してやるぜ、ということがあるんですが、所属している Group を調べるのもめんどくさいし、いちいち右クリックで Remove from Group とかやってらんねえ、とういのもあり、思い立って書いてみました。




そんだけっす。



スクリプティング的には、Group の取得に Owners からたどっていますよというだけで、まあ、特筆すべきことはないかもしれない。

選択したものを全部ループして1つずつグループを脱退させて行くのではなく、選択したものが所属しているグループを先に全部集めてしまい、集まったグループをループして、選択中のオブジェクトがそのグループに所属していようがいまいがともかく全員脱退しろと言っているという、そういう順番の処理になってますね。 こっちの方が処理が速い気がしてやっているのですが、あんまり根拠はありません。


選択中のブツの種類を判定する処理とか何もしてないので、変なもの選んで実行するとエラーで止まったりとかすると思います。






ではごきげんよう。

|

« ctr_dist と this_model の和解。 | トップページ | アップベクちゃんご主人様捜索。 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/217974/53751286

この記事へのトラックバック一覧です: 脱退グループ。:

« ctr_dist と this_model の和解。 | トップページ | アップベクちゃんご主人様捜索。 »