変数
変数とは何か
MEL スクリプトにおいて、
計算結果の数値や文字列などを覚えさせておくためには、変数を使います。
たとえば、ある同じ数値を、
スクリプト中の複数の箇所で使いたい場合には、変数に数値を覚えさせておいて、数値の代わりに使うと便利です。
変数に、 数値や文字列を入れるには代入という操作をおこないます。
また、変数には名前がついています。
規則にしたがう限り好きな名前で、いくつでも変数を定義することができます。
MEL の変数を使うときには、以下の事項を注意してください。
以下に、C 言語の知識がある人のために、C 言語と比べたときの文法上の違いをあげておきます。
- int、float は C 言語と同じです。
- double、char、short などはありません。
- string、vector、matrix という独自の型があります。
- 配列は C 言語と違い、宣言時に個数の指定はしなくてもかまいません。
- 構造体はありません。
- ポインターもありません。
- #include, #define などはありません。
変数の例
半径を 1 づつ小さくしながら、
3 個の球体を接しながら並べる MEL スクリプトを、プロシージャと変数を使って作ってみましょう。
プロシージャの引数(int $r)に 1 個目の球体の半径を与えて実行すると、
2 番目以降の球体は半径が 1 づつ小さくなって作られてゆくようにします。
- 以下の内容で、make3Sphere1.mel というファイル名の MEL スクリプトを、
テキストエディタ(gvim)によって作成します。
global proc make3Sphere1(int $r)
{
int $m;
sphere;
scale $r $r $r;
sphere;
$r -= 1;
scale $r $r $r;
$m = 2 * $r + 1;
move $m 0 0;
sphere;
$r -= 1;
scale $r $r $r;
$m += 2 * $r + 1;
move $m 0 0;
}
- スクリプト エディタ の によって make3Sphere1.mel を読み込みます。
- スクリプト エディタ のインプットウインドウに make3Sphere1(3) と打ち込んで実行します。
- 下図のような半径 3、2、1 の 3 個の球体が作られます。
- さらに make3Sphere1(4) や make3Sphere1(5) などを実行してどのような結果になるか試してみましょう。
(注意)
実行前に、
シーンの中のオブジェクトを消去または移動してから実行しないと、
オブジェクトが重なって見にくいかもしれません。
スクリプトの解説
global proc make3Sphere(int $r)
- int の引数($r)を 1 個とるプロシージャの宣言です。
$r は最初の球体の半径になります。
プロシージャに引数をつけることによって、
プロシージャの中の数値をいちいち書き換えなくても、
球体の半径を変更して実行することができるようになります。
このプロシージャでは $r の値が 3 未満だと、
マイナスの半径の球体ができてしまうことに注意して下さい。
int $m;
- 球体を移動するための値を入れておく変数。
sphere;
- 1 個目の球体を作ります。
scale $r $r $r;
- 1 個目の球体の半径は $r なので球体を $r だけスケールします。
sphere;
- 2 個目の球体を作ります。
$r -= 1;
- 2 個目の球体の半径は 1 個目より 1 小さいので $r から 1 を引いておきます。
scale $r $r $r;
- 2 個目の球体を $r だけスケールします。
1 個目の球体よりも1だけ小さい半径になります。
$m = 2 * $r + 1;
- 2 個目の球体を移動する距離を求める計算式です。
$r は 2 行前の計算($r -= 1;)によって 1 個目の球体の時より 1 だけ小さくなっているので、
ここの時点で 1 個目の球体の半径は $r + 1 になります。
それと 2 個目の球体の半径($r)を加えれば 2 つの球体の間の距離になります。
$m = ($r + 1) + $r
この式をまとめて以下のようになります。
$m = 2 * $r + 1
move $m 0 0;
- 2 個目の球体を X 軸方向に $m だけ移動します。
sphere;
- 3 個目の球体を作ります。
$r -= 1;
- 3 個目の球体の半径は 2 個目より 1 小さいので $r から 1 引きます。
scale $r $r $r;
- 3 個目の球体を $r だけスケールします。
$m += 2 * $r + 1;
- 3 個目の球体を移動する距離を求める計算式です。
2 個目と 3 個目の球体の距離の計算方法は、1 個目と 2 個目の場合と同じになります。
この時点で、$m にはすでに 2 個目までの距離が入っているので、
それに 2 個目と 3 個目の距離を加えれば良いでしょう。
$m = $m + ($r + 1) + $r
右辺をまとめます。
$m = $m + 2 * $r + 1
+= で式を簡単にします。
$m += 2 * $r + 1
move $m 0 0;
- 3 個目の球体を X 軸方向に $m だけ移動します。
練習
- 上の make3Sphere1.mel を参考にして、5 個の球体がでる make5Sphere1.mel というMEL スクリプトを作ってみましょう。
たとえば、make5Sphere1(5) と打ち込んで実行すると、半径 5、4、3、2、1の球体が作られるようにします。
- make5Sphere1.mel を参考に make5Sphere2.mel を作り、半径が 1 づつ大きくなってゆくように書き換えてみましょう。
たとえば、make5Sphere2(2) などと実行すると最初に半径 2、3、4、5、6の球体が作られるようにします。
(ヒント)
(2 個目の球体を作成するところの変更点)
$r += 1;
2 個目の球体の半径は 1 個目より 1 大きいので $r に 1 を加算しておきます。
$m = 2 * $r - 1;
2 個目の球体を移動する距離を求める計算式です。
$r は 2 行前の計算($r += 1;)によって 1 個目の球体の時より 1 だけ大きくなっているので、
ここの時点で 1 個目の球体の半径は $r - 1 になります。
それと 2 個目の球体の半径($r)を加えれば 2 つの球体の間の距離になります。
$m = ($r - 1) + $r
この式をまとめて以下のようになります。
$m = 2 * $r - 1
3 個目の球体を作成する場合も同じように計算します。
まとめ
- 変数名の先頭には、必ず $ がつきます。
- 変数名は、英数字と _ (アンダースコア)で作られます。
- 変数には、型があります。
- 変数の計算には、各種の演算子を使用します。
- 変数には、ローカル変数と外部変数の違いがあります。
練習課題
参考
- Maya
Maya, MEL 関係(Tips, FAQ, コマンド)のページ
- ベクトル
Prev | Next
Home | Contents
Mail