今回は、mayaで使うリギングのサポートツールを作っていきます。
リグの形をワンクリックで作れるやつです。
実装した機能や感じたことを備忘録的にまとめました。
最後にはソースコードを全文載せてますので、何かしらの参考にして頂けると幸いです。
参考ツールの紹介

今回のツールは無料で公開されてる『rig101 Wire Controllers』を元に作ってます
たしか、こちらのリグの本にダウンロード先のURLが載ってました。
本の情報なので、URLを載せるのは止めときます。
リグコントローラーツールの特徴4選
- 直感的にリグの形が分かる
- よく使う形とそうでない形に分けた
- 選択したノードにスナップ・その数だけリグを作る
- グリッドレイアウトで簡単キレイ
- 参考ツールにあった不要な形は除いた
このツールの特徴は以上の5つです。
順番に解説していきます。
【ボタンを画像化】直感的にリグの形が分かる【選択コストの削減】

参考ツールはテキストでリグの形が書いてあります。
しかし、わざわざ文字を読んで、「あ~squareって書いてあるから四角ね~」、、、
って、英語に疎い私はそんな風に変換してられません。
リグを作るたびに、
『日本語に置き換えて→形を想像し→ボタンを押す…』
毎回この工程をやってたら、キャラのアニメーション作る前にプロジェクト終わりますよ…
なるべく判断に時間を取られないように、ツールのUIは直感的に分かる作りにしました。
これなら英語が苦手な私のような人にも、簡単に使いこなすことができます。
よく使う形とそうじゃない形をタブで分けた

リグの形も頻出なものと、そうでないものがあります。
タブを分けることで、「あの形はどこだっけ~」といった判断の時間を減らしてます。
極力、使い手が迷わないUI設計を心掛けました。
選択したノードにスナップ・その数だけリグを作る

参考ツールでは、原点にしかリグが作られない仕様でした。
ジョイントを選択し、ツールのボタンを押しても、リグが原点に作られるのは使いにくいですね…
マウスを移動させてる間にプロジェクトが終わります。
そう考えたので、選択箇所にスナップするように作りました。
加えて、選択したノードの数だけリグが作られるようにしてます。
指のリグとか作ってるときに、コピペするのが面倒だったので実装しました。
グリッドレイアウトで簡単でキレイ

//==================================== // === レイアウトの記述例 ================== string $tabs = `tabLayout -innerMarginWidth 1 -innerMarginHeight 1`; string $grid_01 = `gridLayout -numberOfColumns 6 -cellWidthHeight 50 50`; //==================================== //====================================
レイアウトには gridLayout
を使うことで、簡単でキレイなUIを実現してます。
たったの2つのフラグで見た目を調整できるので、保守管理も楽です。
(正直、columnとrowって苦手なんですよね…)
参考ツールにあった不要な形は除いた

正直、使うタイミングが不明なものが多かったので、個人的に不要と感じた形は削りました。
リグの形はシンプルなやつが好みですね。
【苦労話】アイコン作成は地味に大変

UIのアイコンは自作したのですが、これが意外に骨の折れる作業でした(笑)
トータル3時間くらいアイコン作ってましたね…
レイヤ名のリネームも、途中からやってません(笑)
今回のツールで勉強になった点
- 引数や戻り値の使い方
- switchのcaseに文字列を渡す時の記法
今回は以上の2点が勉強になりました。
引数や戻り値の使い方【基本が大事】
//==================================== //==================================== global proc main_KK_MakeController(string $mode){ //選択したノードの位置情報をとってくる float $pos[]; float $rot[]; int $i; string $node[],$ctrName; $node = `ls -sl`; //選択してるノードがあるかを判定 if(0 == size($node)){ $ctrName = `KK_MakeController($mode)`;//コントローラーを作りつつ、コントローラーの名前を取得 } else{ for($i=0;$i<size($node);$i++){ $ctrName = `KK_MakeController($mode)`; $pos = `xform -q -t -ws $node[$i]`; $rot = `xform -q -ro -ws $node[$i]`; xform -t $pos[0] $pos$pos
$ctrName;//コントローラーの名前を参照して、選択したノードの場所へスナップ rotate $rot[0] $rot
$rot
$ctrName; } //==================================== //====================================
KK_MakeController($mode)
がカーブでリグを作る関数になっており、$mode
の値によって作られるリグが変わるようになってます。
KK_MakeController(KK_CUBE)
なら、立方体のリグが作られます。
KK_MakeController($mode)
の戻り値は、作ったリグの名前を返し、その名前を元にスナップ処理をしてます。
関数をまたぐ場合、今までならグローバル変数を使ってました。
しかし、それだと記述が多くなるし、もっとスマートな方法はないかと考えたとき、プログラムの原点にたどり着きましたね。
関数の答えを取得すればいいじゃなか!って…
まぁゴリゴリのプログラマーから言わせたら、当たり前じゃんって感じですが…
戻り値ってあんまり理解してなくて、うまく使えてなかったですが、今回のように使えばコードを簡略化できるっていうのを学べました。
関数に戻り値がある場合は、型を指定する必要がある
//================================== //=== 戻り値の記述例 ==================== global proc string KK_MakeController(string $TYPE ) //==================================== //====================================
melは戻り値を返す場合、変数の型を指定しないといけないってのも勉強になりました。
Pythonならそんなことせずとも、戻り値は返せるので、その感覚でやってたら落とし穴にはまります…
この辺も知れたのは良い経験でした。
switchのcaseに文字列渡すときの書き方
//============================= //==== リグを作る関数 ============== global proc string KK_MakeController(string $TYPE ){ string $cv; switch($TYPE){ case "KK_CUBE": $cv = `curve -d 1 -p 0.5 0.5 0.5 -p 0.5 0.5 -0.5 -p -0.5 0.5 -0.5 -p -0.5 -0.5 -0.5 -p 0.5 -0.5 -0.5 -p 0.5 0.5 -0.5 -p -0.5 0.5 -0.5 -p -0.5 0.5 0.5 -p 0.5 0.5 0.5 -p 0.5 -0.5 0.5 -p 0.5 -0.5 -0.5 -p -0.5 -0.5 -0.5 -p -0.5 -0.5 0.5 -p 0.5 -0.5 0.5 -p -0.5 -0.5 0.5 -p -0.5 0.5 0.5 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -n "controller1"` ; break; //==== 省略 ================== //========================== } //============================= //====リグを作ってスナップ処理する関数 == global proc main_KK_MakeController(string $mode){ //選択したやつの位置情報をとってくる float $pos[]; float $rot[]; int $i; string $node[],$ctrName; $node = `ls -sl`; //選択してるノードがあるかを判定 if(0 == size($node)){ $ctrName = `KK_MakeController($mode)`;//コントローラーを作りつつ、コントローラーの名前を取得 //============================= //=============================
iconTextButton
の command
フラグに、switch文の分岐条件をそのまま書いてます。
iconTextButton -c "main_KK_MakeController KK_CUBE"
と書けば、 KK_CUBE
を引数と認識してくれるので、そのままメインの関数に渡してます。
こんな書き方ができるのは知らなったので、汎用性が高いテクニックだと感じました。
言われてみたら納得なんですが、意外と思いつかなかったですね…
【今後の改善】UIの見直しとPythonで書き直し
- main部分のUI調整
- Pythonで書き直し
作り終わって感じたことは以上の2点です。
順番に解説していきます。
main部分のUIが不細工なので、調整する方法を考える

