fc2ブログ

    UV Editor Plus

    UV編集支援ツールとりあえず完成~
    uvEditorPlus.jpg

     昔実機(PS2)をやってた頃に作ったヤツのリメイクですんで、ハイポリよりもローポリの方の支援機能が多いです。ってかハイポリ用の支援機能は無いです!(キリッ
     需要があるんかどうかはわかりませんが、欲しい人は例によってここからどうぞ。
    Melpy-Studio Tool Download
     あ、基本的にMaya2011対応で下位バージョンはサポート外です。



    ■Maya2011 GUI

     Maya2011になってからアイコンにPNG形式をサポートするようになりました。おかげで透過アイコンの作成が容易になりました。
     Photoshopで背景レイヤを隠して保存するだけで作れるのは非常にありがたいし、半透明もいけるようになったっぽいのは非常にうれしいです。今回のツールで早速使ってみました。
     また、アイコンを使用するコマンドでEnableをFalseにすると、アイコンのイメージをグレースケール化してくれるようになりました。
    iconEnable.jpg ⇔ iconDisable.jpg
     右側の画像は自前で用意しなくても、EnableをFalseにすればMayaが自動で変換かけてくれます。
     また、カーソルをアイコンの上に持って行くと自動で色がちょっと濃くなります。

     ここらへんはさすがQtと言ったところでしょうか。またおかげで表示形式が各OS間で統一されたようで(以前はWindows専用フラグが多かった)うれしいです。
     ただし、アイコンボタンをクリックした瞬間ボタンの押し間違えに気づいた時、以前はカーソルをボタン以外のところへ移動してからマウスのボタンを放せばキャンセルできたのですが、Linux版同様Windowsでも出来なくなりました。これはちょっと痛い・・・

     作る側としてはGUIお手軽にカッコよく作れるになったのは非常にプラスですな。これかもチョクチョクとツールを2011向けに書き換えていくかぁ
    スポンサーサイト



    Randomizer

     オブジェクトをランダムに配置したり、選択するツールを作成。
    randomizer.jpg
     正確には昔作ってたんですが、Pythonで書き直しました。
     友達からMaya2011で動かんぞゴラァと指摘を受けたのと、ランダム配置した結果が今まで箱状にしか配置できなかったのを球状に配置できるようにして欲しいとの要請を受けてまして、ルーチンや作りも古いしMelだったってのもあって、この際1から作り直してしまおうと。

     欲しい人がいたら、ここからダウソできます。
    Melpy-Studio Tool Download
    randomizerってのがソレです(ってまだ1個しかないけど)

     Python化するんで、やっぱりPythonの機能を使わないともったいないって事でGUIは例によってクラスで作成してみました。またPyQt勉強してて気づいたことを導入してみました。
     そしたらまぁ、なんと便利だ事!!(いつも言ってるような気がしますな)

     今回やった事をメモ。
     ツールではTranslate・Rotate・Scaleセクションでそれぞれ同じオプションが付属しているのですが、共通パーツなんでこの部分をStandardOptionと言うクラスにしました。
     ・__init__メソッドでGUIを定義してクラスを呼び出せばGUIを作成できるようします。
     ・checkBoxをOnするとGUIが切り替わる動作のようなGUIのリフレッシュ系動作もメソッドとして登録。
     ・getValueメソッドを用意し、このメソッドで必要な情報を一括で返すようにします。
    これでこのクラスを呼び出せば、同じ動作をするGUI郡を何回でも作れるようになります。

     とまぁ、ここまではMayaでGUIにユニークタグでも引数として渡してやれば出来なくもないんですが、次にやったクラスの継承で感動!
     Translateオプションは微妙にオプションが他2つに比べて多いので、上記StandardOptionクラスを継承したサブクラスTranslateOptionを作成。
     基本StandardOptionでやってることは一緒。ただ、PyQt勉強するまで気がつかなかったことがあってそこで感動しました。
     今まで、サブクラスで__init__メソッドを上書きしてしまうと、親クラスの__init__の効果は無効になるとばかり思ってたのですが、なんとしっかり親クラス__init__を使った上でカスタマイズもできました!!
     サブクラスの__init__メソッドの中で親クラスの__init__を呼び出すだけで、なんとまぁ!バッチリ実行してくれるじゃないですか!
     こんな感じ
    import maya.cmds as mc
    import functools
    fp = functools.partial
    class StandardOption( object ):
        def __init__( self, parent ):
            self.uiClm = mc.columnLayout( p=parent, adj=True )
            self.check = mc.checkBox( l='Test', v=True )
        def printGUI( self, *tmp ):
            print 'Check box state : %s' % mc.checkBox( self.check, q=True, v=True )
    
    class AdvancedOption( StandardOption ):
        def __init__( self, parent ):
            self.mainClm = mc.frameLayout( l='Test', p=parent )
            clm = mc.columnLayout( adj=True )
            self.slider = mc.floatSliderGrp( l='Slider', f=True, v=1, min=0, max=10 )
            StandardOption.__init__( self, clm )
            self.button = mc.button( l='Button', c=fp(self.printGUI) )
    

    こんな感じのクラスを用意しておき、今度は下記のを実行すると・・・
    win = mc.window()
    clm = mc.columnLayout()
    a = StandardOption( clm )
    b = StandardOption( clm )
    c = StandardOption( clm )
    d = AdvancedOption( clm )
    mc.showWindow( win )
    
    sampleWindow.jpg
     こんな感じのウィンドウがでます。
     Testと言うチェックボックスはStandardOptionクラスで作成、スライダやボタンがあるヤツはStandardOptionを継承したAdvancedOptionクラスで作成しています。
     AdvancedOptionの__init__メソッドではまずフレームレイアウトを作成して、スライダを作成、その後StandardOptionクラスを呼び出し、最後にボタンを作成しています。
     なのでTestと言うチェックボックスがスライダとボタンの間に作成されているんですね。
     ボタンにはStandardOptionクラスのprintGUIメソッドをアサインしてるので、しっかり継承されているのがわかると思います。

     似たようなGUIを多数作成する必要がある場合、クラスの継承は超便利!!

     今までのツールのGUIも見直しかなぁ
    プロフィール

    Eske

    Author:Eske
    萌えイラストレーターを目指す3DCGイラストレーター。
    現在ポケモンカードゲーム、ガンダムトライエイジ、ガンダムコンクエスト、妖怪ウォッチとりつきカードゲームなどで3DCGを使用したイラストレーターとして参加中。

    主にここでは日々気づいたメモなんかを残してます。
    イラストのお仕事も受け付けております。ココのメールアドレスからご連絡できますので、お気軽にご相談下さい。

    最新記事
    最新コメント
    カテゴリ
    最新トラックバック
    月別アーカイブ
    検索フォーム
    リンク
    QRコード
    QR