変数

MELにおける変数

MELの変数はC言語の変数に似たところがある。
しかし、全てにおいてが同じわけではないので注意が必要である。

MELの変数には以下の特徴がある。

変数の例

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

  1. mel ディレクトリへ移動しておく。
    % cd mel
    % pwd
    /amt/home0/ad020000/mel
    
  2. make3Sphere1.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;
    } 
  3. Script Editor の File → Source Script によって make3Sphere.mel を読み込む。
  4. Script Editor に make3Sphere1(3) と打ち込んで実行する。
    または make3Sphere1 3 と打ち込んで実行しても良い。
  5. 下図のような半径3、2、1の3個の球が作られる。
    [make3Sphere1(3)の実行結果]
  6. さらに make3Sphere1(4)make3Sphere1(5) などと実行してどのような結果になるか試してみよう。
    (実行前にシーンの中のオブジェクトを消去または移動してから実行しないとオブジェクトが重なって見にくいかもしれない)

スクリプトの解説

global proc make3Sphere(int $r)
intの引数($r)を1個とるプロシージャー。
$r は最初の球の半径になる。
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
Home | Contents
abe@injapan.net