« XPOP普及委員会(その2) | トップページ | 突発性モデリングやりてぇ症候群。 »

2008年1月11日 (金)

XPOP普及委員会(その3)

どうでしょう。少しは普及したでしょうか。普及してませんか。そうですか。



●1行スクリプトではなく、もう少し複雑なことをさせる方法

これまでのポップアップのスクリプトを見てみると、

        switch(iCmd)
        {
            case 1: ToggleVisibility(null, null, null);
                break;
            case 2: ToggleVisibility("*", null, null);
                break;

            }

という風になってます。 つまり、ポップアップを選んだ後の実際の処理は、

    ToggleVisibility(null, null, null);

とか、

    ToggleVisibility("*", null, null);

みたいな、1行で書ける超シンプルなものばかり。もっと複雑なこと、たとえば、うーむ、パッと良い例が思いつかないが、うーむ、じゃあ、「選択中のオブジェクトを新規グループにぶち込んで View Visibility と Render Visibility をオフにしてグループに名前も付けてロックした状態のPPGを表示する」、なんてことをやりたかったとしたらどうればいいか。「Null を500個くれ」なんて場合はどーするのか。

こういう場合は case の後に実行するコードをすぐ書くのではなく、function を用意してそちらを呼び出すことにしましょう。

新しいポップアップを作るのはめんどくさいのでこのまま HideProPopup を改造します。最後の  function HideProPopup_Execute( )  以下を、このように書き換えてみましょう。

function HideProPopup_Execute( )
{
      var iCmd = DisplayPop("Make Hidden Group;---;Give me 500 nulls",'HidePro Popup'  ,  'blu');

      switch(iCmd)
      {
      case 1: MakeGroupAndHide();
            break;
      case 2: Make500nulls();
            break;
      }

      return true;
}

function MakeGroupAndHide()
{
    var oGroup = CreateGroup('HiddenGroup', Selection, null);
    SetValue(oGroup + '.viewvis', 0, null);
    SetValue(oGroup + '.rendvis', 0, null);
    InspectObj(oGroup,null,null,siLock);
}

function Make500nulls()
{
    for (i=1; i<=500; i++)
    {
        ActiveSceneRoot.AddNull('Null_' + i);
    }
}


実際に実行してみてください。ちゃんとグループできましたか。 Null 500個できましたか。
しくみは別に難しくありません。

case 1 の後に続くのは、

 MakeGroupAndHide();

になっています。これは、 MakeGroupAndHide  という名前のサブルーチン(ファンクション。=関数)を実行しなさいという意味です。で、後半に

function MakeGroupAndHide()
{
    うんちゃらかんちゃら
}


というのが出てきますね。これがファンクションであり、うんちゃらかんちゃらの部分に書かれたことを実行します。この場合は、うんちゃらかんちゃらに先ほどの「選択中のオブジェクトを新規グループにぶち込んで View Visibility と Render Visibility をオフにしてグループに名前も付けてロックした状態のPPGを表示する」というスクリプトを書いているわけです。もうひとつの項目 case2 もまったく同じです。 case 2 は Make500nulls() という名前のファンクションが呼び出され、続く { }  で囲まれたうんちゃらかんちゃらの部分が実行され、シーンルートに Null が500個作られます。 ファンクションの名前は何でもいいです。 呼び出す側( case の後)と呼び出される側 function (~) でちゃんと対応さえしていればそれで桶です。

と、こんな感じで、「シーンルートに Null 500個くれ」みたいな、しょっちゅう使うからポップアップに入れたいけど1行では書けないような操作は、ファンクションを作って、ファンクションの中でやればいいと思います。どんな複雑なことでも、スクリプトで記述できる限りは可能です。 当然、スクリプトの知識(自分がやりたい操作を、スクリプトに翻訳して書ける力)が必要になりますが、まあそんなもん、一度その操作を手でやってみて、スクリプトエディタに残された履歴をコピペするところから始めりゃいいんです。

うーむ、まだ終わらない。
つづく。


|

« XPOP普及委員会(その2) | トップページ | 突発性モデリングやりてぇ症候群。 »

コメント

コメントを書く



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




トラックバック


この記事へのトラックバック一覧です: XPOP普及委員会(その3):

« XPOP普及委員会(その2) | トップページ | 突発性モデリングやりてぇ症候群。 »