これから数回にわたって、卓上電話機のコード(コイル状)のような形を作るMELスクリプトを作ってゆく。
最終的には任意のスプラインカーブにそったコイルが作られ、エクスプレッションによってスプラインカーブを動かすとコイルの部分も、そのカーブと同じように動くようにしてみよう。
今回は手始めに直線的なコイル状の形を作るMELスクリプトを書いてみよう。
ここでは三角関数(sin, cos)を使って円上にカーブのコントロールポイントを作ってゆく方法によってスクリプトを書いてみる。
global proc makeSpiral1()
{
int $i;
int $numLoops = 10;
int $numCvs = $numLoops * 4;
string $crv = `curve -degree 3 -p 0 0 0 -k 0 -k 0 -k 0`;
for( $i = 0; $i <= $numCvs; $i++ )
{
float $x = 0.2 * $i;
float $angle = (float)$i/$numCvs * 6.28 * $numLoops;
float $y = sin($angle);
float $z = cos($angle);
if($i == 0 || $i == $numCvs)
{
$y = 0.0;
$z = 0.0;
}
curve -append -p $x $y $z $crv;
}
}
int $numLoops = 10;
ループする回数を決める変数。
int $numCvs = $numLoops * 4;
カーブのコントロールポイントの個数を決めている。
string $crv = `curve -degree 3 -p 0 0 0 -k 0 -k 0 -k 0`;
NURBSカーブを作って、その名前を$crvに代入している。
for( $i = 0; $i <= $numCvs; $i++ )
$iを0 から$numCvsまで$numCvs + 1 回分ループを実行する。
float $x = 0.2 * $i;
コントロールポイントのX座標の計算。
float $angle = (float)$i/$numCvs * 6.28 * $numLoops;
Y,Z座標を計算するために現在の角度を計算している。
float $y = sin($angle);
Y座標をsin関数によって求める。
float $z = cos($angle);
Z座標をcos関数によって求める。
if($i == 0 || $i == $numCvs)
{
$y = 0.0;
$z = 0.0;
}
$iが0または$numCvsに等しい時(最初と最後)は特別にY,Z座標は0.0にする。
curve -append -p $x $y $z $crv;
カーブ($crv)に$x、$y、$zのコントロールポイントを追加する。