« 2018年2月 | トップページ | 2018年5月 »

2018年4月

2018年4月30日 (月)

ワイからさん for Maya。

.




世の中にたくさんある、Maya さまのワイヤカラー設定ツール



どれもこれも、微妙に自分が求める使い勝手と違ったり、自分にとっては無駄に高機能だったり。  なぜか俺の環境で動いてくれないものもある。



やっぱ書くしかないのかしら。

XSI 時代にも書いた ワイカラさん  が、現代に蘇る。

Waikarasan


Python:

# -*- coding: utf-8 -*-
#    ワイカラさん for Maya v0.1

import pymel.core as pm

def colSetter( target, colIndex, valOutliner, valRGB ):
    if target != None :
        if colIndex == -1 : 
            pm.setAttr( target + ".overrideEnabled", 0 )
            pm.setAttr( target + ".overrideColor", 0 )
            pm.setAttr( target + ".useOutlinerColor", 0 )
            #pm.setAttr( target + ".outlinerColor", 0, 0, 0 )
        else :
            colRGB = pm.colorIndex( colIndex, q=1 )
            pm.setAttr( target + ".overrideEnabled", 1 )
            pm.setAttr( target + ".overrideColor", colIndex )
    
            if valRGB == True:
                pm.setAttr( target + ".overrideRGBColors", 1 ) 
                pm.setAttr( target + ".overrideColorRGB", colRGB[0], colRGB[1], colRGB[2] )
                    
            if valOutliner == True :
                pm.setAttr( target + ".useOutlinerColor", 1 )
                pm.setAttr( target + ".outlinerColor", colRGB[0], colRGB[1], colRGB[2] )


def setWireColor( colIndex ):
    valTransf = pm.checkBox( cbTransf, q=1, value=1 )
    valShape =  pm.checkBox( cbShape, q=1, value=1 )
    valOutliner=pm.checkBox( cbOutliner, q=1, value=1 )
    valRGB    = pm.checkBox( cbRGB, q=1, value=1 )
    valDesel  = pm.checkBox( cbDesel, q=1, value=1 )

    sels = pm.selected()
    for obj in sels:
        shp = obj.getShape()
        if valTransf == True : colSetter( obj, colIndex, valOutliner, valRGB )
        if valShape == True  : colSetter( shp, colIndex, valOutliner, valRGB )
    if valDesel == True : pm.select( clear=1 )


windowName = u"ワイからさん for Maya"
if pm.window( windowName, exists=True ) : pm.deleteUI( windowName )


waikaraWin = pm.window( windowName )
pm.columnLayout( adjustableColumn=1 )


pm.frameLayout( cll=1, cl=0, mw=4, mh=3, lv=0, bv=1)
pm.rowColumnLayout(  numberOfColumns= 16 )
for i in range(31):
    colRGB = pm.colorIndex( i+1, q=1 )
    pm.nodeIconButton( style="textOnly", bgc=( colRGB[0], colRGB[1], colRGB[2] ),
                        marginWidth=1, marginHeight=1, width=20, height=18,
                        command = "setWireColor(%d)" % (i+1)
                     )

pm.nodeIconButton( style="textOnly", bgc=( 0.4, 0.4, 0.4 ), label="K",
                    marginWidth=1, marginHeight=1, width=20, height=18, 
                    command="setWireColor(%d)" % -1 )

pm.setParent( ".." )

pm.rowColumnLayout(  numberOfColumns= 5 )    
cbTransf = pm.checkBox( label="Transform", v=1 )
cbShape =  pm.checkBox( label="Shape", v=1 )
cbOutliner=pm.checkBox( label="Outliner", v=1 )
cbRGB =    pm.checkBox( label="RGB" )
cbDesel =  pm.checkBox( label="Delesect", v=1 )

pm.showWindow( waikaraWin )    

ダウンロード wikaraSan_v01.py (2.7K)




とりあえず、最低限必要なものだけ書いた。


