キーフレームアニメーション

課題

mel フォルダに circleAnimation4.mel という名前の MEL スクリプト作り、 スクリプトエディターで読み込んで実行すると、 以下のようなウインドウが表示されるようにしてください。
作成 ボタンを押すと、プリミティブがらせん状にアニメーションするようにしてください。
プリミティブの種類はラジオボタンによって、 円の半径はスライダーの値で決められるようにしておいてください。
なお、ウインドウのタイトルには自分の学籍番号(ad090xxx)をつけておいてください。

各スライダーの設定

フレーム数
作成されるアニメーションのフレーム数
intSliderGrp を使用します。
最小値(-min)
1
最大値(-max)
300
ステップ値(-step)
1
初期値(-value)
1
半径
プリミティブがアニメーションを行う円の半径
floatSliderGrp を使用します。
最小値(-min)
0.0
最大値(-max)
20.0
ステップ値(-step)
0.1
初期値(-value)
1.0
回転Y
プリミティブが 1 フレームで回転する Y 方向の角度
(練習問題の $ir)
floatSliderGrp を使用します。
最小値(-min)
0.0
最大値(-max)
20.0
ステップ値(-step)
0.1
初期値(-value)
1.0
移動Y増減値
プリミティブが 1 フレームで移動する Y 方向の移動値
(練習問題の $iy)
floatSliderGrp を使用します。
最小値(-min)
-1.0
最大値(-max)
1.0
ステップ値(-step)
0.1
初期値(-value)
0.1
スケール X、スケール Y、スケール Z
floatSliderGrp を使用してください。
最小値(-min)
0.0
最大値(-max)
10.0
ステップ値(-step)
0.1
初期値(-value)
1.0

実行結果

circleAnimation4.melの実行結果(Tab1)
circleAnimation4.melの実行結果(Tab2)
circleAnimation4.melの実行結果(Tab3)
ウインドウを大きくしたときの図
circleAnimation4.melの実行結果(Tab3)
ウインドウを大きくしたときに、作成ボタンと閉じるボタンの間が開いたり、 重なったりしないようにしてください。
スライダーの値は、 スケール X が1.5、スケール Y が2.0、スケール Zが2.5、 フレーム数が 300、半径が 8.0、 回転Y が 2.0、移動Y増減値が 0.05 です。 です。
スケール X と スケール Y のチェックボックスにチェックが入っています
球のラジオボタンが押されている場合に作成ボタンを押した時の実行結果です。
circleAnimation4.mel (Tab1)
circleAnimation4.mel (Tab2)
circleAnimation4.mel (Tab3)
circleAnimation4.melの作成ボタンを押した結果
スケール Y と スケール Z のチェックボックスにチェックが入っています
立方体のラジオボタンが押されている場合に作成ボタンを押した時の実行結果です。
circleAnimation4.mel (Tab1)
circleAnimation4.mel (Tab2)
circleAnimation4.mel (Tab3)
circleAnimation4.melの作成ボタンを押した結果
スケール X と スケール Z のチェックボックスにチェックが入っています
コーンのラジオボタンが押されている場合に作成ボタンを押した時の実行結果です。
circleAnimation4.mel (Tab1)
circleAnimation4.mel (Tab2)
circleAnimation4.mel (Tab3)
circleAnimation4.melの作成ボタンを押した結果

ヒント

  1. circleAnimation3.mel を circleAnimation4.mel にコピーします。
  2. プロシージャ名 circleAnimation3 を circleAnimation4 に変更します。
  3. layout8.mel の window コマンドの行から、showWindow コマンドの行までを プロシージャ circleAnimation4 の下にコピーします。
  4. 作成ボタンで実行しているプロシージャ名を circleAnimation4 に変更します。
  5. tabLayout の各タブにおける columnLayout から setParent までの間を変更します。
    (スライダの数・ラベルや種類など)
  6. tabLayout のタブのラベルを変更します。
    (-tabLabel の右側)
  7. "フレーム数・半径" のタブにあるスライダーの値を変数に代入します。
    (プロシージャ circleAnimation4 の変数宣言をしている行の下)
  8. "スケール" のタブにあるチェックボックスがチェックされているかどうか調べて、 チェックされている場合はスライダの値を変数に代入します。
  9. "種類" のタブにあるラジオボタンのどれがが押されているかをチェックします。
    押されているラジオボタンに対応するプリミティブを作成します。 そのときに、作成したプリミティブを名前を string の配列 $name に代入しておきます。
  10. その下の行で、scale コマンドを実行します。
  11. プロシージャ内の変更する部分は以下のようになります。
    global proc circleAnimation4()
    {
    	int $i;
    	float $y = 0.0;
    	float $r = 0.0;
    	string $name[];
    	// 必要な変数宣言を追加
    
    	// "フレーム数・半径" のタブにあるスライダーの値を変数に代入
    
    	// "スケール" のタブにあるチェックボックスがチェックされているかどうか調べて、
    	// チェックされている場合はスライダの値を変数に代入
    
    	// "種類" のタブにあるラジオボタンのどれがが押されているかをチェック
    	// 作成したプリミティブを名前を string の配列 $name に代入
    
    	// scale コマンドを実行
    
    	setAttr ($name[0] + ".tx") $rad;
    	setAttr ($name[0] + ".rotatePivotX") (-$rad);
    	for($i = 0; $i < $frame;  $i++)
    	{
    		currentTime $i;
    		setAttr ($name[0] + ".ry") $r;
    		setAttr ($name[0] + ".ty") $y;
    		setKeyframe -at "ty" -at "ry" $name[0];
    		$r += $ir;
    		$y += $iy;
    	}
    }