スライダを使った GUI

スライダ

スライダによって、オブジェクトのアトリビュート値や各種のパラメータを設定・変更するのが、 視覚的な方法で便利に行えるようになります。
スライダには、以下の種類があります。

intSlider
整数のスライダです。
[intSliderの画像]
intSliderGrp
ラベル、整数値のフィールド、整数値のスライダを組み合わせたものです。
[intSliderGrpの画像]
floatSlider
実数のスライダです。
[floatSliderの画像]
floatSliderGrp
ラベル、実数値のフィールド、実数値のスライダを組み合わせたものです。
[floatSliderGrpの画像]
floatSlider2
2 つのハンドルを持っていて、片方の値が、必ずもう一方より大きい値になります。
[floatSlider2の画像]
floatSliderButtonGrp
ボタンとシンボルボタンを持つスライダです。
[floatSliderButtonGrpの画像]
attrFieldSliderGrp
ラベル、実数値のフィールド、実数値のスライダを組み合わせたもので、ノードのアトリビュートに接続してリアルタイムに値を変更できます。
[attrFieldSliderGrpの画像]

intfloat のスライダの違いは整数値をとるか、実数値をとるかの違いだけです。
intSliderfloatSliderfloatSliderGrpattrFieldSliderGrp は見かけ上はほとんど違いがありません。
floatSlider2attrFieldSliderGrp は、オブジェクトを作成後に、アトリビュートをリアルタイムに変更するために使用されます。 その他のスライダは、オブジェクトを作成する前に、アトリビュート値を決定するために使用されます。

スライダの使い方

スライダはボタンのようにコントロール(ウインドウの部品)の一種ですが、 ボタンと違って少し使い方が複雑です。
ここでは、floatSliderGrp を使って説明します。
スライダを使用する時は、以下の手順で実行します。

  1. スライダの作成
    ボタンと同じように、レイアウトコマンドの後でスライダコマンドを実行して、スライダを作ります。
    floatSliderGrp -label "ラベル" -field true -min 最小値 -max 最大値 -step 増分 -value 初期値 スライダ名;
  2. スライダの値を取得
    現在のスライダの値を得るためには、 もう一度スライダコマンドを実行します。
    floatSliderGrp -q -value スライダ名;

intSliderGrp も、同様な手順で作成します。

スライダの使用例

floatSliderGrp を使ってみましょう。
以下のスクリプトは、スライダで指定された半径の球体を作るものです。
作成 ボタンを押すと、指定された半径の球体が 1 つ作られます。

  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;
    
  2. スクリプト エディタ の ファイル → ソーススクリプト によって slider1.mel を読み込ます。
  3. 以下のようなウインドウが表示されます。
    [slider1.melの実行結果]
  4. スライダの値を 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 (コマンド途中の改行)

長いコマンドは途中のスペースの部分で改行してかまいません。
ただし、文字列(" から " の間)の途中で改行することはできません。

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 の例]

練習

まとめ

練習課題

課題ボタンは先生の指示にしたがって表示してください。
授業終了後に課題ボタンの表示が消えることがあるので注意してください。
全クラスの授業が終了するとボタンが表示されたままになります。

参考


Prev | Next
Home | Contents
Mail