MaxScriptの勉強 その3 UIを作る

引き続きMaxScriptの勉強。

UIを作るときは、 MaxScript > Visual MAXScriptを使うと GUIで、手軽にUIを作成することができる。
ただ、UIがおおかったりする場合は、手で書いたほうが早いのかもしれない。

Rolloutを作る
melでいうところのLayoutのようなもの(だと解釈)
この中に、Widgetや Eventコマンドなどを記述する。

rollout <rolloutName> “rolloutTitle” width:val height:val
(
<widget>
<EventCommand>
)
<widget> 部分には、 Button や Label editText のようなWidgetを記述してRollout上に配置する。
例はbuttonだが、基本どのwidgetも引数は同じ。

button <widgetName> <Caption> pos:[x,y] width:val height:val

widgetNameは、値をSetしたりGetしたりするときに使用するWidgetの名前。
Captionは、見出し posは配置する座標 widget height は widget自体の大きさを設定する。

<eventCommand>は、押した時 値が変わった時 などに実行されるコマンドを記述する。

例として、checkboxが変わった時の書き方
on <objectName> changed <state> do ( command)

<objectName> は、イベントを指定したいWidgetの名前

<state> は、イベントの返り値(changedの場合は、checkButtonのOn Offが Boolで帰ってくる)
イベントの種類は、各Widgetごとに異なるので、 Visual MAXScriptのEventタブで対応しているものを確認する。
または、VisualMaxScriptでも EventScriptは記述できる。

Windowを作る

 UI = newRolloutFloater “<windowTitle>” width:val height:val

を実行すると、widthとheightで指定した大きさの 空のUIが作成される。
そこに rollout(mayaで言うところのLayout?)を配置する。

addRollout <rolloutName> <uiName>

uiName は、Rolloutを載せたいWindowを指定
<rolloutName> は、予め設定しておいたRolloutの名前を入れる。

<rolloutName> 含めて、Widgetの名前は重複できないので かならずかぶらない名前をそれぞれ指定する。

Widgetの値を取得・設定する

Widgetの値を取ってきたい場合は、アトリビュートへの値のセット同様に

<rolloutName>.<widgetName>.<attribute>  =  val
のようにする。
Eventを書くときは
<widgetName>.<attibute> = val
値を取得したい場合は、 = の左右が逆になる。

(maxscriptの場合、何かの値にアクセスする場合、フォルダの階層をたどるように . で、取得したいAttributeにアクセスしにいく。
eventは rolloutを記述している階層からになるので <widget>.<attribute> その外側からだと、 階層がひとつ上がるので <rolloutName>.<widget>.<attribute>に。
. を 「~の中にある」 と言い換えるとわかりやすいのかも。) 

記述的には、melよりはるかに楽でわかりやすいけど デフォルトで使えるwidgetの数があんまりないのが玉に瑕。

例) ファイルを選択して editTextにセットする セットされた値を取得して、Labelに表示するSample。

getSaveFileName が、Dialogを表示してSaveフォルダとファイル名を設定して返すコマンド、 types: ~ で、保存できる形式を限定。
substituteString は、正規表現を使用して文字列を置換する。
getSaveFileName の戻り値は C:abcd.bat のように で帰ってきてしまうのでプログラム的に都合が悪いので / に変換。
VisualMAXScriptも、はじめは使いにくいと思ったけど、なれるとサクサクUI作れるのが良いね。

コメントを残す

メールアドレスが公開されることはありません。

*