これをひな型として、まずは運用してみて、必ず不満点が出てくるから、ちょっとずつ改良していく。 昔からそうやって自分用のツールを書いてきた。 

低レベルなものばかりだけどね。 そのスジの人に見られたら、プッと笑われそう。 でもいいの。 俺様の需要を満たしてくれているから。 俺の需要に合わせて書いたツール以上に俺の需要を満たしてくれるものはないのです。 






しかし、Maya さまのワイヤカラーのしくみ、めんどくせえなあ。 XSI のは、普通にオブジェクトごとに1つ色を持っているだけだったんだけどなあ。


Maya さまのワイヤカラーは、トランスフォームノード、シェイプノードにそれぞれ色を持っていて、かつ、アウトライナ表示用の色も別に持っている。


しかもそれぞれ、インデクスカラーと RGB カラーと持っていて、でもアウトライナ用のカラーは RGB しかない。


そしてどうやら、ハイパーグラフ内では、RGBカラーの表示ができない。インデクスカラーしか反応してくれない。


そしてインデクスカラーの種類が全31色と、どうにも足りない。 いい塩梅の色が多ければ31色もあれば十分なのだが、なにやら半端で見づらい色が多い。


そしてまだ調査不足で仕組みを理解できていないのだが、上記のトランスフォームノードとシェイプノードの Drawing overrides で決める色以外に、Display > Wireframe Color などというメニューも存在する。

Wirecol

なんぞこれ。

この Wireframe Color よりも、トランスフォームノードやシェイプノードの Drawing Overrides で決めた色の方が優先されるように見える。 そちらに色が入っている時(=Enable Overrides がオフになっている時、またはオンになっていてもインデクスカラーが0 の時)は、この Wireframe Color が反映されないから。

また、この Wireframe Color の方で決めた色は、どこにデータを持っているのか、いまだに発見できていない。 アトリビュートエディタで探してみたが、見つからない。 どこに情報しまってあるんだ。 スクリプトエディタで Echo All にすれば見つかるかな。 めんどくせえなw



なんでこんな複雑な仕組みにしたのでしょう?
なんか、トラップをいっぱい仕込まれているような気が?
わざとやってんですか?
Maya さま?




おかげで仕事は進まず、
問題対処の能力が高まります。

本当にありがとうございますMayaさま。










.


| | コメント (0) | トラックバック (0)

2018年4月26日 (木)

なんでジョイントをイッキに選ばせてくれないんですか。

.




Mayaさまって、ビューポート上でイッキにジョイントを選ぼうとマウスドラッグしても、親のジョイントしか選ばせてくれないですよねえ?




Jointsel1


                 ↓


Jointsel2




なぜなんでしょう。
親だけが選ばれてくれた方が都合のいい場合って、
どういう場合なのでしょう。

おれ、本当に想像できなくて。

普通に子供まで選ばせて頂きたいのですが。
Maya さま。




と、もう何年も思い続けてきたのですよね。


人に聞くと、大抵、ジョイント選んで Select > Hierarchy ってやれば全体選択できるよ、と言われるんですが、必ずしも全体を選択したいわけじゃない時も多いじゃないですか。 10階層あるジョイント階層の中の、第2ジョイントから第6ジョイントまで選択したい時とか、あるじゃないですか。 普通にビューポートで、選択範囲に入ったやつだけ、親だろうが子だろうが複数イッキに選択されて欲しいんだよなあ。



あと、ジョイント階層の中にジョイント以外のものが入っている時、それは選択したくないって場合も多いんですよね。 例えばジョイントの表示上の太さを変えたい時とかね。 ジョイント以外のものが選択に含まれていると、Radius のアトリビュートがチャネルボックスに現れてくれないもんだから。   だから、Select > Hierarchy じゃ都合悪い場合も多いわけですよ。 まあ、いったん Select > Hierarchy してから、要らないものはちまちま選択から外していくという作業をすればいいんですけどね。 でももちろん、それも面倒です。数が多いと無理ですよ。



