制御構造(ループ)

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, 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 | Next
Home | Contents
abe@injapan.net