超 Isolateレイヤ。
また小物スクリプトを書き逃げしますよ。
Sel = Selection.GetAsText(); //選択中のブツを保存
var oLayers = XSIFactory.CreateObject( "XSI.Collection" ); //Layer入れる箱用意
oLayers.Unique = true; // 選択中のブツを全部ループしてレイヤをたどるが、同じレイヤに属している複数のブツから取得した場合にダブってしまうのを回避
for ( var i=0; i<Selection.count; i++ )
{
if ( Selection(i).IsClassOf( siX3DObjectID ) )
{
var oOwners = Selection(i).Owners;
for ( var j=0; j<oOwners.count; j++ )
{
//オーナーの中からレイヤを探して取得
if ( oOwners(j).IsClassOf( siLayerID ) )
{
oLayers.Add( oOwners(j) );
break;
}
}
}
}
Logmessage( oLayers );
Selection.SetAsText( oLayers ); // レイヤを選択状態にする(Isolateは選択に依存するため)
IsolateSelected( null, 0); //全部のビューで Isolate する
IsolateSelected( null, 1);
IsolateSelected( null, 2);
IsolateSelected( null, 3);
Selection.SetAsText( Sel ); //もともと選択していたものを選択し直しておしまい。
今の作業的に結構便利なんですこれが。
それなりに複雑なシーンで、不本意ながらレイヤを使った整理に大いに頼っているんですがね。 シーンの中の、前側とか右側とか上側とか、そういう空間的なエリアごとにレイヤに分けている。 あるエリアのみ表示したい。そのエリアのみ表示して作業したいということが多いのです。
なので該当するレイヤを選んで Isolate すればいいだけなんですが、レイヤをいちいち選ぶのはめんどくさいわけですよ。
なので、レイヤそのものを選択するのではなく、現在選択しているオブジェクトが所属するレイヤを勝手に探してそれを Isolate するというスクリプトにしてみたら、アラなかなか便利ですわよ奥さん。 Explorer もしくは Scene Layer Manager からレイヤを選ぶ必要がない。オブジェクト(複数可)を選ぶだけでよいわけです。
超 Isolate パーティションもそのうち書こうかな。
ごきげんよう。
.
| 固定リンク
コメント