今のところ、アウトライナなどで選択するか、どうしてもビューポートで選択したい時は Shift + クリックを繰り返すとかしていますが、面倒です。すんげえ面倒です。 面倒というだけでなく、なんかこう、馬鹿馬鹿しい気がして、非常にストレスフルです。 納得いかない感がつのると言うか。



で、さっき、スクリプトで少しは楽にできないかな~と思って書いてみたら、まあなんか、ちょっとだけマシになったかな、と思いました。 ちょっとだけです。 ほんのちょっとだけ。


python:
#jjjSelectGoddamnJointsOnly
import pymel.core as pm
pm.select( hierarchy=1 )

goddamnJoints = pm.ls( sl=1, type="joint" )
pm.select( goddamnJoints, r=1 )

ジョイント(複数可)をまず選んで、実行すると、その階層下のジョイントだけを、最下層まで、イッキに選択します。

つまり、Select > Hierarchy に 「ジョイントしか選択に残さない」 という機能を付けただけです。実際コードもそのまんまです。いったん Select > Hierarchy を実行して、そこからジョイントだけを抽出しているというコードになっています。
だから、マウスドラッグで一気に選択できない問題は何一つ解決してないです。 せめてこれだけでも、と、ジョイントだけを選んでくれるようにしたら、ちょっとだけ便利な場合が増えましたというだけのことです。 むしろため息の方がつのるw





これ、なんとかならんでしょうか?

俺が知らないだけ?

マウスドラッグで、親だけでなく全部、フツーに選びたいのですよ。


Maya さま?






.

| | コメント (6) | トラックバック (0)

2018年4月23日 (月)

シェーディング表示の上にワイヤフレームおんおふ。

.



やっぱ普通に需要ありますよねえ?


4 押したらワイヤ表示。
5 押したらシェーディング表示。
6 押したらテクスチャ付き表示。
7 押したらライティング反映表示。

とかなんとか。
となると、


なんで シェーディング+ワイヤ表示 のホットキーがねえんだよゴルァ


ってみんな思いますよね。
俺も、Maya さまに触り出した当初から思っていた。





で、今さらなんだけど調べてみたら、いっぱい出てきました。

基本、標準の機能ではホットキーにできず、自分でスクリプトを書いてホットキーにするしかないみたい。 確かに、Maya 2017 でホットキーエディタで 4 5 6 あたりのホットキーが割り当てされているコマンドを検索してみると、 Display Wireframe とか Display Shaded は見つかるけど、Wireframe On Shaded とかそういうのは見つかりませんでした。 つまり、ホットキーがデフォルトでは割り当てされてないだけというのではなく、そもそもホットキーが割り当てできませんということですね。 なので、スクリプトを書いて、それをランタイムコマンドにでもして下さいということですね。 ランタイムコマンドにしてしまえば、ホットキーにできますからね。 
ってことでホットキーエディタ内でランタイムコマンド作って、中身のコードはネットからそのまんまパクりました。

Wireonshaded




コードは、検索するとあちこちに同じものが載っています。 昔誰かが書いたものが、コピペで拡散されたのでしょう。 もはや出どころも作者も不明のままコピペされているように見えます。 うーん、出どころは書いた方がいいと思うが・・・・


とりあえず俺から見た出どころは、嘔吐デスク様の AREA のページということにしておきます。 ↓

https://forums.autodesk.com/t5/maya-forum/wireframe-on-shaded-shortcut/td-p/6299247
string $selectedPanel = `getPanel -wf`;
int $shadedWireState = `modelEditor -q -wos $selectedPanel`;
if(`modelEditor -ex $selectedPanel`)
{
    setWireframeOnShadedOption (!$shadedWireState) $selectedPanel;
}




.

| | コメント (0) | トラックバック (0)

« 2018年2月 | トップページ | 2018年5月 »