日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2010年1月3日日曜日

その他のコントロール(1): floatスライダ

さて、ウィンドウに使うコントロールの話に戻ります。
このブログで今までに扱ったコントロールは「button」と「floatField」の二つです。

「button」に関するエントリ
ウインドウの作成(2): ボタン

「flatField」に関するエントリ
Fieldコントロール(1): 種類
Fieldコントロール(2):floatField(1)
Fieldコントロール(3):floatField(2)
Fieldコントロール(4):floatField(3)


これで、アトリビュート値を設定することがえきるウインドウを作成することは可能ですが、使いやすさから言うとまだまだです。

これからウインドウをさらに使いやすくするためのその他のコントロールを見ていきます。
とりあえずの予定は、スライダ、チェックボックス、ラジオボタン、メニュー。
レイアウトやグループ、タブなどに関しては今のところ未定です。

今回はスライダです。


----------------------------------------
Maya2009のオンラインヘルプからMelコマンドの一覧を見ると、名前に「Slider」が含まれるコントロールは、全部で12種類あります。

内訳は、
カラー系、4つ(attrColorSliderGrp, colorIndexSliderGrp, colorSliderButtonGrp, colorSliderGrp)
整数系、2つ (intSlider, intSliderGrp)
浮動小数点数系、4つ (floatSlider, floatSliderGrp, floatSlider2, floatSliderButtonGrp)
HUD系2つ(hudSlider, hudSliderButton)

です。

各スライダについては、DigitalMatrixの「スライダを使った GUI」に実際のスライダ画像が一部掲載されており、それぞれのコマンドがどのようなものかがわかりやすくなっています。


カラー系、HUD系は用途が限られているので今回は検証しません。


自分の場合は、整数か浮動小数点数のスライダが一番用途が高いと考えられます。

「int」,「float」のスライダに注目すると、それぞれコントロール要素の組み合わせによりいくつかの種類があります。
●スライダのみ
●ラベル+フィールド+スライダ
●ラベル+フィールド+スライダ+ボタン(floatSilderButtonGropのみ)

この中で、一番使いやすいと思われるものは、
「ラベル+フィールド+スライダ」なので、まず「floatSliderGrp」から検証していきます。



----------------------------------------
(1)floatSliderGrp

浮動小数点数を設定するためのスライダ・グループで、ラベル、フィールド、スライダを表示することが出来ます。

主体となっているのはスライダで、スライダを非表示にすることはできません。
フィールドは、「-field true」にしてなければ、表示されません。
ラベルは「-label name」でラベル名をフラグで指定していなければ表示されません。

まず、このコマンドを試してみます。
比較のために「floatSliderGrp」コマンドの後に、「floatSlider」コマンドを実行しています。

{
window name;
columnLayout;

floatSliderGrp;

floatSlider;

showWindow;

}

(図:上のスライダがfloatSLiderGrp,下がfloatSlider)

このように「floatSliderGrp」でフラグを用いないと、「floatSlider」と同じ(スライダのみ)です。


次に、それぞれのフラグを使ったケースを試します。

<-label フラグを使用する。
必ず引数である「テキスト(名前)」が必要です。
引数がなければエラーになります。
// Error: Flag '-label' expects 1 argument(s). //

{
window name;
columnLayout;

floatSliderGrp -label scale;

showWindow;
}
(図:-labelフラグを使用すればラベルが表示されます)



<-field フラグを使用する。>
必ず引数「True」が必要です。
引数がなければエラーになります。
// Error: Flag '-field' expects 1 argument(s). //

引数に「False」を使う事も出来ますが、結果は-filedフラグを使わない場合と同じなので意味が無いでしょう。

{
window name;
columnLayout;

floatSliderGrp -field true;
showWindow;
}

(図:-fieldフラグを使用するとフィールドが表示されます)


<-query と -value フラグ>
このスライダで設定した値を取得するにはこの二つのフラグを使います。

