【Python学習】Lv12 MEL 回転とミラー
前回の投稿から4日。
レイアウト含め、課題としていた部分の4つを何とかクリアできました。
課 題・リネームボタンが不完全(選択中のノード名をtextFieldGrpに表示したい)
・カーブの種類をもう少し精査
・ワイヤーカラー 色別にボタン化したい 解決!
・Freeze TransはフリーズしたくないのでRot,Scaleのみに適用したい 解決!
・HIDE & LOCK 1ボタンで ロックと解除の切替方式にしてレイアウトをスッキリさせたい 解決!
・現状タブを変えるのが億劫なので、タブレイアウトではなくパネルレイアウトに変えたい解決!
上記のRigSupportのMELはいろいろな方の機能を利用させて頂いてる都合上、公に配布は考えてません。
しかし、デバッグやるよ! スマートな書き方教えるよ!という方がいらっしゃいましたらTwitterでDM下さいmm
まだやりたい事をクリアできていない箇所があるのでアドバイス頂けると嬉しいです^^
その代わり自力クリア部分のコードのみ幾つか切り分けて紹介していこうと思います。
(その分、書き方が未熟だと思いますが、、、初心者なのでご容赦を~)
RotMirror
・シェイプノードの回転、ミラーリング、フリーズ(回転、スケール/全て)をやるツールセットです。
自分の探し方が足りなかっただけかも知れませんが、こういう類のツールが見当たらなかったんですよね。
中身です。
/////////////////////////////////インターフェース
global proc tk_RotMirror()
{
if(`window -ex tk_RotMirror`) deleteUI tk_RotMirror ;
window -title "RotMirror" -s 1 -mnb 0 -mxb 0 tk_RotMirror ;
columnLayout -adj 1;
rowLayout -nc 6;
button -bgc 0.9 0.4 0.4 -h 20 -w 28 -l "R+X" -c "RotMirror RotPlusX";
button -bgc 0.9 0.4 0.4 -h 20 -w 28 -l "R-X" -c "RotMirror RotMinusX";
button -bgc 0.4 0.9 0.4 -h 20 -w 28 -l "R+Y" -c "RotMirror RotPlusY";
button -bgc 0.4 0.9 0.4 -h 20 -w 28 -l "R-Y" -c "RotMirror RotMinusY";
button -bgc 0.4 0.4 0.9 -h 20 -w 28 -l "R+Z" -c "RotMirror RotPlusZ";
button -bgc 0.4 0.4 0.9 -h 20 -w 28 -l "R-Z" -c "RotMirror RotMinusZ";
setParent ..;
rowLayout -nc 3;
button -bgc 0.9 0.4 0.4 -h 20 -w 58 -l "Mirror X" -c "RotMirror MrrX";
button -bgc 0.4 0.9 0.4 -h 20 -w 58 -l "Mirror Y" -c "RotMirror MrrY";
button -bgc 0.4 0.4 0.9 -h 20 -w 58 -l "Mirror Z" -c "RotMirror MrrZ";
setParent ..;
rowLayout -nc 2 ;
button -bgc 0.4 0.9 0.9 -h 20 -w 118 -l "Freeze RS" -c "FreezeRS";
button -bgc 0.2 0.8 0.9 -h 20 -w 58 -l "FreezeALL" -c FreezeTransformations;
setParent ..;
setParent..;
showWindow tk_RotMirror;
}
/////////////////////////////////////////////////回転とミラー
global proc RotMirror(string $TYPE)
{
string $selObj[] = `ls -sl -type "transform"`;
switch ($TYPE)
{
case "RotPlusX":
rotate -r -os 45 0 0;
break ;
case "RotMinusX":
rotate -r -os -45 0 0;
break ;
case "RotPlusY":
rotate -r -os 0 45 0;
break ;
case "RotMinusY":
rotate -r -os 0 -45 0;
break ;
case "RotPlusZ":
rotate -r -os 0 0 45;
break ;
case "RotMinusZ":
rotate -r -os 0 0 -45;
break ;
case "MrrX":
xform -os -r -s -1 1 1;
break ;
case "MrrY":
xform -os -r -s 1 -1 1;
break ;
case "MrrZ":
xform -os -r -s 1 1 -1;
break ;
}
}
/////////////////////////////////回転・スケールのフリーズ
global proc FreezeRS()
{
string $selObj[] = `ls -sl -type "transform"`; // 選択ノード配列取得
if( size($selObj)==0){
confirmDialog -m "なにか選択してください";
}
else{
channelBoxCommand -freezeRotate;
channelBoxCommand -freezeScale;
}
}
うわー、、、コードを晒すのは何だか恥ずかしいですね。
未熟さ満開かと思いますが、たぶん動くはず。
Switch式で書いてみてます。
45度回転ではなく90度回転にしたい場合は
rotate -r -os 45 0 0;
の"45"のところを"90"に変えれば良いだけです。
もっとスッキリした書き方があれば教えて下さい!!
参考になったサイト紹介 パート2
前回に引き続き今回もMEL作成にあたって凄く参考にさせて頂いたサイトのご紹介。
MEL Tips
以前も紹介した気がしますが、じっくり読んでみると情報量がとても多く今後も活用できそうです。
まとめ
以上。【Python学習】MEL 回転とミラーでした。
自分はまだまだ初心者です。
Pythonの本を読んだのは今年の1月でスクリプトを書き始めたのは4月に入ってから。
なのでスクリプト歴4か月少々のペーペーですが、何とかイメージしていたツールを作る事は出来てます。
学生の頃は美術は得意でしたが理数系は大の苦手でした。
自分にはムリだなと思わず、まずはやってみて下さいー!
これからMEL始めようかなという方の助けになれば幸いです。
一通り組みたいMELを組み終えたら、まだ読んでいないもう1冊の本を読み始めようかなと思います。
次回
次回も引き続きMELのご紹介 次は『LOCK&HIDE』の1ボタン切替について書きます。