変数

変数とは何か

MEL のスクリプトにおいて計算結果の数値や文字列などを覚えさせておいて、 後で使いたいときには変数というものを使います。
例えば、ある同じ数値をスクリプト中の複数の箇所で使いたい場合には、変数に数値を覚えさせておいて、数値の代わりに使うと便利です。
変数には代入という操作で数値や文字列を入れておくことができます。
変数には名前がついていて、規則にしたがう限り好きな名前でいくつでも変数を定義することができます。

MEL の変数を使うときには以下の事項を注意してください。

以下に C 言語の知識がある人のために C 言語との違いをあげておきます。

変数の例

半径を 1 づつ小さくしながら 3 個の球を接しながら並べる MEL スクリプトをプロシージャーと変数を使って作ってみましょう。
プロシージャーの引数(int $r)に 1 個目の球の半径を与えて実行すると、2 番目以降の球は半径が 1 づつ小さくなって作られてゆくようにします。

  1. make3Sphere1.mel というファイル名の MEL スクリプトを以下の内容でエディタ(vi)によって作ります。
    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;
    }
    
  2. Script Editor の File → Source Script によって make3Sphere.mel を読み込みます。
  3. Script Editor のインプットウインドウに make3Sphere1(3) と打ち込んで実行します。
  4. 下図のような半径 3、2、1 の 3 個の球が作られます。
    [make3Sphere1(3)の実行結果]
  5. さらに 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
[隣り合う2つの球]
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
[隣り合う3つの球]
move $m 0 0;
3 個目の球を X 軸方向に $m だけ移動します。

練習

まとめ

練習課題

参考


Prev | Next
Home | Contents
Mail