2010年11月10日水曜日

[MEL] SI方式の表示/非表示切り替え

ひさしぶりの更新。
 
最近ちょっとSoftimage触っていて、Hideの仕様がいいなと思ったのでMELで作ってみた。
仕様の違いはこんな感じ。

 
【Maya】

 オブジェクトを選択後、Ctrl+hで非表示。選択状態は解除される。
 HyperGraph等で再選択後、Shift+hで再表示。選択状態は維持
 特に非表示にした後、再表示するのに手間が掛かる印象。

 
【Softimage】
 表示中のオブジェクトを選択後、hで非表示。選択状態は維持
 非表示のオブジェクトを選択後、hで再表示。選択状態は維持
 選択状態が維持されるので、hを押す度に表示/非表示を切り替えられる。
 
で、作ってみたのが以下のMEL。
"h"のホットキーに登録して使う。





global proc hideSIstyle()
{
    string $hideObj[] = `ls -sl`;
    int $i = `getAttr ($hideObj[0]+".visibility")`;

    switch($i)
    {
        case 0:
        showHidden;
        break;

        case 1:
        hide;
        select -r $hideObj;

        default:
        break;
    }
}







複数選択の場合、最初に選んだモデルの表示状態に揃う。
便利かどうかは、好みの問題かもしれない。



2013/7/31
本当のSIのhideはトグルですよ、との指摘を頂いたので
一応それも作ってみた。
ただ、どうしても個別に表示を切り替える必要があるため
大量にオブジェクトを選択していると動作が重くなる…。






global proc hideSIstyle()

{
    int $tgl;
   
int $vis;
   
string $hideObj[] = `ls -sl`;
   
for ($Object in $hideObj)
    {
       
$vis = `getAttr ($Object+".visibility")`;
       
$tgl = abs($vis - 1);
        setAttr ($Object+".visibility") $tgl;
    }
    select -r $hideObj;
}