rollout roDemo "Demo" width:240( -- 定義: 種類 変数名 "ラベル" パラメータ... listbox lbx "リスト:" items:#("A", "B", "C") height:5 -- イベント: on 変数名 イベント 引数 do on lbx selected i do format "% 番目: %\n" i lbx.items[i])createDialog roDemoroDemo.lbx.selection = 2 -- rollout の外からは「rollout名.コントロール名.プロパティ」roDemo.lbx.enabled = false -- 無効化(グレーアウト)
共通パラメータ(定義時)
意味
width: / height:
大きさ(px)。listbox などの height: は 行数
align:#left#center#right
横位置(既定は #center)
offset:[x,y]
自動配置の位置からのずらし
across:N
以降の N 個を横並びにする
pos:[x,y]
絶対座標。自動配置を無視 するので、他と混ぜると重なりやすい
enabled:false
最初から無効にしておく
tooltip:"..."
マウスオーバーの説明(button など)
共通プロパティ(実行時)
意味
.enabled
有効 / 無効
.visible
表示 / 非表示
.caption
ラベル文字列
.pos / .width / .height
位置と大きさ
以降のスニペットは、特記がない限り rollout 定義の中に置く 前提です(on ... do は rollout の中でしか書けません)。
listbox(単一選択リスト)
rollout roList "listbox" width:220( listbox lbx "ジオメトリ:" items:#() height:10 button btnRefresh "更新" across:2 button btnSelect "選択" local nodes = #() -- 表示名とノードを同じ並びで持つ(items は文字列しか入らないため) fn refresh = ( nodes = geometry as array lbx.items = for o in nodes collect o.name ) on roList open do refresh() on btnRefresh pressed do refresh() on lbx selected i do format "選択: %\n" lbx.items[i] -- クリックで発火(i はインデックス) on lbx doubleClicked i do select nodes[i] -- ダブルクリック on btnSelect pressed do if lbx.selection > 0 do select nodes[lbx.selection] -- 0 = 未選択)createDialog roList
rollout roMulti "multilistbox" width:220( multilistbox mlb "ジオメトリ:" items:#() height:10 button btnAll "全選択" across:3 button btnNone "解除" button btnSelect "選択" local nodes = #() fn refresh = ( nodes = geometry as array mlb.items = for o in nodes collect o.name ) on roMulti open do refresh() on btnAll pressed do if mlb.items.count > 0 do mlb.selection = #{1..mlb.items.count} on btnNone pressed do mlb.selection = #{} on btnSelect pressed do select (for i in mlb.selection collect nodes[i]) on mlb selectionEnd do format "選択数: %\n" mlb.selection.numberSet -- 選択操作が終わったとき)createDialog roMulti
プロパティ / イベント
意味
.selection
選択中のインデックスの BitArray(#{1, 3} など)
.selection = #{}
全解除
.selection = #{1..n}
1〜n を選択
on mlb selected i do
クリックした 1 項目 のインデックス
on mlb selectionEnd do
マウスを離して選択が確定したとき
on mlb doubleClicked i do
ダブルクリック
for i in mlb.selection collect ... で選択中のインデックスを順に回せます。件数は .numberSet です。
checkbox chk "ランダム配置" checked:truecheckbutton ckb "ON / OFF" checked:false width:80 -- 押し込み式のボタンradiobuttons rdo "軸:" labels:#("X", "Y", "Z") default:3 columns:3on chk changed state do format "checkbox: %\n" state -- true / falseon ckb changed state do ckb.caption = if state then "ON" else "OFF"on rdo changed state do format "radio: %\n" state -- 選んだ番号(1 始まり)chk.checked = falserdo.state = 1 -- 0 にするとどれも選ばれていない状態
button / pickbutton(ボタンとシーンからのピック)
button btnRun "実行" width:100 height:28 tooltip:"選択したオブジェクトに適用"on btnRun pressed do format "run\n"on btnRun rightClick do format "右クリック\n"-- pickbutton: 押すとビューポートでノードを 1 つ選ばせるfn geomOnly o = superClassOf o == GeometryClass -- filter: 用。true を返したものだけ拾えるpickbutton pkb "ターゲットを選ぶ" filter:geomOnly autoDisplay:true message:"対象をクリック"on pkb picked obj do if obj != undefined do format "picked: %\n" obj.name -- キャンセルで undefined が来ることがあるpkb.object -- 最後にピックしたノード(未ピックなら undefined)
colorpicker cp "色:" color:(color 255 128 0) modal:false -- modal:false だと選択中にも changed が飛ぶon cp changed clr do for o in selection do o.wirecolor = clrlabel lbl "状態: 待機中" align:#leftlbl.text = "状態: 実行中"hyperlink hlp "MAXScript ヘルプ" address:"https://help.autodesk.com/" color:blueprogressbar pb color:(color 60 160 60) height:14pb.value = 50 -- 0〜100timer tmr interval:1000 active:false -- interval はミリ秒on tmr tick do lbl.text = "tick " + (tmr.ticks as string)tmr.active = true -- 開始 / 停止
⚠️ timer は rollout を閉じても止まらないことがあります。on ro close do tmr.active = false で止めておきます。
group / subrollout / dotNetControl(レイアウトと拡張)
rollout roChild "子ロールアウト" width:220( spinner spnChild "子の値:" range:[0, 10, 1])rollout roLayout "レイアウト" width:260( group "対象" -- 枠で囲む(見た目だけ) ( radiobuttons rdo "" labels:#("選択", "全部") default:1 columns:2 checkbox chkHidden "非表示も含める" ) button btnA "A" across:3 width:70 -- across: で横並び button btnB "B" width:70 button btnC "C" width:70 subrollout sub "サブロールアウト" height:120 width:240 -- 別の rollout を埋め込む枠 on roLayout open do addSubRollout sub roChild -- 子は先に定義しておく)createDialog roLayout
-- .NET のコントロールをそのまま置く(ListView の例)rollout roDn "dotNetControl" width:260( dotNetControl lv "System.Windows.Forms.ListView" width:240 height:120 on roDn open do ( lv.View = (dotNetClass "System.Windows.Forms.View").Details lv.Columns.Add "名前" 200 for o in geometry do lv.Items.Add o.name ) on lv DoubleClick sender args do -- イベントは on 変数名 イベント名 sender args do if lv.SelectedItems.Count > 0 do format "%\n" lv.SelectedItems.Item[0].Text)createDialog roDn