項目の選択(チェックボックス)
チェックボックス
いくつかの項目の中から、 1 つ以上の項目を選べるようにしたい場合は、チェックボックスを使用します。
チェックボックスも、
floatSliderGrp や intSliderGrp と同じように、
まずチェックボックスを作成し、
その後で現在のチェックボックスの状態を調べます。
チェックボックスの種類
- checkBox(チェックボックス)
- オンとオフができるコントロール
- checkBoxGrp
- 複数(1 〜 4)個のチェックボックスを横に並べたもの
チェックボックスの状態を調べる方法
チェックボックスに、チェックが入っているかどうかを調べるには、以下の方法があります。
- チェックボックスの名前を自分で決める場合
たとえば、以下のように実行すると、 “ラベル” というラベルのついた sampleCheckBox という名前のチェックボックスが作られます。
checkBox -label "ラベル" sampleCheckBox;
この sampleCheckBox という名前のチェックボックスに、
チェックが入っていたら何かコマンドを実行するには、以下のように実行します。
if(`checkBox -q -value sampleCheckBox`) ← アサインを使用していることに注意してください
{
チェックされている場合に実行したい MEL 文;
}
checkBox -q -value によってオンなら true、オフなら false が返されます。
- チェックボックスの名前をつけない場合
Maya によってつけられたチェックボックスの名前を、変数に代入して利用します。
string $checkButton1 = `checkBox -label "X"`;
これでチェックボックスの名前が $checkButton1 という変数に入ります。
このチェックボックスに、チェックが入っている場合に何かコマンドを実行するには、以下のように実行します。
if(`checkBox -q -value $checkButton1`)
{
チェックされている場合に実行したい MEL 文;
}
チェックボックスの使用例
チェックボックスにチェックをいれると、 X 方向にスケールされた球体を作る GUI を作ってみましょう。
以下は、チェックボックスにチェックが入っている時にだけ、 X 方向に 2.0 のスケールをかけるスクリプトです。
また、今回は、クリックするとウインドウを消去する 「閉じる」 ボタンをつけてみましょう。
- 以下の MEL スクリプトを checkBox1.mel という名前で作ります。
global proc makeSphere()
{
global string $checkBox1;
float $x = 1.0;
if(`checkBox -q -value $checkBox1`)
{
$x = 2.0;
}
sphere;
scale $x 1.0 1.0;
}
string $windowName = `window -title "チェックボックス 1"`;
columnLayout;
text -label "球体作成";
string $checkBox1 = `checkBox -label "スケールX"`;
button -label "作成" -command "makeSphere()";
button -label "閉じる" -command ("deleteUI " + $windowName);
showWindow;
- スクリプト エディタ の によって checkBox1.mel を読み込みます。
- 以下のようなウインドウが表示されます。
- そのまま X チェックボックスにチェックを入れないで、 作成 ボタンを押すと、スケールのかからない球体が作られます。
- X チェックボックスにチェックを入れて、 作成 ボタンを押すと、 X 方向に 2.0 のスケールのかかった球体が作られます。
スクリプトの解説
global proc makeSphere()
- makeSphere というプロシージャの宣言です。
このプロシージャが、 作成 ボタンを押した時に実行されます。
-
global string $checkBox1;
- チェックボックスの名前が入った外部変数 $checkBox1 の宣言です。
このプロシージャ(makeSphere)の外側で宣言された変数を、プロシージャ内で使用するときは global を変数宣言の前につけます。
float $x = 1.0;
- X 方向のスケール値を表す float 型の変数 $x を宣言し、初期値として 1.0 を代入しておきます。
チェックボックスにチェックが入っていなければ、この値で球体をスケールします。
if(`checkBox -q -value $checkBox1`)
- 名前が変数 $checkBox1 に入っているチェックボックスに、チェックが入っているかどうか調べています。
$x = 2.0;
- チェックボックスにチェックが入っていれば、$x に 2.0 を代入します。
sphere;
- NURBS の球体を作ります。
scale $x 1.0 1.0;
- X 方向に $x だけスケールをかけます。
string $windowName = `window -title "checkBox1"`;
- checkBox1 というタイトルのついた、ウインドウを作ります。
作られたウインドウの名前は、 $windowName という外部変数に代入されます。
columnLayout;
- 部品を縦 1 列に並べます。
text -label "球体作成";
- 球体作成 というテキストを表示します。
string $checkBox1 = `checkBox -label "スケールX"`;
- スケールX というラベルのついた、チェックボックスを作ります。
作られたチェックボックスの名前は、外部変数 $checkBox1 に代入されます。
button -label "作成" -command "makeSphere()";
- 作成 ボタンを作ります。
ボタンを押すと makeSphere() が実行されます。
button -label "閉じる" -command ("deleteUI " + $windowName);
- 閉じる ボタンを作ります。
ボタンを押すと、deleteUI コマンドによって、
外部変数 $windowName に入っている名前のウインドウ(自分自身)が消去されます。
ここで、
("deleteUI " + $windowName)
の部分が少し複雑なので解説します。
MEL コマンド中に ( ) で囲まれている部分があると、
この中の部分がコマンドを実行する前に処理されます。
ここでは、まず
"deleteUI " + $windowName
の変数部分が中に入っている文字列で置き換えられます。
"deleteUI " + ウインドウ名
(このウインドウ名の部分は実際には英数字の文字列です)
MEL では + の左右のどちらかが文字列である場合には、
左右を連結して 1 つの文字列にします。
"deleteUI ウインドウ名"
これらの処理が終わった後、button コマンド全体が実行されて、
-command フラグの右にある
deleteUI コマンドを含んだ文字列が、
ボタンが押されたとき実行されるコマンドとして登録されます。
(注意)
deleteUI の右にスペースが入っています。
このスペースが無いとエラーになるので注意してください。
showWindow;
- ウインドウを表示します。
練習
- 上の使用例を参考にして checkBox2.mel を作り、Y と Z 方向のチェックボックスを追加してください。
X と同じように Y, Z にチェックが入っている場合のみに、それぞれの方向に 2.0 のスケールがかかるようにしましょう。
- checkBox2.mel を参考に checkBox3.mel を作り、プリミティブのスケール値を、スライダによって変化させることができるようにしてみましょう。
スライダの最小値(-min)は 0.1、最大値(-max)は 10.0、ステップ値(-step)は 0.1、初期値(-value)は 1.0 にしておいてください。
checkBox3.mel の実行結果
X と Z のチェックボックスにチェックを入れ、スライダの値を 2.5 にして 作成 ボタンを押した結果
X と Z のスケール値のみに 2.5 のスケールがかかっています。
まとめ
- 複数の項目の中から、いくつかの項目を選ぶには checkBox を使用します。
- チェックボックスに、チェックが入っているかどうかを確かめるには、 -q -value フラグを使用します。
- ウインドウを消去するためには、 deleteUI コマンドを使用します。
練習課題
参考
Prev | Next
Home | Contents
Mail