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