« 男キューブ。 | トップページ | さよならロトスコープ。 »

2013年2月18日 (月)

命名カメラリグ。

カメラの名前に合わせてカメラリグ(カメラルート、インタレスト)の名前をリネームするスクリプトなんですがね。


JScript
---------------------------------------------------------------------
//    命名カメラリグ


//    ここを好みに差し替える
PrefixRoot = "";
PostfixRoot = "_CamRoot";
PrefixInt = "";
PostfixInt = "_Int";


//    リネームしたオブジェクトを格納する箱
var oResults = XSIFactory.CreateObject( "XSI.Collection" );
oResults.Unique = true;

for ( var i=0; i<Selection.count; i++ )
{

    // 選択していたものがカメラじゃなきゃ警告  カメラなら処理
    if ( Selection(i).type != "camera" ) Logmessage( Selection(i).Name + " --> それはカメラじゃないくさい", siError );
    else
    {
        var oCam = Selection(i);

       
        //    CamRoot 見つけるって親の Type を調べるくらいしか方法ないんじゃない?
        var oParent = oCam.Parent;
        if ( oParent.type == "CameraRoot" )
        {
            oParent.Name = PrefixRoot + oCam.Name + PostfixRoot;
            oResults.Add( oParent );
        }
        else Logmessage( oCam.Name + " --> CameraRoot 見つかんないくさい", siWarning );

       
        //    Interest の方は Interest プロパティの戻り値が null かどうかで判断できそう
        var oInt = oCam.Interest;
        if ( oInt )
        {
            oInt.Name = PrefixInt + oCam.Name + PostfixInt;
            oResults.Add( oInt );
        }
        else Logmessage( oCam.Name + " --> Interest が無いくさい", siWarning );
    }
}


//    結果を選択  なんもなければ警告
if ( oResults.count != 0 ) SelectObj( oResults );
else Logmessage( "何も仕事してないくさい", siError );

---------------------------------------------------------------------

このスクリプトファイルのダウンロード MeiMeiCameraRig.js




カメラを選んで実行すると、インタレストやルートの名前がリネームされ、リネームされた子たちは選択状態になります。 

名前の法則はスクリプト冒頭を好みに合わせて書き換えるというものです。 Prefix + もとのカメラの名前 + Postfix という、3つを連結した名前になります。 無文字のままにすると無文字が連結されます(つまり何も足されない)。 ルートとインタレスト別々に指定します。


以上。





スクリプティング的にちと疑問なんですが、 カメラオブジェクトからカメラルートにたどり着くことはできるんでしょうかね? 

上のスクリプトの場合、カメラの Parent を取得し、その Type が "CameraRoot" かどうかで判断しています。 しかし、カメラの親子をカメラルートから切り離してしまった場合、もはや手がかりがないと思うんです。 親子が切り離されてシーンの全然違うところに居るルートと、もとのカメラをリンクさせる情報が、見つからない。 知っている方教えて下さい。



また、親子が生きている間は、ルート側からカメラをたどることができるように見えます。 カメラルートに対し Camera プロパティを使ってやると、カメラオブジェクトが返って来るからです。

  Logmessage( CamerRoot.Camera );

などと書けばOK。

しかし、これも親子が切り離されてしまうと効かなくなってしまいます。ルートとカメラの親子間に別オブジェクトが挟まってもダメです。カメラがルートの直近の子供の時しか効きません。

ってことで、ルートとカメラの関係を、親子に関係なくリンク付けられる方法を知っている方がいらっしゃいましたら、どうぞその方法をご教示くださいませ。





.

|

« 男キューブ。 | トップページ | さよならロトスコープ。 »

コメント

コメントを書く



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




トラックバック

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

この記事へのトラックバック一覧です: 命名カメラリグ。:

« 男キューブ。 | トップページ | さよならロトスコープ。 »