サーフェイス・コンストレインのもう一つの方法は、エクスプレッションを使う方法だ。
といっても非常に簡単だ。
XformをQuery形式で使うこと。
ワールド空間でのトランスレートの情報を得ること。
バーテックスIDを指定すること。
Xformによって得た情報をコンストレインしたいオブジェクトの位置情報に入力する。
という流れになる。
まず「Xform」だがヘルプには以下のように書いてある。
「このコマンドは、変換ノードにおける、あらゆる要素の照会/設定に使用できます。」 (Maya Help)
ようするに対象となるオブジェクトの移動、回転などを行うときに使うことができるコマンドだが、
-Queryを使うことによって対象オブジェクトの位置情報や回転情報を紹介することもできる。
今回は位置情報だけを知りたいので-t(translate)フラグを使う。
そして、その値はワールド空間での座標値であって欲しいので、-ws(World space)フラグも使用する。
また、今回、対象となるオブジェクトノードの位置ではなく、そのコンポーネントである特定のバーテックスの位置を知りたいので、それを指定してやる必要がある。
例では、スフィアの278番のバーテックスなので、pSphere1.vtx[278] となっている。
ここまでをまとめると以下のようなコマンドになる。
xform -q -t -ws pSphere1.vtx[278]
これをスクリプトエディターで実行すると返値としてバーテックスの位置情報がxyzの順番にFloat値で表示される。
これはxformによって出力されるのが、x y zの順番ということでもあるのだろう。
この値を後で使用するためにはまず、変数へこの値を入れておく必要がある。
3つの値が出力されるので、通常のfloat変数ではなく、配列を使う必要がある。
float $where[] = `xform -q -t -ws pSphere1.vtx[278]`;
これで
$where[0],$where[1],$where[2]の三つへ自動的にx、y、zの値が代入される。
そして次のステップではその値をくっつけたいロケーターのトランスレート値へ入れてやればよい。
locator1.tx = $where[0];
locator1.ty = $where[1];
locator1.tz = $where[2];
これでロケーターがそのバーテックスにくっつくことになる。
そして回転に関しては、ノーマルコンストレインを使うことで処理する。
0 件のコメント:
コメントを投稿