ラベル GUI の投稿を表示しています。 すべての投稿を表示
ラベル GUI の投稿を表示しています。 すべての投稿を表示

2024年4月8日月曜日

menuItemコマンドに謎のフラグが追加されている

 maya2024がリリースされ見慣れない menuItemの挙動を発見しました。

 このインデントされたチェックボックス部分なのですが、親のチェックを操作すると子のチェックボックスも一括操作できるようなコントローラになっています。

2024年3月25日月曜日

シンMELの多言語対応

 以前紹介した MELの多言語対応 で使用していたのは、uiResコマンドと displayStringが羅列された .res.melファイルだったのですが、ふと、mayaのUIで日本語訳を調べるために .res.melファイルを検索してみたのですが、全くと言って良いほどヒットしなくなっていました。

 どうやら最近は、uiResコマンドや .res.melファイルではなく、setPluginResourceコマンドと .pres.melファイルを使用するように変わっているようです。

2020年7月27日月曜日

ダイアログ作成のサンプルコード

スクリプトを実行した状態から、ユーザーの判断を仰ぐような場合に使用する confirmDialog コマンドというのがあります。

2020年7月13日月曜日

formLayoutのTips

自作のツールを作るとき、ウィンドウへUIを載せるために、まず、レイアウトを作成しないといけません。
単純なものなら rowLayout や columnLayout、これらをくっつけたrowColumnLayout。

で、UIを正確に配置したいとなったときに使うのが formLayoutです。

2020年7月9日木曜日

windowの状態をリセットする。

mayaでは、ウィンドウを閉じるとき、windowsであれば、ドキュメント内のmayaVersion\prefs にあるwindowPrefs.melに左上隅の座標とウィンドウの縦横サイズを保存しています。
そんな、ウィンドウの位置をMELでリセットする方法。

2020年7月6日月曜日

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

最後に scriptedPanel について。
このコマンド自体はドッキングと関係ないのですが、いろいろ調べている時に目についたので、ついでに紹介してみようと思います。

2020年6月29日月曜日

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

workspaceControl コマンドを使って、ドッキングできるGUIを作成すると、メインウィンドウのどこにでもくっ付いてしまいます。
また、フローティングウィンドウにくっつけると、タブ化され、ウィンドウタイトルが無くなってしまうのも嫌な感じです。
やっぱ、自分のツールは自分の作ったウィンドウだけに収めたい感じです。

2020年6月25日木曜日

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

maya のパネル配置に workspace の機能が追加された頃から、メインウィンドウとドッキングさせるためのコマンドが大幅に変更されたようです。
toolBarコマンドは使い物にならなくなり、ドッキングさせるためのコマンド workspaceControlとscriptedPanelというコマンドが新たに追加されました。

2020年6月22日月曜日

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

それは禁じられた合体

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

2020年1月27日月曜日

メインメニューに自作のメニューを追加する

MELを大量に作成していくと、スクリプトをメニューから実行したくなってきます。
まぁ、シェルフとかに登録もできますけど、バージョンが変わったり、言語設定を変えたりと、数種類の maya を起動する場合、シェルフでは小回りが利きません。

ということで、メインメニューへ自作ツール用のメニューを追加してみようと思います。

2019年7月29日月曜日

自作ツールでGUIの状態をプリファレンスへ保存する※応用

前回は、[Close]ボタンで optionVar を実行するプロシージャを実行すようにしていましたが、ウィンドウを閉じる [X] ではプリファレンスに保存できていない状態となっていました。これをなんとかして回避したい!

今回はサンプルとして、こんなウィンドウを作ります。

プロシージャに飛ばすための[Close]ボタンを無くしました。
さらに checkBox では分かりにくいので intSlider で値の変化がしっかり保存されているかを確認し易くします。

2019年7月22日月曜日

自作ツールでGUIの状態をプリファレンスへ保存する※基本

自作のツールを作ると、checkBoxや~Fieldの値を次回起動時に復帰させたくなることがあります。
例として、こんなウィンドウを作ってみます。


この Flag の checkBox のオン・オフ状態を記憶させます。
そこで必要なコマンドが optionVar です。
このコマンドが mayaのプリファレンスファイルへ記録や読み出しを実行します。

2019年7月8日月曜日

uiTemplateを使ってみる

uiResを使用していると、ラベル用文字列を取得するためだけに結構な長さの文字数を使用することになります。
ラベルを設定できるコントローラ、特にスライダー系などでは大量のフラグが有るものばかりなので、同じコントローラを複数配置した場合、レイアウトの微調整をするときのカーソル移動とかが、かなり面倒になってしまいます。
例えば、こんなウィンドウの場合

2019年7月1日月曜日

パスの通っていない.res.melを読み込む

