スライダを使った GUI
スライダ
スライダによって、オブジェクトのアトリビュート値や各種のパラメータを設定・変更するのが、
視覚的な方法で便利に行えるようになります。
スライダには、以下の種類があります。
- intSlider
- 整数のスライダです。
- intSliderGrp
- ラベル、整数値のフィールド、整数値のスライダを組み合わせたものです。
- floatSlider
- 実数のスライダです。
- floatSliderGrp
- ラベル、実数値のフィールド、実数値のスライダを組み合わせたものです。
- floatSlider2
- 2 つのハンドルを持っていて、片方の値が、必ずもう一方より大きい値になります。
- floatSliderButtonGrp
- ボタンとシンボルボタンを持つスライダです。
- attrFieldSliderGrp
- ラベル、実数値のフィールド、実数値のスライダを組み合わせたもので、ノードのアトリビュートに接続してリアルタイムに値を変更できます。
int と float のスライダの違いは整数値をとるか、実数値をとるかの違いだけです。
intSlider と floatSlider、floatSliderGrp と
attrFieldSliderGrp は見かけ上はほとんど違いがありません。
floatSlider2 と
attrFieldSliderGrp は、オブジェクトを作成後に、アトリビュートをリアルタイムに変更するために使用されます。
その他のスライダは、オブジェクトを作成する前に、アトリビュート値を決定するために使用されます。
スライダの使い方
スライダはボタンのようにコントロール(ウインドウの部品)の一種ですが、
ボタンと違って少し使い方が複雑です。
ここでは、floatSliderGrp を使って説明します。
スライダを使用する時は、以下の手順で実行します。
- スライダの作成
ボタンと同じように、レイアウトコマンドの後でスライダコマンドを実行して、スライダを作ります。
floatSliderGrp -label "ラベル" -field true
-min 最小値 -max 最大値 -step 増分 -value 初期値 スライダ名;
- スライダの値を取得
現在のスライダの値を得るためには、
もう一度スライダコマンドを実行します。
floatSliderGrp -q -value スライダ名;
intSliderGrp も、同様な手順で作成します。
スライダの使用例
floatSliderGrp を使ってみましょう。
以下のスクリプトは、スライダで指定された半径の球体を作るものです。
作成 ボタンを押すと、指定された半径の球体が 1 つ作られます。
- 以下の MEL スクリプトを slider1.mel という名前で作ります。
global proc makeSphere()
{
float $val;
$val = `floatSliderGrp -q -value radiusSlider`;
sphere;
scale $val $val $val;
}
window -title "スライダ 1";
columnLayout;
text -label "球体を作成";
floatSliderGrp -label "半径" -field true
-min 0.1 -max 20.0 -step 0.1 -value 1.0 radiusSlider;
button -label "作成" -command "makeSphere()";
showWindow;
- スクリプト エディタ の
によって slider1.mel を読み込ます。
- 以下のようなウインドウが表示されます。
- スライダの値を 2.0 にして 作成 ボタンを押すと、
スケールX, スケールY, スケールZ の値が 2.0 の NURBS 球体が作られます。
スクリプトの解説
-
global porc makeSphere()
- makeSphere という名前のプロシージャの宣言です。
-
float $val;
- float の変数 $val の宣言です。
-
$val = `floatSliderGrp -q -value radiusSlider`;
- radiusSlider という名前のスライダから現在の値を得て
アサインによって変数 $val に代入します。
-q -value というフラグによってスライダの値を得ることができます。
-
sphere;
- NURBS の球体を作ります。
-
scale $val $val $val;
- $val の値で X, Y, Z 方向にスケールをかけます。
-
window -title "slider1";
- slider1 というタイトルのついたウインドウを作ります。
-
columnLayout;
- GUI 部品を縦に並べるレイアウトコマンドです。
-
text -label "球体を作成";
- text コマンドによって、ウインドウ内にテキストを表示します。
-label を忘れないようにしてください。
-
floatSliderGrp -label "半径" -field true
-
-min 0.1 -max 20.0 -step 0.1 -value 1.0 radiusSlider;
- radiusSlider という名前の floatSliderGrp を作ります。
ここでは、 1 つのコマンドが 2 行にわたって書いてあります。
このように、 長いコマンドを書く時には、読みやすくするために適当な箇所で改行してください。
改行を入れる場所については、Tips を参照してください。
floatSliderGrp の各フラグの意味は以下の通りです。
- -label "半径"
- 左側に表示されるラベルです。
- -field true
- フィールドを表示するかどうかを決めます。
true だとフィールドを表示します。
false だとフィールドの部分が表示されません。
- -min 0.1
- スライダの最小値です。
スライダを、一番左にスライドさせた時の値です。
- -max 20.0
- スライダの最大値です。
スライダを、一番右にスライドさせた時の値です。
- -step 0.1
- スライダの増分値です。
スライダの地の部分でマウスを 1 回クリックした時に増減する値のことです。
- -value 1.0
- スライダ・フィールドの初期値です。
スライダが表示された時の最初の値です。
- radiusSlider
- この floatSliderGrp の名前です。
後でスライダから値を得る時に使用します。
名前を指定しないとデフォールトの名前(floatSlider1 など)がつきます。
-
button -label "作成 " -command "makeSphere()";
- 押すと makeSphere() が実行される、作成 というラベルのついたボタンを作ります。
-
showWindow;
- ウインドウを表示します。
Tips (コマンド途中の改行)
長いコマンドは途中のスペースの部分で改行してかまいません。
ただし、文字列(" から " の間)の途中で改行することはできません。
- 正しい例
button -label "作成 "
-command "sphere; cone";
button -label
"作成"
-command
"torus; cylinder";
- 間違った例
button -label "作成" -command "sphere;
cone";
もし、どうしても上のように文字列の途中で改行したい場合は、
行末に \ (バックスラッシュ)を加えてください。
(バックスラッシュは、日本語キーボードの ¥ キーにあたります)
button -label "作成" -command "sphere;\
cone";
Tips (attrFieldSliderGrp の例)
オブジェクトの スケールX をスライダでコントロールするスクリプトです。
シーンに NURBS の球体を 1 個作ってから、以下のスクリプトを実行してみてください。
球体の スケールX アトリビュートが、スライダの値によってリアルタイムに変更されます。
NURBS の球体は nurbsSphere1 という名前だとします。
window -title "attrFieldSliderGrp";
columnLayout;
text -label "球体のスケール値";
attrFieldSliderGrp -label "スケール X"
-min 0.1 -max 20.0 -at nurbsSphere1.sx;
showWindow;
- attrFieldSliderGrp についての解説。
- -label "スケール X"
- 左側に表示されるラベル
省略するとアトリビュートの名前になります。
- -min
- スライダの最小値
- -max
- スライダの最大値
- -at nurbsSphere1.sx
- どのアトリビュートをコントロールするかを決めます。
ここでは nurbsSphere1 の sx アトリビュートを attrFieldSliderGrp によってコントロールします。
attrFieldSliderGrp には -value フラグはありません。
練習
- 上の slider1.mel を参考にして slider2.mel を作り、X 方向のスケール値だけを変更できるようにしてみましょう。
slider2.mel を読み込んで実行した直後のウインドウ
スライダの値を 2.0 にして 作成 ボタンを押した結果
- slider2.mel を参考にして slider3.mel を作り、X、Y、Z 方向のスケール値を別々に変更できるようにしてみましょう。
slider3.mel を読み込んで実行した直後のウインドウ
スライダにおける スケールX の値を 2.0、スケールY の値を 3.0、スケールZ の値を 4.0 にして 作成 ボタンを押した結果
まとめ
- floatSliderGrp と intSliderGrp は、作成時および値を得る場合に、コマンドを実行する必要があります。
- floatSliderGrp と intSliderGrp で、スライダから値を得るには -q -value フラグを使用します。
- attrFieldSliderGrp によって、オブジェクトのアトリビュートを直接コントロールできます。
練習課題
課題ボタンは先生の指示にしたがって表示してください。
授業終了後に課題ボタンの表示が消えることがあるので注意してください。
全クラスの授業が終了するとボタンが表示されたままになります。
参考
Prev | Next
Home | Contents
Mail