スライダーを使った GUI

スライダー

スライダーには以下の種類があります。
int と float のスライダーの違いは整数値をとるか、実数値をとるかの違いだけです。
intSlider と floatSlider、floatSliderGrp と attrFieldSliderGrp は見かけ上はほとんど違いがありません。

intSlider
整数のスライダーです。
intSliderの画像
intSliderGrp
ラベル、整数値のフィールド、整数値のスライダーを組み合わせたものです。
intSliderGrpの画像
floatSlider
実数のスライダーです。
floatSliderの画像
floatSliderGrp
ラベル、実数値のフィールド、実数値のスライダーを組み合わせたものです。
floatSliderGrpの画像
attrFieldSliderGrp
ラベル、実数値のフィールド、実数値のスライダーを組み合わせたものでノードのアトリビュートに接続してリアルタイムに値を変更できます。
attrFieldSliderGrpの画像

スライダーの使い方

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

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

スライダーコマンドは上のように 2 度以上実行されるのが普通です。

スライダーの使用例

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

  1. 以下の MEL スクリプトを slider1.mel という名前で作ります。
    global proc makeSphere()
    {
    	float $val;
    
    	$val = `floatSliderGrp -q -value radiusSlider`;
    	sphere;
    	scale $val $val $val;
    }
    
    window -title "slider1";
    columnLayout;
    text -label "make Sphere";
    floatSliderGrp -label "Radius" -field true
    	-min 0.1 -max 20.0 -step 0.1 -value 1.0 radiusSlider;
    button -label "OK" -command "makeSphere()";
    showWindow;
    
  2. Script Editor の File → Source Script によって slider1.mel を読み込ます。
  3. 以下のようなウインドウが表示されます。
    slider1.melの実行結果
  4. スライダーの値を 2.0 にして OK ボタンを押すと XYZ 方向に 2 倍スケールされた NURBS の球が作られます。
    OKボタンを押した実行結果

スクリプトの解説

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 (コマンド途中の改行)

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

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

練習

まとめ

練習課題

参考


Prev | Next
Home | Contents
Mail