MELの応用6 (スパイラル3)

コイルを作る3

今回はエクスプレッションを利用して元になるカーブを動かすと、コイルも同様に動くようにしてみよう。
これによって元カーブをアニメーションさせることによってコイルも自動的にアニメーションさせることができる。

コイルを作るスクリプト3

エクスプレッションの式が複雑なので注意すること。

  1. 以下のプロシージャをmakeSpiral7.melと言う名前でファイルに書き込む。
    global proc makeSpiral7()
    {
    	int $i;
    	float $numLoops = 10;
    	string $curv = `curve -d 3 -p 0 0 0 -p 3.0 0 -4.0 -p 7.0 0 -7.0
    			-p 13.0 0 -5.0 -p 17.0 0 -2.0 -p 19.0 0 0.0
    			-k 0 -k 0 -k 0 -k 1 -k 2 -k 3 -k 3 -k 3`;
    
    	int $numCvs = $numLoops * 4;
    	string $crv = `curve -degree 3 -p 0 0 0 -k 0 -k 0 -k 0`;
    	float $min = getAttr ( $curv + ".min" );
    	float $max = getAttr ( $curv + ".max" );
    	for( $i = 0; $i < $numCvs; $i++ )
    	{
    		curve -append -p ((float)$i) 0 0 $crv ;
    	}
    	for( $i = 0; $i <= $numCvs; $i++ )
    	{
    		float $p = (float)$i/$numCvs;
    		float $angle = $p * $numLoops * 6.28;
    		float $uoff = sin( $angle );
    		float $voff = cos( $angle );
    		if( $i == 0 || $i == $numCvs )
    		{
    			$uoff = 0;
    			$voff = 0;
    		}
    		$p = $min + ($max - $min) * $p;
    		string $poc = `pointOnCurve -constructionHistory 1 -parameter $p $curv`;
    		string $expcom = ( "$nnx = " + $poc + ".nnx;\n"
    			+ "$nny = " + $poc + ".nny;\n"
    			+ "$nnz = " + $poc + ".nnz;\n"
    			+ "vector $nv = << $nnx, $nny, $nnz >>;\n"
    			+ "$ntx = " + $poc + ".ntx;\n"
    			+ "$nty = " + $poc + ".nty;\n"
    			+ "$ntz = " + $poc + ".ntz;\n"
    			+ "vector $tv = << $ntx, $nty, $ntz >>;\n"
    			+ "vector $npv = `cross $nv $tv`;\n"
    			+ "$px = " + $poc + ".px;\n"
    			+ "$py = " + $poc + ".py;\n"
    			+ "$pz = " + $poc + ".pz;\n"
    			+ "vector $pv = << $px, $py, $pz >>;\n"
    			+ "$vec = $pv + " + $uoff + " * $npv + " + $voff + " * $nv;\n"
    			+ $crv + ".cp[" + $i + "].xv = $vec.x;\n"
    			+ $crv + ".cp[" + $i + "].yv = $vec.y;\n"
    			+ $crv + ".cp[" + $i + "].zv = $vec.z;\n" );
    		expression -s $expcom;
    	}
    }
    
  2. File -> Source Script でmakeSpiral7.melを読み込む。
  3. Script Editor で以下のコマンドを実行してみる。
    makeSpiral7();
    [image of makeSpiral7.mel]

練習

参考


Prev
Home | Contents
abe@injapan.net