テストでスクリプトを組む時や、必要なスクリプトをフォルダーにまとめて配布する場合では MAYA_SCRIPT_PATH にスクリプトパスが登録されていない事があります。
そんな状況では .res.melが読み込まれていないことになってしまうので、メインのMELを source しても uiRes コマンドの部分でエラー停止してしまいます。
.res.melも source するようにすれば良いのですが、カタギさんには酷なはなしでしょう。
そんなシチュエーションを回避するためにも、メインスクリプト内に.res.melを読み込むコードを入れておくと良いかもしれません。

この記事のスクリプトのパスを調べるスクリプトを参考に、サンプルコードを書いてみます。

2019年6月24日月曜日

MELの多言語対応

ツールのGUIでラベルへの文字を付ける場合なんかは、ふつうアルファベットか日本語かの二者択一になってしまいます。
そんなラベルの文字を各言語へスムーズに切り替えられるようにするため uiRes というコマンドが MELにあります。

このコマンドを使うためには、.res.mel というラベル用の文字列を設定するコマンドが書かれたファイルを用意する必要があります。そのファイルの中で使用するコマンドが displayString で、uiResコマンドの引数と displayString の文字列識別子を同じにします。

まずは英語での作成から開始するとして、フォルダにはこんな感じで.melファイルを用意します。


uiResTest.mel には手っ取り早くメインメニューへメニューを追加するスクリプトを書いてみます。

2018年12月3日月曜日

リストをフィルタリングしたい

自作のツールを作るとき、リストを表示するレイアウトには treeView を良く利用しているのですが、大量にアイテムが並んでいたりすると項目を選ぶのに苦労します。
そんなこんなで、Outliner に付いている文字を入力したら表示物を絞れる機能を付けたいなぁと思ってしまうのでした。

Outliner に付いているってのは、こんなヤツです。


2016年5月24日火曜日

window作成のための雛形

ツール用のウィンドウを作成する時の雛形。

毎回似た感じになるのに、_buildWindow()の引数やdeleteUIの位置とかで悩むため、
汎用性のこともちょっとを考えて作成。

proc _setupMainLayout(
    string $parent )
{
    setParent $parent;
    
    //------------------------------------------------------------------------------
    // コントローラの追加・編集はここから
    columnLayout;
        button;
        button;
        button;
    
}


proc _setupWindow(
    string $window )
{
    if(`window -q -mb $window`)
    {
        string $menu0=`menu -l "File"`;
        string $menu1=`menu -l "Edit"`;
        string $help =`menu -l "Help" -hm true`;
        
    }
    
    int $w=320;
    int $h=160;
    //------------------------------------------------------------------------------
    string $mainForm=`formLayout`;
        string $mainLayout=`scrollLayout -w $w -h $h`;/** 希望のlayoutに変更 **/
    
    formLayout -e
        -af $mainLayout "top" 0
        -af $mainLayout "left" 0
        -af $mainLayout "right" 0
        -af $mainLayout "bottom" 0
        $mainForm;
    
    //------------------------------------------------------------------------------
    _setupMainLayout( $mainLayout );
    
    //------------------------------------------------------------------------------
    window -e -w $w -h $h $window;
    
}


proc _createWindow(
    string $toolName,
    string $window )
{
    string $title=`interToUI $toolName`;
    
    window
        -title $title
        //-toolbox true
        //-menuBar true
        //-sizeable false
        $window;
    
}


proc _buildToolWindow(
    string $toolName,
    string $window )
{
    if(`window -ex $window`)
    {
        deleteUI $window;/** for debug. **/
        //return;
        
    }
    
    _createWindow( $toolName,$window );
    _setupWindow( $window );
    
    //------------------------------------------------------------------------------
    // 必要ならジョブの追加
    //scriptJob -e "event" "script" -p $window;
    
}


global proc sampleUI()
{
    string $toolName="sampleUI";/** スクリプト名推奨 **/
    string $window=($toolName+"Window");
    
    _buildToolWindow( $toolName,$window );
    
    showWindow $window;
    
}



まず、88行目で$toolNameをスクリプト名に変更。


71行目はデバッグ中スクリプトがエラー停止し、次回実行時に

    Object's name 'sampleUIWindow' is not unique.

みたいなのを出さないようにするためのもの。
リリースする時はコメントアウトして、return;だけに変更。


81行目にwindowにアタッチしたいジョブを追加。
コレの位置が92行に追加するか迷う部分。
main procedureを簡素にするため_buildToolWindow()の中へ追加していくことに。


55行目からのwindowコマンドは使うオプションのみコメント外して使う。
-toolbox,-menuBar,-sizeable だいたいこの3つしか使っていない気がする。


window に menu を追加した場合、20行目のブロック内に menuItem を追加するプロシージャ追加。

31行目の layout の子にUIを追加していく。
buttonだけとかなら、ここで指定したwidth,height以下に window は小さくならないはず。


で、_setupMainLayout()が本体。



結構いじる場所が分散してしまった。