2020年6月22日月曜日

自作ツールをドッキングさせる。その1

それは禁じられた合体

昔は formLayoutなんかを使って、直接 mayaと合体させていましたが、GUIにQt が採用された maya2011 頃、自作のGUIをmayaのメインウィンドウへドッキングさせるコマンドが追加されました。
あれから10年、このときに追加されたコマンドの存在意義が無くなってしまったようです。

maya2011で追加されたコマンドは2つ
  • toolBar
  • dockControl
コマンドリストにはサンプルコードも載っていますが、挙動が昔と変わってきているようです。
特に toolBar は、ドッキングさせられる位置が狭まり、かつフローティングが出来なくなっています。

MELのサンプルコード
{
    string $myWindow =`window`;
    string $buttonForm =`formLayout -parent $myWindow`;
    button -parent $buttonForm;
    toolBar -area "top"
        -content $myWindow
        -allowedArea "top"
        -allowedArea "left"
        -allowedArea "right"
        -allowedArea "bottom";
    
}

フローティングさせようとしても、元に戻ってしまいます。
右クリックするとチェックボックスがポップアップしますが、チェックを外すと、どこかに消えてしまい、復元できません・・・。

この toolBarコマンドが使い物にならなくなったのは、たぶんUIが大幅に変更された maya2017なんじゃないかと思います。
エディターのほぼ全てがメインウィンドウにドッキング可能になり、新たなコマンド workspaceControlというコマンドが追加されました。
プロジェクト設定の workspaceと混同するので紛らわしいですが、メインメニュー Windows > Workspaces に合わせた名称なんだと思います。

ただ、各エディタを作成しているメインのコマンドは workspaceControlではなく scriptedPanelというコマンドだというのが、ややこしいところ・・・。


今回は軽めに、ちょっとした豆知識。
初期状態では、ChannelBox, AttributeEditor, ModelingToolKit, HumanIkなんかはメインウィンドウの右側にタブ化されています。

タブをクリックすれば折りたため、ドラッグすれば簡単にフローティングウィンドウに出来たり、横に並べられたりもして便利です。
まぁ、意図せずメインパネルにくっ付くのが鬱陶しいから、Windows > Workspaces > Disable Docking/Undocking にチェックを入れて無効化している人も居るかもしれません。

で、あまりやろうとは考えないと思いますが、このタブを右クリックします。
するとポップアップメニューが出てきます。

このTab Directionを変更すると、表示されるタブの位置が変わります。

別にどうなるわけでもないですが、知らない人はビックリするかも。

こんな挙動があるからなのか、tabLayoutにも -tabPosition(tp)というフラグが追加されました。maya2016には無かったフラグです。

サンプルMEL
{
    window -widthHeight 200 150;
    string $form =`formLayout`;
    string $tabs =`tabLayout -innerMarginWidth 5 -innerMarginHeight 5`;
    formLayout -edit
        -attachForm $tabs "top"    0
        -attachForm $tabs "left"   0
        -attachForm $tabs "bottom" 0
        -attachForm $tabs "right"  0
        $form;
    
        string $child1 = `rowColumnLayout -numberOfColumns 2`;
            button; button; button;
            setParent ..;
    
        string $child2 = `rowColumnLayout -numberOfColumns 2`;
            button; button; button;
            setParent ..;
    
        tabLayout -edit
            -tabPosition "west"
            -tabLabel $child1 "One" -tabLabel $child2 "Two"
            $tabs;
    
    showWindow;
    
}

位置はマーキングメニューに合わせたのか、north, east, westで指定しないといけないのが間違え易い部分です。top,left,rightでもなくN,E,Wでもない。
southが無いのは、そうのうち分かるかも。

0 件のコメント:

コメントを投稿