さて実用的なGUIを作るには、いくつかのコントロールを習得する必要がある。
先日、会社で作ったスクリプトを作ったときに思ったのは数値を入力できるフィールドがあると便利がよいと思った。
変数に代入するための値を、GUIから入力するようにしたかったが、そのときは学習してまで制作する時間はなく、作ることができなかった。
フィールドといっても、いくつかの種類がある、扱う対象によって大別すると以下の二つになる。
1)数値
2)テキスト
テキストには、特殊な物として「Melスクリプト」など関係する「特殊テキスト系」がある。
まずオンラインヘルプのテクニカルドキュメント(MELコマンド)から「Field」と名前がつく物をリストしてみたところ全部で14種類ある。
自分の目的の物は、アトリビュートの浮動小数点数を入力することなので、「floatField」だけを調べればよいのだが、将来のためにも、ざっと見通し、自分にとってそれぞれがどれだけ有効なものかを見ておきたいと思う。
画像はオンラインヘルプの各コマンドにあるサンプルを実行し、キャプチャした物。
順番は、数値系、テキスト系、特殊テキスト系の順、特殊テキスト系項目は、使用頻度が低いと思われる物については後ろのほうにしています。
また、前知識として、名称に「Grp」とついているのは、スライダー、スクロール、ボタンといった基本機能が、複数組み合わせてあることを示している。
(注意)
以下の説明はヘルプにあるサンプル・スクリプトを実行し、その結果を観察してまとめただけです。出来る限り、ヘルプの内容をみながらちゃんとしたものにしているつもりですが、知識不足や見落としから事実と異なる可能性もあります。
特に、機能を制限するような記述については、そのまま信じるのではなく自分で真偽を確認してください。
----------------------------------------
<attrFieldGrp>(数値)
ラベルと2 ~3の 浮動小数点数フィールドが組になっている。
このフィールドは指定したベクトル アトリビュートにアタッチされ、一方が変更されると、他方も変更されます。
(例)attrFieldGrp -attribute nurbsSphere1.translate;
サンプルでは「-attribute」フラグが用いられていて、Nurbsスフィアのtranslateに接続されている。
フィールド内に数値を入力すれば即座に反映されてNurbsスフィアの位置が変わる。
このフラグは、フィールドに入力された数値を、ベクトル・アトリビュート(子が2~3つのdouble値アトリビュートからなる複合アトリビュート)に接続する。
----------------------------------------
<attrFieldSliderGrp>(数値)
(例)attrFieldSliderGrp -min -10.0 -max 10.0 -attribute nurbsSphere1.tx;
ラベル テキスト、floatフィールドとfloatスライダが一組になっている。
一つのアトリビュート値のみを扱う(?)。
サンプルでは、「-attribute」 「-min」 「-max」フラグが使われている。
NurbsスフィアのTranslateXに接続されており数値入力もしくはスライダーの移動をリアルタイムに反映する。
「-min」「-max」の設定はテキストフィールドにも有効で、そこで設定した値を超える数値を入力しても最大値(もしくは最小値)を超えることはない。
----------------------------------------
<floatField>(数値)
(例)floatField -minValue -1 -maxValue 1 -precision 4 -step .01;
これが自分の求める物で、浮動小数点数の入力フィールド。
サンプル・スクリプトでは、異なるフラグを用いた5つのバリエーションが、並べられている。
実際には、一つのコマンドで作られるのは一つのフィールドのみである。
サンプルのウインドウでは、上から
「flatFiled」コマンドのみ
「-editable」フラグをfalseにしたもの(トグルボタンなどと組み合わせて利用すると良い)
「-minValue」「-maxValue」を設定し「-value」でフィールドの値をゼロに設定してある。
「-precision」フラグで小数点以下の桁数を決めている。
(このサンプルでは2だが、0.00005と入力しても入力は出来た。入力の制限にはならないのか?)
「-step」フラグは、非表示スライダの増分値を設定する。このサンプルでは「.01」に設定。
非表示スライダについて:
Ctrl キー+MMB:
右方向にドラッグすると「-step」フラグで指定した増分だけ、フィールドの値が増加。
左方向にドラッグすると、同じ量だけ減少していきます。
またヘルプでは、「マウスの左ボタンでは 0.1 ずつ、右ボタンでは 10 ずつ増減します。 」となっていますが、実際には
左ボタンでは「-step」で設定した増分値x0.1ずつ、右ボタンでは増分値x10ずつ増減します。
「-attribute」フラグはないので、入力値の利用のしかたが今ひとつわからない。
「-changeCommand」:フィールドが変更されたときに実行されるコマンド
「-enterCommand」:キーパッドの「Enter」キーが押されたときに実行されるコマンド
を使うのだろうか?
----------------------------------------
<floatFieldGrp>;(数値)
(例)floatFieldGrp -numberOfFields 3 -label "Scale" -extraLabel "cm" -value1 0.3 -value2 0.5 -value3 0.1;
浮動小数点数のフィールドを1~4つ作成できる。
「-numberOfFields 」でフィールドの数を指定。
「-extraLabel」:フィールドの右側にラベルを作成できる。
これも同じく入力値の利用の仕方がわからない。
「-changeCommand」、「-enterCommand」といったフラグがあるのだが、それぞれのカラムに入力された物をどのように振り分けるのかという疑問もある。
----------------------------------------
<intField>(数値)
(例)intField -minValue -1000 -maxValue 1000 -step 10;
整数のフィールド。
サンプル・スクリプトでは、異なるフラグを用いた5つのバリエーションが、並べられている。
上から
「intField」コマンドのみを実行
「-editable」フラグを「false」に設定
「-minValue」「-maxValue」「-value」を設定
「-minValue」「-maxValue」「-step」を設定
----------------------------------------
<intFieldGrp>(数値)
(例)intFieldGrp -numberOfFields 3 -label "Scale" -extraLabel "cm" -value1 3 -value2 5 -value3 1;
整数のフィールドを1~4つ作成できる。
「-numberOfFields 」でフィールドの数を指定。
----------------------------------------
<textField>(テキスト)
このコマンドには「-label」フラグがないのかサンプルでは「text」コマンドを使ってフィールドの説明を表示してから、その横に「textFiled」で入力のためのフィールドを表示しています。
そのため二つのコントロールを並べる必要があるので、rowColumnLayoutを使用。
またtextFieldを再度使い、-editフラグで編集モードにして、-enterCommandフラグで「setFocus」コマンドを使用。
Enterが押されたときにフォーカスが次の行へ移るようにしています。
これがこのコマンドの一般的且つ、効果的な使い方なのかどうかは、わかりません。
なんか二度手間のように思えます。
また、今のところ、このコマンドの実用的な使い方が思いつきません。
(Webなどでは使えるでしょうが、Mayaでどうつかうのか?)
----------------------------------------
<textFieldButtonGrp>(テキスト)
(例)textFieldButtonGrp -label "Label" -text "Text" -buttonLabel "Button";
テキスト・フィールドにボタンを組み合わせている。
これには「-label」フラグがある。
ボタンはデフォルトで必ず表示される。
「-buttonLabel」を使わなければ名前のない小さなボタンが表示される。
「-enterCommand」は無いが、「-changeCommand」と「-buttonCommand」がある。
----------------------------------------
<textFieldGrp>(テキスト)
(例)textFieldGrp -label "Group 2" -text "Non-editable" -editable false;
ラベルとテキストの集合体。
名前からすると複数のtextFieldが組になっているのかと思ったが、サンプルではこのコマンドを二度利用して、二つのフィールドを作っているだけで、実際に作られるのは一つである。
見た目は「textField」と同じだが「-label」がつかえる。
「-enterCommand」は無いが、「-changeCommand」がある。
----------------------------------------
<scrollField>(テキスト)
(例)scrollField -wordWrap true -text "Editable with word wrap";
テキストを表示/入力できるフィールド
このサンプルでは4つの異なる設定を並べてある。上から
編集不可、自動改行付き。
編集不可、自動改行無し。(スクロールバーがつく)
編集可能、自動改行付き。
編集可能、自動改行無し。
自動改行される場合は、横方向のスクロールバーは不要なので表示されない。
自動改行無しでも、テキストがフィールド内におさまっていればスクロールバーは表示されない。
テキストがフィールド内に収まり切らなくなったときにスクロールバーが表示される。
----------------------------------------
<nameField>(テキスト:オブジェクト名のみ)
(例)nameField -object nurbsSphere1;
アトリビュート・エディターの一番上にあるノードの名前が表示されるフィールド。
「-object」フラグでdagオブジェクト名を指定すれば、常にそのオブジェクト名が表示される。
通常のアトリビュート・エディターの表示と同じように、
このフィールドから名前の変更ができる。
アトリビュート・エディターもしくは、チャンネルボックスから名前を変更すれば、ここへ反映される。
----------------------------------------
<cmdScrollFieldExecuter>(テキスト:Mel)
(例)cmdScrollFieldExecuter -width 200 -height 100;
スクリプト・エディタのインプットの部分に相当。ここからスクリプトを実行できる。
「-width」と「-height」はオンラインヘルプのフラグの説明には書かれていないが、ウインドウ内に表示されるテキストフィールドの範囲を示している。
このサイズはウインドウサイズには関連無く、固定されたサイズである。
またサイズを省略した場合は、非常に小さなフィールドが表示され、入力テキストがその範囲をこえたときのみ、スクロール・ハンドルが表示される。
----------------------------------------
<cmdScrollFieldReporter>(テキスト:Mel)
(例) cmdScrollFieldReporter -width 200 -height 100;
スクリプト・エディタのヒストリ部分に相当。
サンプルでは、実行したらスクリプト・エディタに現在表示されているヒストリが表示された。
----------------------------------------
<shellField>(テキスト:Mel)
ヘルプによると「このコマンドは、入力に対して UNIX シェルと同じ動作をするスクロール フィールドを作成します。」
DigitalMatrixによると「MEL のコマンドを打ち込んで実行できるシェルウインドウ 」
と説明されていますが、サンプルでは、Melコマンドを入力しても動作しませんでした。
今ひとつ使い道がわかりませんでした。
0 件のコメント:
コメントを投稿