fc2ブログ

    Locator ver.2

     ロケータに機能追加。NURBSカーブを挿すことによって、入力カーブと同じ形状になるようにしました。
     あと、無駄にテキストの表示機能w
    locator_02.jpg
     今回のはMayaにサンプルでついてくるcvColorNode.cppを参考に(丸写し?)してます。
     あとは、NURBSカーブの入力を複数持てるようにしたいのですが、複数入力のデータの保持がうまくいかず挫折・・・またサンプル探しの旅に出るか・・・最終的にはポリゴンも挿せるようにしたいところですが、まだポリゴンの描画はやってないから、まだだいぶ後ですかね。

     ついでにロケータ用に、初めてアトリビュートエディタも作成(AETemplateね)。今までやったことなかったんで、最初大量にアトリビュートが出てきてビビりました。
     隠したいアトリビュートは
    // MEL - for AETemplate
    
    //Hide attribute from Attribute Editor.
    editorTemplate -suppress "attribute name";
    
    //
    
    で隠せるみたいなんですが、数が多すぎる。。。
     え~、超面倒臭い。と思って本家ロケータを見ると、どうやら AElocatorCommon $nodeName;でlocalPosition、localScaleの表示を、AElocatorInclude $nodeNameで、その他大勢を綺麗にまとめてくれるようです。これはありがたい。
     因みにAElocatorInclude $nodeNameは内部でAEgeometryShapeTemplateを呼んでるだけなんで、所謂ジオメトリ系(メッシュやサーフェースなど)を作った場合はこちらを使えば良さそうです。


     また、Mayaはアトリビュートエディタを初回開くと、それをキャッシュしてます。なので調整中の時に自作AETemplateのMELをソースし直しても反映されません。
     ちゃんと反映させたい場合は、ファイルをソース後
    // MEL
    refreshEditorTemplates;
    
    //
    
    を実行すればOK。ちゃんと更新してくれます。
     今更知りました・・・ryu先生、昔AE作成の時何度もMayaを再起動させてスイマセン。。。



     まだ未完成だけど、とりあえずロケータを投入!
    ginraiLocator001.jpg
     カスタムロケータは色や線の太さを自由に変えられるのがいいですネ。ってか何故標準でこう言う機能がついてないのでしょう。。。

    ginraiLocator002.jpg
     以前、MayaAPIの説明会かなんかで、APIを簡単に使えば簡単に独自のロケータを作れますヨ~! なんて紹介してましたが、個人的にはAPIじゃなくて普通にGUIから作成できればいいんですけどね。

     時間をみつけてもうちょっと拡張して行きたいところですが、MayaAPIって難しい・・・なかなか思うように作れないのがもどかしいです。
     勉強あるのみじゃぁ!!




    ginrai_20111109.jpg
    スポンサーサイト



    チャンネルボックスからいらないヒストリやシェイプを隠す

     セットアップやらなんやらをやってコントローラを作っていると、当然コントローラからリグを経由してノードを動かすことになるので、様々なノードがコントローラにくっつきますよね。
     で、コントローラを選択するとそのノードがチャンネルボックスから見えてしまって嫌ぁ~な感じになったりします。
    ihiA.jpg
     ↑の場合OUTPUTSにdecomposeMatrix3とか表示されてます。セットアップ的にも見た目ウザクて嫌だし、アニメータ的にも意味の無い表示なんで邪魔以外の何者でもないヤツです。



     そこで次のアトリビュートを使うと、なんとこいつをチャンネルボックスの表示から消すことができるそうです。
    setAttr ノード名.ihi 0;
    ihiB.jpg
     これでスッキリ!!
     他にもshapeノードの表示も消すことができるので、複数のshapeノードがいて邪魔くさい時なんかも重宝します。因みに元に戻すときは
    setAttr ノード名.ihi 2;
    です。デフォルトの値は1ではないので注意です。

     あと、当然ですが表示から消えてるだけであって、実体がなくなってるわけではないのでpickup walk等で普通に選択できます。まぁ流石にこれは仕方ないですネ。

    Maya2011 スクリプトアレコレ

     Maya2011になって色々挙動や書式が変わって戸惑中のEskeです。

     結構書き換えが頻繁に起こるので色々大変ですが、良くなってる部分も多いし、今後進歩する可能性はあっても昔に戻ることまず考えられないので、これからはMaya2011をベースにスクリプト作りしますかな。
     しかし、クライアントによってはまだ2009や2010のところも多いので、2011専用で作ったら下位互換が無いのがネックか・・・割り切るしかねぇっすな。

    ■fileDialog2

     従来の使い勝手の悪いFileDialog、Linuxでは使えなかったFileBrowserDialog、Maya標準スクリプトととして使われていたけど使い勝手が微妙な気がしたFileBrowserに代わり、fileDialog2と言うコマンドが追加されました!!
     今まではコールバックに文字列2つを受け取るグローバル関数を用意する必要があると言う、なんとも微妙な仕様だったのが、fileDialog2になってからは単純に選ばれたファイルが戻り値として返ってくるシンプルな仕様に変更されたため、非常に使い勝手がよくなってます!
    string $result[] = `fileDialog2
        -cap "Sample" -okc "Open"
        -fm 1
        -ff "Maya Binary(*.mb);;Images(*.tif *.tga *.psd *.iff)"
    `;
    FileFilterも従来の指定されたものしか指定できなかったものと違い、自分で好きなように拡張子のフィルタを付けることが出来るようになりました!
     これは素晴らしいアップデートだ。もうMaya2011以前には戻れん

    ■scriptJob

     こちらは-uidフラグの挙動が微妙に変わった模様。
     従来だと-pフラグと-uidフラグでダブルで親を指定しても問題なかったのですが、2011からは-pフラグが優先されるように仕様変更されったぽいです。
     今まで保険で-pと-uidで同じ親を指定してたのですが、2011からは-uidだけにしておかないと正常に動作しませんのでご注意。

    ■iconTextButton

     以前チラッと言いましたが、Linux同様ボタンを押してからやっぱ止めようと思ってボタンからカーソルを外して離してもキャンセル出来なくなりました・・・これからオラはどうすりゃいいんだ・・・?
     pngファイルが使えるようになったのはかなりgood!

    ■リサイズ

     paneLayoutやウィンドウのサイズを変更した時、子供の大きさ以下にはならないようになったポイです。
     以前作ったツールなんかも、子供の大きさを指定していない場合結構大きめにMayaが自動で作成していたため、paneLayoutでサイズ変えても一定以下には変わらなかったのは、子供の大きさが原因だったみたいです。



     その他、他にも気づいたことがあったような気がするんですが、忘れたんでまた思い出したときにでもメモっとこう。

    Maya2011 - toolBar・dockControlコマンド編

     前回の記事の後半でtoolBarとdockControlの紹介をしましたが、もう少しわかり易く説明するために、実際に運用してみました。

     toolBar・dockControlコマンドとは、自作ウィンドウをMayaのメインウィンドウへ取り込んでくれると言う、今まで散々苦労して自作のパネルを組み込んできたGUI改造房は自殺したくなるようなコマンドですorz

     さっそく実践・・・まずメインウィンドウに組み込む前に、自作ウィンドウを作成します。
    凝ったのを作るのは面倒なんで、とりあえずアウトライナーを量産します。
     作成されたアウトライナーにはそれぞれmyOutliner1~4と名づけています。
    {
        for( $i=1; $i<5; $i++ ){
            string $windowName = "myOutliner" + $i;
            if( `window -ex $windowName` )
                deleteUI $windowName;
            string $myOutliner = `window $windowName`;
            paneLayout;
            outlinerPanel;
            showWindow $myOutliner;
        }
    }


    outlinerBrothers.jpg
    アウトライナー4兄弟ができました。


     これに対し、まずtoolBarコマンドを適応してみましょう~
    {     string $area[] = {"top", "right", "bottom", "left"};
         for( $i=1; $i<5; $i++ ){
             string $myToolbar = "myToolbar" + $i;
             string $windowName = "myOutliner" + $i;
             toolBar -area $area[$i-1]
                 -content $windowName
                 -allowedArea "top"
                 -allowedArea "bottom"
                 -allowedArea "left"
                 -allowedArea "right"
             $myToolbar;
         }
     }
    

    outliner1.jpg
     先ほど作ったアウトライナーズを、toolBarコマンドにて上下左右に配置してみました。
     ・・・がなんだか潰れてしまってよくわからないっすね・・・ここら辺の調整は色々試さないとダメそうです。



     今度はdockControlを使 用してみましょう~
    {     string $area[] = {"top", "right", "bottom", "left"};
         for( $i=1; $i<5; $i++ ){
             string $myDock = "myDock" + $i;
             string $windowName = "myOutliner" + $i;
             dockControl -area $area[$i-1]
                 -content $windowName
                 -allowedArea "top"
                 -allowedArea "bottom"
                 -allowedArea "left"
                 -allowedArea "right"
             $myDock;
         }
     }
    

    outliner2.jpg
    こちらはちゃんと左右のアウトライナーが表示されてますね! 上下は何やら潰れてますが、それは高さが足りないからでしょう。

     dockControlの場合、位置はビューポートの上下左右のみしか配置できませんが、その代わりpaneLayoutのように境界線部分で自由にサイズ変更できます。
     サイズ変更したのがこちら↓
    outliner3.jpg
     アウトライナーに囲まれた生活・・・(*^Д^*)

     またdockControlをドラッグすることによって、セパレートできます。
    outliner4.jpg
     さらに、dockControlを同じ部位(この場合は下)にドラッグする事によって、タブ化されます。
    outliner5.jpg

     こんなんが標準機能になる日が来るとは・・・素晴らしい。
     これでさらにPyQTで細かいカスタマイズができると、夢が広がり過ぎて大変ですね~

    モディファイキー(ShiftとかCtrlとか)が押されてるかどうかを知る

     たとえばpSphere1を選択するスクリプトを作成したとします。
    global proc selectSphere()
    {
        select -r pSphere1;
    }
    
    {
        polySphere -r 1 -sx 20 -sy 20 -ax 0 1 0 -cuv 2 -ch 1;
    
        if( `window -ex sampleWindow` )
            deleteUI sampleWindow;
            string $win = `window -w 100 -h 80 sampleWindow`;
            columnLayout -adj true;
            button -l "Select Sphere" -c selectSphere;
            showWindow $win;
    }
    



     しかしこれだと選択はできますが、選択解除やトグル、選択追加などを行う場合別のボタンを作成する必要がでてしまいます。
    それはそれでいいのですが、Mayaの通常オペレーション同様




    Shift + クリック トグル選択
    Shift + Ctrl + クリック 追加選択
    Ctrl + クリック 選択解除td>

    の仕様にすればボタンひとつで様々なアクションを行えるようになり、画面の節約にもなります。
     そこで登場するのがgetModifiersコマンドになります。
     なんとこのコマンド、CtrlキーやShiftキー、Escキーなどのモディファイアボタンと呼ばれるボタンが押されているかどうかを判別する事ができます!
     Shiftが押されているならば1ビット(1)、Ctrlが押されているならば3ビット(4)、Altキーが押されていれば4ビット(8)といった具合です。因みにShit+Ctrlなら1+4で5が返ってきます。
    例えばAltキーを押さえながら
    getModifiers();
    とスクリプトエディタで実行すると結果は8になる・・・みたいな感じです。
    これを踏まえて上記スクリプトのselectSphere関数を次のように変更します。
    global proc selectSphere()
    {
        string $obj = "pSphere1";
        int $mod = getModifiers();
        switch( $mod ){
            case 1:    select -tgl $obj;    break;
            case 4:    select -d $obj;      break;
            case 5:    select -add $obj;   break;
            default:    select -r $obj;      break;
        }
    }
    


     これでMayaの選択操作と共通化できました\(^0^)/
    プロフィール

    Eske

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

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

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