日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2010年1月2日土曜日

戻り値と照会モード

エントリ「命令構文と関数構文(2): 「命令構文」」で、

「変数」=「`(命令構文)`」

と記述することで、命令構文で表記されたコマンドの「戻り値」を値として変数へ代入できることにふれた。

「戻り値」の利用を考えることで、スクリプトをよりシンプルにまとめることが出来る。
「照会モード」を使うと、さらに便利になり、いつでも好きなときに望みの値を取得できる


----------------------------------------
(1)「戻り値」(「`(命令構文)`」の使用)

「sphere」コマンドを命令構文に使った場合、
nurbsSphere1
makeNurbSphere1
という二つの文字列が戻り値となる。

この「戻り値」の値は当然ながらそのコマンドによって異なる。
ではそれをどのように推測することが出来るのか?

これはオンラインヘルプの各コマンドのページに書かれている。
たとえば上記の「sphere」コマンドのページを見ると、

戻り値」という項目に
string[] オブジェクト名とノード名
と書かれている。

これは上記のsphereコマンドの二つの文字列の事でありそれぞれ以下のようになる。
オブジェクト名: nurbsSphere1
ノード名: makeNurbSphere1

そしてこの型が、string[]となっているように、string行列であるということがわかる。
これは変数の宣言で、intでは当然エラーになるし、stringだけでも行列ではないのでエラーになることを示している。


では、他のコマンドの「戻り値」の部分がどうなっているかざっと見てみた。
polyDelEdge: string ノード名

camera: string[] (トランスフォーム名とシェイプ名)

directionalLight: string ライト シェイプの名前

getAttr: Any アトリビュートの値、または状態です。返される値の数とタイプは、アトリビュート タイプによって異なります。

emit: int[] position フラグを渡したのと同じ順序で作成したパーティクルの particleId アトリビュート値のリストを含む整数配列。

sort: any[] エレメントの型と個数が元の引数と同じ配列。


これらを見くらべると「戻り値」は「名前」だけでなく、コマンドの種類によっていろいろな値をとることがわかる。


----------------------------------------
(2)照会モード(-queryフラグの使用)

それぞれの「戻り値」の項目を見ていると
戻り値の型は照会モードでは照会フラグが基になります。
という表記がされているものがいくつかある。

これは
「`(命令構文:照会モード)`」で表記したときのことを示している。

照会モードとは「-query」フラグを使って「コマンド」を値の照会のみに用いる方法である。


照会モードを使うには、以下のようなことに注意すべきである。

1)そのコマンドを実行しても通常の結果は得られない。
(例:sphereコマンドを実行しても、Nurbsスフィアは作成されない。)


2)事前に対象のオブジェクトが存在している必要がある。
(例:照会モードでsphereコマンドが実行される前に、Nurbsスフィアが存在している必要がある。)
このことは新しいシーンで、以下のコマンドを実行するとわかる。
sphere -query -radius ;
// Error: No object was specified to query //


3)照会したいプロパティーのフラグを指定する必要がある。
sphere;
でNurbsスフィアを作成後選択された状態で以下の照会コマンドを実行。
sphere -query -radius ;

結果として指定したフラグ「-radius」の結果を返してくる。
// Result: 1 //


4)対象のオブジェクトが複数存在する場合は、オブジェクトを指定する。
以下のどちらかで指定することがでできる。
●対象オブジェクトを選択した状態にする。
●対象オブジェクトの名前を照会コマンドの最後尾に入れる。

Nurbsスフィアが一つ存在している状態で、
以下のコマンドを実行し、全オブジェクトの選択を解除しておく。
sphere -radius 2;

その状態で
sphere -query -radius nurbsSphere2;

を実行すると以下のようにオブジェクト「nurbsSphere2」のradius値が戻ってくる。
// Result: 2 //



----------------------------------------
まとめ
----------------------------------------
自分なりにそれぞれの利点をまとめてみた。

「戻り値」を「`(命令構文)`」から得る方法では、スクリプトをシンプルにすることができる。
しかし、コマンドを実行するときに値を取得できるように注意する必要がある。


「照会モード(-query)」を使う事で、時系列に従った処理に注意を払わなくても、いつでも好きなときに値を取得できるようになる。
(値が必要なときに対象オブジェクトを指定して希望の値を取得することが出来る。)
すでに値を取得すべき対象が存在しているシーンを処理するときにも便利が良い。


照会モードは、時系列に沿っていなくても良いということに着目するなら、ノンリニア編集のようで、利点もそれに似ているのではないかと思う。
参照:リニア編集とノンリニア編集

いわばこれにより自由度がグッと広がると言うことだ。
  

0 件のコメント:

コメントを投稿