グリッドレイアウトで作ってる弊害なのか、ウィンドサイズがサブメニューの大きさに依存するようになってます。
このままでも使えないことはないのですが、この隙間はどうも不格好ですね…

今考えてるのは、プルダウンメニューの採用ですかね。
タブで分けるのではなく、プルダウンで折りたためるようにした方が良いのかな~って考えてます。
そもそもPythonで作り直す
そもそもですが、melではなくPythonで作り直そうかと考えてます(今更…)
理由はリグの追加に対応するためです。
リグの形は curve
の point
フラグを使い、CVを動かして整えてます。
// ====================== // ====================== curve -d 1 -p 0.5 0.5 0.5 -p 0.5 0.5 -0.5 -p -0.5 0.5 -0.5; // ====================== // ======================
ご覧の通り、 -point
ってフラグをCVの数だけ書かないといけないんですよ…
しかし、Pythonなら、
# ====================== # ====================== cmds.curve(d=1,p=([0.5,0.5,0.5],[0.5,0.5,-0.5],[-0.5,0.5,-0.5])) # ====================== # ======================
このような感じで、 point
をまとめて書く仕様になってます。
この記述が肝です。
作りたい形のCVを取得する方法

例えば、画像のような球状の形をスクリプトで作ろうとする場合。
■melの場合
// === getAttrでCVのポジションを取得 ========== // ==================================== string $nodeList[]; string $ctrName; $nodeList =`ls -sl`; $ctrName = $nodeList[0] + ".cv[*]"; getAttr $ctrName; // 結果: 0 0 1 0 0.5 0.866025 0 0.866025 0.5 0 1 0 0 0.866025 -0.5 0 0.5 -0.866025 0 0 -1 0 -0.5 -0.866025 0 -0.866025 -0.5 0 -1 0 0 -0.866025 0.5 0 -0.5 0.866025 0 0 1 0.707107 0 0.707107 1 0 0 0.707107 0 -0.707107 0 0 -1 -0.707107 0 -0.707107 -1 0 0 -0.866025 0.5 0 -0.5 0.866025 0 0 1 0 0.5 0.866025 0 0.866025 0.5 0 1 0 0 0.866025 -0.5 0 0.5 -0.866025 0 0 -1 0 -0.5 -0.866025 0 -0.866025 -0.5 0 -1 0 0 -0.707107 0 0.707107 0 0 1 // // ==================================== // ====================================
■Python
# === getAttrでCVのポジションを取得 ====== # ================================= cmds.getAttr((cmds.ls(sl=1)[0])+".cv[*]") #結果: [(0.0, 0.0, 1.0), (0.0, 0.5, 0.866025), (0.0, 0.866025, 0.5), (0.0, 1.0, 0.0), (0.0, 0.866025, -0.5), (0.0, 0.5, -0.866025), (0.0, 0.0, -1.0), (0.0, -0.5, -0.866025), (0.0, -0.866025, -0.5), (0.0, -1.0, 0.0), (0.0, -0.866025, 0.5), (0.0, -0.5, 0.866025), (0.0, 0.0, 1.0), (0.707107, 0.0, 0.707107), (1.0, 0.0, 0.0), (0.707107, 0.0, -0.707107), (0.0, 0.0, -1.0), (-0.707107, 0.0, -0.707107), (-1.0, 0.0, 0.0), (-0.866025, 0.5, 0.0), (-0.5, 0.866025, 0.0), (0.0, 1.0, 0.0), (0.5, 0.866025, 0.0), (0.866025, 0.5, 0.0), (1.0, 0.0, 0.0), (0.866025, -0.5, 0.0), (0.5, -0.866025, 0.0), (0.0, -1.0, 0.0), (-0.5, -0.866025, 0.0), (-0.866025, -0.5, 0.0), (-1.0, 0.0, 0.0), (-0.707107, 0.0, 0.707107), (0.0, 0.0, 1.0)] # # ================================= # =================================
取得した結果、
melは0 0 1…のようにただの配列で返ってきますが、
Pythonなら、[(0.0,0.0,0.1),(0.0,0.5,0.886025)…]のようタプルで返ってきます。
カーブのスクリプトを書く場合、Pythonならこの結果をコピーするだけでOKです。
melだったら、わざわざ間に-p書いて、、、
ってとんでもない工数が発生しますからね…
拡張性、保守性、そういう意味でもPythonで記述するべきかと、今更ながらに思います…
コントローラーツールまとめ【シンプルisBEST】
- UIは直感的に分かるようにする
- 戻り値や引数を活用しコードを簡略化する
- 拡張性・保守性を考えるとPythonで書いた方が良い
ツールにしろリグにしろ、ユーザーが使いやすいのが正解かと思います。
視覚的に分かりやすい作りにして、迷ってる時間を1秒でもなくせたら、その分コスト削減になるのではないでしょうか。
また、melは変数の宣言やセミコロンが必須とか…
色々と面倒だなぁと、改めて感じました。
ツール開発後の取り回しを考えると、Pythonで書いた方が良いと思います。
ソースコードの紹介
ソースコードを紹介します。
改編・再配布は構いませんが、全て自己責任でお願いします。
データが消えても責任は取れないので悪しからず…
※ボタンのアイコン画像は自分で用意してください。
global proc string KK_MakeController(string $TYPE ){ string $cv; switch($TYPE){ case "KK_CUBE": $cv = `curve -d 1 -p 0.5 0.5 0.5 -p 0.5 0.5 -0.5 -p -0.5 0.5 -0.5 -p -0.5 -0.5 -0.5 -p 0.5 -0.5 -0.5 -p 0.5 0.5 -0.5 -p -0.5 0.5 -0.5 -p -0.5 0.5 0.5 -p 0.5 0.5 0.5 -p 0.5 -0.5 0.5 -p 0.5 -0.5 -0.5 -p -0.5 -0.5 -0.5 -p -0.5 -0.5 0.5 -p 0.5 -0.5 0.5 -p -0.5 -0.5 0.5 -p -0.5 0.5 0.5 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -n "controller1"` ; break; case "KK_CONE": $cv = `curve -d 1 -p 0.5 0 0.866025 -p -0.5 0 0.866025 -p 0 2 0 -p 0.5 0 0.866025 -p 1 0 0 -p 0 2 0 -p 0.5 0 -0.866025 -p 1 0 0 -p 0 2 0 -p -0.5 0 -0.866026 -p 0.5 0 -0.866025 -p 0 2 0 -p -1 0 -1.5885e-007 -p -0.5 0 -0.866026 -p 0 2 0 -p -0.5 0 0.866025 -p -1 0 -1.5885e-007 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -n "controller1"`; break; case "KK_Ball" : $cv = `curve -d 1 -p 0 0 1 -p 0 0.5 0.866025 -p 0 0.866025 0.5 -p 0 1 0 -p 0 0.866025 -0.5 -p 0 0.5 -0.866025 -p 0 0 -1 -p 0 -0.5 -0.866025 -p 0 -0.866025 -0.5 -p 0 -1 0 -p 0 -0.866025 0.5 -p 0 -0.5 0.866025 -p 0 0 1 -p 0.707107 0 0.707107 -p 1 0 0 -p 0.707107 0 -0.707107 -p 0 0 -1 -p -0.707107 0 -0.707107 -p -1 0 0 -p -0.866025 0.5 0 -p -0.5 0.866025 0 -p 0 1 0 -p 0.5 0.866025 0 -p 0.866025 0.5 0 -p 1 0 0 -p 0.866025 -0.5 0 -p 0.5 -0.866025 0 -p 0 -1 0 -p -0.5 -0.866025 0 -p -0.866025 -0.5 0 -p -1 0 0 -p -0.707107 0 0.707107 -p 0 0 1 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -k 20 -k 21 -k 22 -k 23 -k 24 -k 25 -k 26 -k 27 -k 28 -k 29 -k 30 -k 31 -k 32 -n "controller1"`; break ; case "KK_FourArrow" : $cv = `curve -d 1 -p 0 0 -1.1025 -p -0.33 0 -0.6075 -p -0.165 0 -0.6075 -p -0.165 0 -0.165 -p -0.6075 0 -0.165 -p -0.6075 0 -0.33 -p -1.1025 0 0 -p -0.6075 0 0.33 -p -0.6075 0 0.165 -p -0.165 0 0.165 -p -0.165 0 0.6075 -p -0.33 0 0.6075 -p 0 0 1.1025 -p 0.33 0 0.6075 -p 0.165 0 0.6075 -p 0.165 0 0.165 -p 0.6075 0 0.165 -p 0.6075 0 0.33 -p 1.1025 0 0 -p 0.6075 0 -0.33 -p 0.6075 0 -0.165 -p 0.165 0 -0.165 -p 0.165 0 -0.6075 -p 0.33 0 -0.6075 -p 0 0 -1.1025 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -k 20 -k 21 -k 22 -k 23 -k 24 -n "controller1"`; break ; case "KK_ArrowSingle" : $cv = `curve -d 1 -p 0 0 -1.32 -p -0.99 0 0 -p -0.33 0 0 -p -0.33 0 0.99 -p 0.33 0 0.99 -p 0.33 0 0 -p 0.99 0 0 -p 0 0 -1.32 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -n "controller1"`; break ; case "KK_Square" : $cv = `curve -d 1 -p 1 0 -1 -p -1 0 -1 -p -1 0 1 -p 1 0 1 -p 1 0 -1 -k 0 -k 1 -k 2 -k 3 -k 4 -n "controller1"`; break ; //----------mainここまで------------------// case "KK_Circle": string $circle[] = `circle -ch on -o on -nr 0 1 0 -r 1 -n "controller1"`; $cv = $circle[0]; break ; case "KK_Triangle": $cv = `curve -d 1 -p 1 0 -0.6 -p 0 0 1.132 -p -1 0 -0.6 -p 1 0 -0.6 -k 0 -k 1 -k 2 -k 3 -n "controller1"`; break ; case "KK_Cross" : $cv = `curve -d 1 -p -0.5 0 0.5 -p -2 0 0.5 -p -2 0 -0.5 -p -0.5 0 -0.5 -p -0.5 0 -2 -p 0.5 0 -2 -p 0.5 0 -0.5 -p 2 0 -0.5 -p 2 0 0.5 -p 0.5 0 0.5 -p 0.5 0 2 -p -0.5 0 2 -p -0.5 0 0.5 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -n "controller1"`; break ; case "KK_Pentagon" : $cv = `curve-d 1 -p 0.00495679 0 -0.850034 -p 0.807952 0 -0.259136 -p 0.499049 0 0.687543 -p -0.498432 0 0.687681 -p -0.807449 0 -0.263375 -p 0.00495679 0 -0.850034 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -n "controller1"`; break ; case "KK_Hexagon" : $cv = `curve -d 1 -p -1 0 0 -p -0.5 0 -0.866025 -p 0.5 0 -0.866025 -p 1 0 0 -p 0.5 0 0.866025 -p -0.5 0 0.866025 -p -1 0 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -n "controller1"`; break ; case "KK_Triangular" : $cv = `curve -d 1 -p 0 1 0 -p 1 0 -1 -p -1 0 -1 -p 0 1 0 -p -1 0 1 -p 1 0 1 -p 0 1 0 -p 1 0 -1 -p 1 0 1 -p -1 0 1 -p -1 0 -1 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -n "controller1"`; break ; case "KK_Spear" : $cv = `curve -d 1 -p 0 2 0 -p 0 0 2 -p 0 -2 0 -p 0 0 -2 -p 0 2 0 -p 0 -2 0 -p 0 0 0 -p 0 0 2 -p 0 0 -2 -p 2 0 0 -p 0 0 2 -p -2 0 0 -p 0 0 -2 -p 0 0 2 -p 0 0 0 -p -2 0 0 -p 2 0 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -n "controller1"`; break ; case "KK_Hexagon2" : $cv = `curve -d 1 -p -0.5 1 0.866025 -p 0.5 1 0.866025 -p 0.5 -1 0.866025 -p 1 -1 0 -p 1 1 0 -p 0.5 1 -0.866025 -p 0.5 -1 -0.866025 -p -0.5 -1 -0.866026 -p -0.5 1 -0.866026 -p -1 1 -1.5885e-007 -p -1 -1 -1.5885e-007 -p -0.5 -1 0.866025 -p -0.5 1 0.866025 -p -1 1 -1.5885e-007 -p -0.5 1 -0.866026 -p 0.5 1 -0.866025 -p 1 1 0 -p 0.5 1 0.866025 -p 0.5 -1 0.866025 -p -0.5 -1 0.866025 -p -1 -1 -1.5885e-007 -p -0.5 -1 -0.866026 -p 0.5 -1 -0.866025 -p 1 -1 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -k 20 -k 21 -k 22 -k 23 -n "controller1"`; break ; case "KK_001Dia" : $cv = `curve -d 1 -p 0 1 0 -p 1 0 0 -p 0 0 1 -p -1 0 0 -p 0 0 -1 -p 0 1 0 -p 0 0 1 -p 0 -1 0 -p 0 0 -1 -p 1 0 0 -p 0 1 0 -p -1 0 0 -p 0 -1 0 -p 1 0 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -n "controller1"`; break ; //-------矢印系----------// case "KK_DirSingleThin" : $cv = `curve -d 1 -p 0 0 1 -p 0 0 -1 -p -1 0 0 -p 0 0 -1 -p 1 0 0 -k 0 -k 1 -k 2 -k 3 -k 4 -n "controller1"`; break ; case "KK_DirDoubleThin" : $cv = `curve -d 1 -p 1 0 1 -p 0 0 2 -p -1 0 1 -p 0 0 2 -p 0 0 -2 -p -1 0 -1 -p 0 0 -2 -p 1 0 -1 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -n "controller1"`; break ; case "KK_DirDoubleFat" : $cv = `curve -d 1 -p 0 0 -1.35 -p -0.66 0 -0.36 -p -0.33 0 -0.36 -p -0.33 0 0.36 -p -0.66 0 0.36 -p 0 0 1.35 -p 0.66 0 0.36 -p 0.33 0 0.36 -p 0.33 0 -0.36 -p 0.66 0 -0.36 -p 0 0 -1.35 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -n "controller1"`; break ; case "KK_DirFourThin" : $cv = `curve -d 1 -p 1.25 0 -0.5 -p 1.75 0 0 -p 1.25 0 0.5 -p 1.75 0 0 -p -1.75 0 0 -p -1.25 0 -0.5 -p -1.75 0 0 -p -1.25 0 0.5 -p -1.75 0 0 -p 0 0 0 -p 0 0 1.75 -p -0.5 0 1.25 -p 0 0 1.75 -p 0.5 0 1.25 -p 0 0 1.75 -p 0 0 -1.75 -p 0.5 0 -1.25 -p 0 0 -1.75 -p -0.5 0 -1.25 -p 0 0 -1.75 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -n "controller1"`; break ; case "KK_DirFourFat" : $cv = `curve -d 1 -p 0 0 -1.1025 -p -0.33 0 -0.6075 -p -0.165 0 -0.6075 -p -0.165 0 -0.165 -p -0.6075 0 -0.165 -p -0.6075 0 -0.33 -p -1.1025 0 0 -p -0.6075 0 0.33 -p -0.6075 0 0.165 -p -0.165 0 0.165 -p -0.165 0 0.6075 -p -0.33 0 0.6075 -p 0 0 1.1025 -p 0.33 0 0.6075 -p 0.165 0 0.6075 -p 0.165 0 0.165 -p 0.6075 0 0.165 -p 0.6075 0 0.33 -p 1.1025 0 0 -p 0.6075 0 -0.33 -p 0.6075 0 -0.165 -p 0.165 0 -0.165 -p 0.165 0 -0.6075 -p 0.33 0 -0.6075 -p 0 0 -1.1025 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -k 20 -k 21 -k 22 -k 23 -k 24 -n "controller1"`; break ; case "KK_DirEight" : $cv = `curve -d 1 -p -1.8975 0 0 -p -1.4025 0 0.37125 -p -1.4025 0 0.12375 -p -0.380966 0 0.157801 -p -1.079222 0 0.904213 -p -1.254231 0 0.729204 -p -1.341735 0 1.341735 -p -0.729204 0 1.254231 -p -0.904213 0 1.079222 -p -0.157801 0 0.380966 -p -0.12375 0 1.4025 -p -0.37125 0 1.4025 -p 0 0 1.8975 -p 0.37125 0 1.4025 -p 0.12375 0 1.4025 -p 0.157801 0 0.380966 -p 0.904213 0 1.079222 -p 0.729204 0 1.254231 -p 1.341735 0 1.341735 -p 1.254231 0 0.729204 -p 1.079222 0 0.904213 -p 0.380966 0 0.157801 -p 1.4025 0 0.12375 -p 1.4025 0 0.37125 -p 1.8975 0 0 -p 1.4025 0 -0.37125 -p 1.4025 0 -0.12375 -p 0.380966 0 -0.157801 -p 1.079222 0 -0.904213 -p 1.254231 0 -0.729204 -p 1.341735 0 -1.341735 -p 0.729204 0 -1.254231 -p 0.904213 0 -1.079222 -p 0.157801 0 -0.380966 -p 0.12375 0 -1.4025 -p 0.37125 0 -1.4025 -p 0 0 -1.8975 -p -0.37125 0 -1.4025 -p -0.12375 0 -1.4025 -p -0.157801 0 -0.380966 -p -0.904213 0 -1.079222 -p -0.729204 0 -1.254231 -p -1.341735 0 -1.341735 -p -1.254231 0 -0.729204 -p -1.079222 0 -0.904213 -p -0.380966 0 -0.157801 -p -1.4025 0 -0.12375 -p -1.4025 0 -0.37125 -p -1.8975 0 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -k 20 -k 21 -k 22 -k 23 -k 24 -k 25 -k 26 -k 27 -k 28 -k 29 -k 30 -k 31 -k 32 -k 33 -k 34 -k 35 -k 36 -k 37 -k 38 -k 39 -k 40 -k 41 -k 42 -k 43 -k 44 -k 45 -k 46 -k 47 -k 48 -n "controller1"`; break ; case "KK_Rot90Thin" : $cv = `curve -d 1 -p -1.026019 0 0 -p -0.947961 0 0.392646 -p -0.725413 0 0.725516 -p -0.393028 0 0.947932 -p -0.13006 0 1 -p 0.0107043 0 1.001418 -p -0.339542 0 0.5442 -p 0.0107043 0 1.001418 -p -0.446514 0 1.351664 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -n "controller1"`; break ; case "KK_Rot90Fat" : $cv = `curve -d 1 -p -0.923366 0 0 -p -1.128672 0 0 -p -1.042702 0 0.431934 -p -0.798049 0 0.798033 -p -0.560906 0 0.946236 -p -0.975917 0 1.036319 -p -0.124602 0 1.096506 -p -0.537718 0 0.349716 -p -0.440781 0 0.788659 -p -0.652776 0 0.652998 -p -0.853221 0 0.353358 -p -0.923366 0 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -n "controller1"`; break ; case "KK_Rot180Thin" : $cv = `curve -d 1 -p -0.446514 0 -1.351664 -p 0.0107043 0 -1.001418 -p -0.339542 0 -0.5442 -p 0.0107043 0 -1.001418 -p -0.13006 0 -1 -p -0.393028 0 -0.947932 -p -0.725413 0 -0.725516 -p -0.947961 0 -0.392646 -p -1.026019 0 0 -p -0.947961 0 0.392646 -p -0.725413 0 0.725516 -p -0.393028 0 0.947932 -p -0.13006 0 1 -p 0 0 1 -p -0.339542 0 0.5442 -p 0 0 1 -p -0.446514 0 1.351664 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -n "controller1"`; break ; case "KK_Rot180Fat" : $cv = `curve -d 1 -p -0.124602 0 -1.096506 -p -0.975917 0 -1.036319 -p -0.559059 0 -0.944259 -p -0.798049 0 -0.798033 -p -1.042702 0 -0.431934 -p -1.128672 0 0 -p -1.042702 0 0.431934 -p -0.798049 0 0.798033 -p -0.560906 0 0.946236 -p -0.975917 0 1.036319 -p -0.124602 0 1.096506 -p -0.537718 0 0.349716 -p -0.440781 0 0.788659 -p -0.652776 0 0.652998 -p -0.853221 0 0.353358 -p -0.923366 0 0 -p -0.853221 0 -0.353358 -p -0.652776 0 -0.652998 -p -0.439199 0 -0.785581 -p -0.537718 0 -0.349716 -p -0.124602 0 -1.096506 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -k 20 -n "controller1"`; break ; case "KK_ArrowsOnBall" : $cv = `curve -d 1 -p 0 0.35 -1.001567 -p -0.336638 0.677886 -0.751175 -p -0.0959835 0.677886 -0.751175 -p -0.0959835 0.850458 -0.500783 -p -0.0959835 0.954001 -0.0987656 -p -0.500783 0.850458 -0.0987656 -p -0.751175 0.677886 -0.0987656 -p -0.751175 0.677886 -0.336638 -p -1.001567 0.35 0 -p -0.751175 0.677886 0.336638 -p -0.751175 0.677886 0.0987656 -p -0.500783 0.850458 0.0987656 -p -0.0959835 0.954001 0.0987656 -p -0.0959835 0.850458 0.500783 -p -0.0959835 0.677886 0.751175 -p -0.336638 0.677886 0.751175 -p 0 0.35 1.001567 -p 0.336638 0.677886 0.751175 -p 0.0959835 0.677886 0.751175 -p 0.0959835 0.850458 0.500783 -p 0.0959835 0.954001 0.0987656 -p 0.500783 0.850458 0.0987656 -p 0.751175 0.677886 0.0987656 -p 0.751175 0.677886 0.336638 -p 1.001567 0.35 0 -p 0.751175 0.677886 -0.336638 -p 0.751175 0.677886 -0.0987656 -p 0.500783 0.850458 -0.0987656 -p 0.0959835 0.954001 -0.0987656 -p 0.0959835 0.850458 -0.500783 -p 0.0959835 0.677886 -0.751175 -p 0.336638 0.677886 -0.751175 -p 0 0.35 -1.001567 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -k 20 -k 21 -k 22 -k 23 -k 24 -k 25 -k 26 -k 27 -k 28 -k 29 -k 30 -k 31 -k 32 -n "controller1"`; break ; case "KK_Cog": $cv=`curve -d 3 -p 7.06316e-009 0 -1 -p 0.104714 0 -0.990425 -p 0.314142 0 -0.971274 -p 0.597534 0 -0.821244 -p 0.822435 0 -0.597853 -p 0.96683 0 -0.314057 -p 1.016585 0 -2.28604e-005 -p 0.96683 0 0.314148 -p 0.822435 0 0.597532 -p 0.597534 0 0.822435 -p 0.314142 0 0.96683 -p 1.22886e-008 0 1.016585 -p -0.314142 0 0.96683 -p -0.597534 0 0.822435 -p -0.822435 0 0.597532 -p -0.96683 0 0.314148 -p -1.016585 0 -2.29279e-005 -p -0.96683 0 -0.314057 -p -0.822435 0 -0.597853 -p -0.597534 0 -0.821244 -p -0.314142 0 -0.971274 -p -0.104714 0 -0.990425 -p 7.06316e-009 0 -1 -k 0 -k 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -k 20 -k 20 -k 20 -n controller1`; string $Cog[] = `ls -sl`; select -r $cv.ep$cv.ep
$cv.ep[5] $cv.ep[7] $cv.ep[9] $cv.ep[11] $cv.ep[13] $cv.ep[15] $cv.ep[17] $cv.ep[19]; scale -r -p 0cm 0cm 0cm 0.732056 0.732056 0.732056 ; select -r $Cog; break ; case "KK_Pin" : $cv = `curve -d 1 -p 0 0 0 -p -2 0 0 -p -2.29289 0 0.70711 -p -3 0 1 -p -3.70711 0 0.70711 -p -4 0 0 -p -3.70711 0 -0.70711 -p -3 0 -1 -p -2.29289 0 -0.70711 -p -2 0 0 -p -2.292893 0 0.707107 -p -3.707107 0 -0.707107 -p -4 0 0 -p -3.707107 0 0.707107 -p -2.292893 0 -0.707107 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -n "controller1"`; break ; case "KK_doublePin" : $cv = `curve -d 1 -p 0 0 0 -p -2 0 0 -p -2.292893 0 -0.707107 -p -3 0 -1 -p -3.707107 0 -0.707107 -p -4 0 0 -p -3.707107 0 0.707107 -p -3 0 1 -p -2.292893 0 0.707107 -p -2 0 0 -p -2.292893 0 0.707107 -p -3.707107 0 -0.707107 -p -3 0 -1 -p -2.292893 0 -0.707107 -p -3.707107 0 0.707107 -p -3 0 1 -p -2.292893 0 0.707107 -p -2 0 0 -p 0 0 0 -p 2 0 0 -p 2.292893 0 -0.707107 -p 3 0 -1 -p 3.707107 0 -0.707107 -p 4 0 0 -p 3.707107 0 0.707107 -p 3 0 1 -p 2.292893 0 0.707107 -p 2 0 0 -p 2.292893 0 0.707107 -p 3.707107 0 -0.707107 -p 3 0 -1 -p 2.292893 0 -0.707107 -p 3.707107 0 0.707107 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -k 20 -k 21 -k 22 -k 23 -k 24 -k 25 -k 26 -k 27 -k 28 -k 29 -k 30 -k 31 -k 32 -n "controller1"`; break ; case "KK_fourPin" : $cv = `curve -d 1 -p -2 0 0 -p -2.292893 0 -0.707107 -p -3 0 -1 -p -3.707107 0 -0.707107 -p -4 0 0 -p -3.707107 0 0.707107 -p -3 0 1 -p -2.292893 0 0.707107 -p -2 0 0 -p -2.292893 0 0.707107 -p -3.707107 0 -0.707107 -p -4 0 0 -p -3.707107 0 0.707107 -p -2.292893 0 -0.707107 -p -2 0 0 -p 0 0 0 -p 2 0 0 -p 2.292893 0 0.707107 -p 3 0 1 -p 3.707107 0 0.707107 -p 4 0 0 -p 3.707107 0 -0.707107 -p 3 0 -1 -p 2.292893 0 -0.707107 -p 2 0 0 -p 2.292893 0 0.707107 -p 3.707107 0 -0.707107 -p 4 0 0 -p 3.707107 0 0.707107 -p 2.292893 0 -0.707107 -p 2 0 0 -p 0 0 0 -p 0 0 2 -p -0.707107 0 2.292893 -p -1 0 3 -p -0.707107 0 3.707107 -p 0 0 4 -p 0.707107 0 3.707107 -p 1 0 3 -p 0.707107 0 2.292893 -p 0 0 2 -p 0.707107 0 2.292893 -p -0.707107 0 3.707107 -p 0 0 4 -p 0.707107 0 3.707107 -p -0.707107 0 2.292893 -p 0 0 2 -p 0 0 -2 -p -0.707107 0 -2.292893 -p -1 0 -3 -p -0.707107 0 -3.707107 -p 0 0 -4 -p 0.707107 0 -3.707107 -p 1 0 -3 -p 0.707107 0 -2.292893 -p 0 0 -2 -p 0.707107 0 -2.292893 -p -0.707107 0 -3.707107 -p 0 0 -4 -p 0.707107 0 -3.707107 -p -0.707107 0 -2.292893 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -k 18 -k 19 -k 20 -k 21 -k 22 -k 23 -k 24 -k 25 -k 26 -k 27 -k 28 -k 29 -k 30 -k 31 -k 32 -k 33 -k 34 -k 35 -k 36 -k 37 -k 38 -k 39 -k 40 -k 41 -k 42 -k 43 -k 44 -k 45 -k 46 -k 47 -k 48 -k 49 -k 50 -k 51 -k 52 -k 53 -k 54 -k 55 -k 56 -k 57 -k 58 -k 59 -k 60 -n "controller1"`; break ; case "KK_Dumbell": $cv = `curve -d 1 -p -0.5 0 0 -p -0.58 -0.202763 0 -p -0.786335 -0.28675 0 -p -0.989098 -0.202763 0 -p -1.073085 0 0 -p -0.989098 0.202763 0 -p -0.786335 0.28675 0 -p -0.5835722 0.202763 0 -p -0.5 0 0 -p 0.5 0 0 -p 0.580579 0.202763 0 -p 0.783342 0.28675 0 -p 0.986105 0.202763 0 -p 1.070092 0 0 -p 0.986105 -0.202763 0 -p 0.783342 -0.28675 0 -p 0.580579 -0.202763 0 -p 0.5 0 0 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -k 8 -k 9 -k 10 -k 11 -k 12 -k 13 -k 14 -k 15 -k 16 -k 17 -n "controller1"`; break; case "KK_Aim": $cv = `curve -d 1 -p 0 0 1 -p 0 0 -1 -p 0 2 0 -p 0 -2 0 -p 0 0 -1 -p 2 0 0 -p -2 0 0 -p 0 0 -1 -k 0 -k 1 -k 2 -k 3 -k 4 -k 5 -k 6 -k 7 -n "controller1"`; break; } return $cv;//作ったコントローラーの名前を返す } global proc main_KK_MakeController(string $mode){ //選択したノードの位置情報をとってくる float $pos[]; float $rot[]; int $i; string $node[],$ctrName; $node = `ls -sl`; //選択してるノードがあるかを判定 if(0 == size($node)){ $ctrName = `KK_MakeController($mode)`;//コントローラーを作りつつ、コントローラーの名前を取得 } else{ for($i=0;$i<size($node);$i++){ $ctrName = `KK_MakeController($mode)`; $pos = `xform -q -t -ws $node[$i]`; $rot = `xform -q -ro -ws $node[$i]`;//トランスとロットは別で取得しないといけんのね xform -t $pos[0] $pos
$pos
$ctrName;//コントローラーの名前を参照して、選択したノードの場所へスナップ rotate $rot[0] $rot
$rot
$ctrName; } } } global proc KK_ControllerUI() { if (`window -ex KK_Window`) deleteUI KK_Window ; window -wh 500 200 -title "KK_Controller" -rtf 1 -s 1 KK_Window; string $tabs = `tabLayout -innerMarginWidth 1 -innerMarginHeight 1`; string $grid_01 = `gridLayout -numberOfColumns 6 -cellWidthHeight 50 50`; iconTextButton -style "iconOnly" -image1 "KKController_Square.png" -c "main_KK_MakeController KK_CUBE"; iconTextButton -style "iconOnly" -image1 "KKController_Cone.png" -c "main_KK_MakeController KK_CONE"; iconTextButton -style "iconOnly" -image1 "KKController_ball.png" -c "main_KK_MakeController KK_Ball"; iconTextButton -style "iconOnly" -image1 "KKController_ForeArrow.png" -c "main_KK_MakeController KK_FourArrow"; iconTextButton -style "iconOnly" -image1 "KKController_SingleArrow.png" -c "main_KK_MakeController KK_ArrowSingle"; iconTextButton -style "iconOnly" -image1 "KKController_Square01.png" -c "main_KK_MakeController KK_Square"; setParent ..; string $grid_02 = `gridLayout -numberOfColumns 6 -cellWidthHeight 50 50`; iconTextButton -style "iconOnly" -image1 "KK_Controller_Circle.png" -c "main_KK_MakeController KK_Circle"; iconTextButton -style "iconOnly" -image1 "KK_Controller_Cross.png" -c "main_KK_MakeController KK_Cross"; iconTextButton -style "iconOnly" -image1 "KK_Controller_Pentagon.png" -c "main_KK_MakeController KK_Pentagon"; iconTextButton -style "iconOnly" -image1 "KK_Controller_Hexagon.png" -c "main_KK_MakeController KK_Hexagon"; iconTextButton -style "iconOnly" -image1 "KK_Controller_Triangular.png" -c "main_KK_MakeController KK_Triangular"; iconTextButton -style "iconOnly" -image1 "KK_Controller_Spear.png" -c "main_KK_MakeController KK_Spear";// iconTextButton -style "iconOnly" -image1 "KK_Controller_KK_Hexagon2.png" -c "main_KK_MakeController KK_Hexagon2"; iconTextButton -style "iconOnly" -image1 "KK_Controller_Dia.png" -c "main_KK_MakeController KK_001Dia"; iconTextButton -style "iconOnly" -image1 "KK_Controller_DirSingleThin.png" -c "main_KK_MakeController KK_DirSingleThin"; iconTextButton -style "iconOnly" -image1 "KK_Controller_DirDoubleThin.png" -c "main_KK_MakeController KK_DirDoubleThin"; iconTextButton -style "iconOnly" -image1 "KK_Controller_DirDoubleFat.png" -c "main_KK_MakeController KK_DirDoubleFat"; iconTextButton -style "iconOnly" -image1 "KK_Controller_DirFourThin.png" -c "main_KK_MakeController KK_DirFourThin"; iconTextButton -style "iconOnly" -image1 "KK_Controller_DirEight.png" -c "main_KK_MakeController KK_DirEight";//******-- iconTextButton -style "iconOnly" -image1 "KK_Controller_Rot90Thin" -c "main_KK_MakeController KK_Rot90Thin"; iconTextButton -style "iconOnly" -image1 "KK_Controller_Rot90Fat.png" -c "main_KK_MakeController KK_Rot90Fat"; iconTextButton -style "iconOnly" -image1 "KK_Controller_Rot180Thin.png" -c "main_KK_MakeController KK_Rot180Thin"; iconTextButton -style "iconOnly" -image1 "KK_Controller_Rot180Fat" -c "main_KK_MakeController KK_Rot180Fat";//************** iconTextButton -style "iconOnly" -image1 "KK_Controller_ArrowsOnBall.png" -c "main_KK_MakeController KK_ArrowsOnBall"; iconTextButton -style "iconOnly" -image1 "KK_Controller_Cog.png" -c "main_KK_MakeController KK_Cog"; iconTextButton -style "iconOnly" -image1 "KK_Controller_pin.png" -c "main_KK_MakeController KK_Pin"; iconTextButton -style "iconOnly" -image1 "KK_Controller_doublePin.png" -c "main_KK_MakeController KK_doublePin"; iconTextButton -style "iconOnly" -image1 "KK_Controller_fourPin.png" -c "main_KK_MakeController KK_fourPin"; iconTextButton -style "iconOnly" -image1 "KK_Controller_Dumbell.png" -c "main_KK_MakeController KK_Dumbell";//*-/-* iconTextButton -style "iconOnly" -image1 "KK_Controller_Aim.png" -c "main_KK_MakeController KK_Aim"; setParent ..; tabLayout -e -tabLabel $grid_01 "main" -tabLabel $grid_02 "sub01" $tabs; showWindow KK_Window; }