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