変数=`floatSliderGrp -query -value sliderName`;

では、これらを使って、ポリゴン・プレーンのスケールを設定できるウインドウを作成します。
要点は、
1)ポリゴン・プレーンを作成する部分はプロシージャにする。
2)floatSliderGrpの設定値(スケール値)を-queryにより取得する。
3)buttonコマンドでポリゴンプレーンを作成する。


{
global proc makePlane()
{
float $a;

$a = `floatSliderGrp -query -value scaleSlider`;

polyPlane;
scale $a $a $a;
}

window name;
columnLayout;

floatSliderGrp -label scale -field true scaleSlider;

button -label Create -command "makePlane()";

showWindow;

}

これでプレーンを作成することが出来ますが、スケールが「0」でも作成されてしまいます。

スケール値が「0」の場合は避け、大きすぎるプレーンの設定を避けるために値の範囲を限定します。
-minValue フラグ:最小値の設定(float値)
-maxValue フラグ:最大値の設定(float値)
-value フラグ :初期値の設定(float値)

これを取り入れたスクリプトは以下のようになります。
{
global proc makePlane()
{
float $a;

$a = `floatSliderGrp -query -value scaleSlider`;
polyPlane;
scale $a $a $a;
}

window name;
columnLayout;

floatSliderGrp -minValue 0.1 -maxValue 20 -value 0.1
          -label scale -field true scaleSlider;

button -label Create -command "makePlane()";

showWindow;
}

ちなみに-valueフラグを使わない場合、デフォルトで「0」になるようです。
しかしながら-queryで取得される値は最小値に設定されている「0.1」です。
このスクリプトでの実際の動作はボタンを押した瞬間に値が「0.1」に変わります。



----------------------------------------
(2)floatSliderButtonGrp

このコマンドでは「floatSliderGrp」に加えてボタンが使用できます。
上記のスクリプトのようにスライダで設定する値が一つだけなら、buttonコマンドを使わずともこれひとつでボタンの機能を持たせることが出来ます。

使用できるボタンは「通常のボタン」とイメージを使った「シンボル(記号)ボタン」です。
両方のボタンを一度に使用することが出来ます。

「シンボルボタン」は今のところ使用する予定がないので簡単にみるだけにしておきます。
-symbolButtonDisplay:下記フラグをTrueに設定して可視にします。
シンボルボタンを使用しない場合はこのフラグを使用しないか、「false」に設定します。
-image:シンボルボタンに表示されるイメージを指定する(例:-image "cmdWndIcon.xpm")

通常のbuttonコマンドのようにラベル、コマンドフラグがあります。
-buttonLabel
-buttonCommand
その他のフラグ「-label, -fieldなど」については、floatSliderGrpコマンドと同じです。


では、このコマンドを先ほどのスクリプトで使用してみます。
{
global proc makePlane()
{
float $a;
$a = `floatSliderButtonGrp -query -value scaleSlider`;
polyPlane;
scale $a $a $a;
}

window name;
columnLayout;

floatSliderButtonGrp -minValue 0.1 -maxValue 20 -value 0.1 -label scale
-field true -buttonLabel Create -buttonCommand "makePlane()" scaleSlider;

showWindow;
}


(図:flatSliderButtonGrpを使ったスライダ)

ちゃんと機能しますが、個人的にはbuttonコマンドを使ったほうが、わかりやすいかなと思います。


----------------------------------------
まとめ
----------------------------------------
●「intSliderGrp」もしくは「floatSliderGrp」を使えばほとんどのことは出来る。

●「flatSliderButtonGrp」を使うより「floatSliderGrp」+「button」のほうがスクリプトが見やすい。

●上記コマンドは、フラグによって「ラベル」、「フィールド」は表示/非表示が切り替えられる。

●値「0」などの使用を制限したいときには、-minValue, -maxValueフラグを使う。

 

0 件のコメント:

コメントを投稿