【Python学習】Lv14 MEL エッジカラー変換
今回は選択ノードを任意のインデックスカラーに変更するMELのご紹介です。
がその前に、MAYAの既存機能でも色変更は可能ですので、まずはそこから。
ノード選択>アトリビュートのDisplay>Drawing Overrides のEnable Overridesをチェック > Color
ココで色を変える事ができます。
しかし、スライダーは目的色に到達するまでに時間がかかり過ぎてイライラの原因に...
また別の方法でもワイヤーフレームの色は変えられます。
MAYA上部メニューから Display>Wireframe Color...
Wireframe ColorのUIのように色別表示されている方が素早く変更できて良さそうです!
選択できる色数は少ないですがダブルクリックで色変更は可能。
人によってはこれで十分かも知れませんね。
しかし、Wireframe Colorは以下の2点が個人的に十分と言えず使用していません。
・Drawing Overridesの色を変えている訳ではない
・個人の環境によって色設定がバラバラになりがちなので統一が難しい
惜しい...
最後にAmaterasuのDisplay Colorのご紹介です。
Display Color | KIWAMIDEN
これで十分!これが完璧! 理想形です。
なのですが、Python!!
しかもコード未公開なので、カスタムは今の私のレベルでは到底無理な話です。
という事で目標が定まりました!
目標・MELでAmaterasuのDisplay Colorみたいなのを作る!
・RGBは不要なのでインデックスのみに絞る!
そして数日後、、、
▼▼▼ 試行錯誤の上、何とか出来たのがコチラです ▼▼▼
ChangeEdgeColor
シェイプノードの色(Drawing Overrides)を変更するツールセットです。
・素早く目的の色にアクセスできます。
・まとめて選択して色を変える事もできます。
そしてコードです。
global proc EdgeColor(int $i)
{
string $NODE_LIST[] = `ls -sl`;
string $NODE_NAME;
switch ($i)
{
case 1 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 1 ;
}
break ;
case 2 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 2 ;
}
break ;
case 3 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 3 ;
}
break ;
case 4 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 4 ;
}
break ;
case 5 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 5 ;
}
break ;
case 6 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 6 ;
}
break ;
case 7 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 7 ;
}
break ;
case 8 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 8 ;
}
break ;
case 9 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 9 ;
}
break ;
case 10 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 10 ;
}
break ;
case 11 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 11 ;
}
break ;
case 12 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 12 ;
}
break ;
case 13 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 13 ;
}
break ;
case 14 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 14 ;
}
break ;
case 15 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 15 ;
}
break ;
case 16 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 16 ;
}
break ;
case 17 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 17 ;
}
break ;
case 18 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 18 ;
}
break ;
case 19 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 19 ;
}
break ;
case 20 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 20 ;
}
break ;
case 21 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 21 ;
}
break ;
case 22 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 22 ;
}
break ;
case 23 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 23 ;
}
break ;
case 24 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 24 ;
}
break ;
case 25 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 25 ;
}
break ;
case 26 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 26 ;
}
break ;
case 27 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 27 ;
}
break ;
case 28 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 28 ;
}
break ;
case 29 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 29 ;
}
break ;
case 30 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 30 ;
}
break ;
case 31 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 31 ;
}
break ;
case 32 :
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 0 ;
}
break ;
}
}
global proc tk_ChangeEdgeColor()
{
if(`window -ex tk_ChangeEdgeColor`) deleteUI tk_ChangeEdgeColor ;
window -title "ChangeEdgeColor" -s 1 -mnb 0 -mxb 0 tk_ChangeEdgeColor ;
gridLayout -numberOfColumns 16 -cellWidthHeight 20 20;
iconTextButton -l "" -i "rvGrabSwatch.png" -c "EdgeColor(32)";
button -bgc 0 0 0 -l"" -c "EdgeColor(1)";
button -bgc 0.25 0.25 0.25 -l"" -c "EdgeColor(2)";
button -bgc 0.6 0.6 0.6 -l"" -c "EdgeColor(3)";
button -bgc 0.608 0 0.157 -l"" -c "EdgeColor(4)";
button -bgc 0 0.016 0.376 -l"" -c "EdgeColor(5)";
button -bgc 0 0 1 -l"" -c "EdgeColor(6)";
button -bgc 0 0.275 0.098 -l"" -c "EdgeColor(7)";
button -bgc 0.149 0 0.263 -l"" -c "EdgeColor(8)";
button -bgc 0.784 0 0.784 -l"" -c "EdgeColor(9)";
button -bgc 0.541 0.282 0.2 -l"" -c "EdgeColor(10)";
button -bgc 0.247 0.137 0.122 -l"" -c "EdgeColor(11)";
button -bgc 0.6 0.149 0 -l"" -c "EdgeColor(12)";
button -bgc 1 0 0 -l"" -c "EdgeColor(13)";
button -bgc 0 1 0 -l"" -c "EdgeColor(14)";
button -bgc 0 0.255 0.6 -l"" -c "EdgeColor(15)";
button -bgc 1 1 1 -l"" -c "EdgeColor(16)";
button -bgc 1 1 0 -l"" -c "EdgeColor(17)";
button -bgc 0.392 0.863 1 -l"" -c "EdgeColor(18)";
button -bgc 0.263 1 0.639 -l"" -c "EdgeColor(19)";
button -bgc 1 0.69 0.69 -l"" -c "EdgeColor(20)";
button -bgc 0.894 0.675 0.475 -l"" -c "EdgeColor(21)";
button -bgc 1 1 0.388 -l"" -c "EdgeColor(22)";
button -bgc 0 0.6 0.329 -l"" -c "EdgeColor(23)";
button -bgc 0.63 0.41391 0.189 -l"" -c "EdgeColor(24)";
button -bgc 0.62118 0.63 0.189 -l"" -c "EdgeColor(25)";
button -bgc 0.4095 0.63 0.189 -l"" -c "EdgeColor(26)";
button -bgc 0.189 0.63 0.3654 -l"" -c "EdgeColor(27)";
button -bgc 0.189 0.63 0.63 -l"" -c "EdgeColor(28)";
button -bgc 0.189 0.4051 0.63 -l"" -c "EdgeColor(29)";
button -bgc 0.43596 0.189 0.63 -l"" -c "EdgeColor(30)";
button -bgc 0.63 0.189 0.41391 -l"" -c "EdgeColor(31)";
setParent..;
showWindow tk_ChangeEdgeColor;
}
またもやSwitch式で書いています。
そしてガーっと長く書いてはいますが中身は至極単純 以下のコマンドを繰り返しているだけ
string $NODE_LIST[] = `ls -sl`;
string $NODE_NAME;
for($NODE_NAME in $NODE_LIST){
setAttr ($NODE_NAME + ".overrideEnabled") 1 ;
setAttr ($NODE_NAME + ".overrideColor") 13 ;
}
"13"(赤)の部分を他の数字に変えれば色が変わります。
ちなみにインデックスカラーを表示するだけなら以下のコードでできます。
{
int $i;
window;
columnLayout;
string $colorPalette = `palettePort
-dimensions 16 2
-width (16 * 20)
-height (2 * 20)
-transparent 0
-topDown true
-colorEditable false`;
for($i = 1; $i <= 31; $i++)
{
float $col[] = `colorIndex -query $i`;
palettePort -edit -rgbValue $i $col[0] $col[1] $col[2] $colorPalette;
}
showWindow;
}
ただ、これは『表示するだけ』でこれをボタンに活用したり色参照に使用する術が見つからず断念。
しかしインデックスカラーは全部で31色あるのねーという事は分かりました。
コード中に記述しているボタンの色(button -bgc 0.43596 0.189 0.63みたいな)を調べる方法は以下のやり方で調べました。
colorIndex -q ここに数字書く
これでインデックスカラーの数字に当てられている-bgcの数値が分かります。
以上となります。
いやー、絶対もっとキレイな記述方法あると思うんですけどねー...
お恥ずかしい限りですが、動くからいいじゃん!の精神で今のところやってます。
いずれ書き直す前提で晒しておきますね。
上級者の人が見たら凄く汚いコードなんだろうなーと思ってますw
参考になったサイト紹介
前回に引き続き今回もMEL作成にあたって凄く参考にさせて頂いたサイトのご紹介。
MEL Tips
以前も書きましたが様々な情報のお陰で答えに早く導いてくれたような気がします。
まとめ
以上。【Python学習】Lv14 MEL エッジカラー変換でした。
これで自作した3箇所の紹介が終わりましたので以下の本を読み進めようと思います。
次の目標は
制作したMELをPython化してみるですかね。
PythonをMELにするのは既にやってみて出来たので逆も既に出来そうな気はしていますが
単純に
読みたいから読みます!
次回
未定です。上に書いたような事をやるかそうでないか。