制御構造(ループ)

MELにおける繰り返しの実行

MELにおいて同じコマンドを繰り返して実行するときには、C言語と同じように for, while, do while などを使用する。

ループの使用例

球を原点(0, 0, 0)を中心に半径 $rad の円上に $num 個並べるMELスクリプトを for を使って作ってみよう。

  1. 以下のMELスクリプトを circleSphere1.mel という名前で作る。
    global proc circleSphere1(float $rad, int $num)
    {
    	int $i;
    	float $r = 0.0;
    	float $add = 360.0 / $num;
    
    	for($i = 0; $i < $num; $i++)
    	{
    		sphere;
    		move $rad 0 0;
    		rotate -ws -p 0 0 0  0 $r 0;
    		$r += $add;
    	}
    }
    
  2. Script Editor の File → Source Script によって circleSphere1.mel を読み込む。
  3. Script Editor から circleSphere1(5.0, 6) と打ち込んで実行する。
  4. 半径1の球が半径 5 の円上に 6 個作られる。
    [circleSphere1(5, 6)の実行結果]

スクリプトの解説

global proc circleSphere1(float $rad, int $num)
float の引数($rad)と int の引数($num)をとるプロシージャー。
int $i;
for 文のカウンタとして使うための変数。
float $r = 0.0;
球を回転させるための角度を入れておく変数。
最初は回転させないので 0.0 を代入しておく。
float $add = 360.0 / $num;
角度の増分を入れておくための変数。
360度(円の1周の角度)を球の個数($num)で除算している。
for($i = 0; $i < $num; $i++)
$numfor ループを実行する。
以下は for ループ内の処理。
sphere;
NURBS の球を作る。
move $rad 0 0;
球を($rad, 0, 0)の位置に移動。
rotate -ws -p 0 0 0 0 $r 0;
移動された球をワールドスペース内で(0, 0, 0)を中心として Y 軸周りに $r だけ回転。
各フラグの意味は以下の通り。
-ws
ワールドスペースで回転させる。
-p 0 0 0
回転の中心は(0, 0, 0)
0 $r 0
X軸周りに 0 度、Y 軸周りに $r 度、Z 軸周りに 0 度回転させる。
$r += $add;
次の回転角度を求める。

練習

まとめ

参考


Prev
Home | Contents
Mail