リファレンス / 3ds Max / MaxScript チートシート

UI・ダイアログ

  • 3ds Max
  • MaxScript
  • チートシート
MaxScript チートシート の章一覧

ユーザーとのやり取りです。一行の確認や入力は組み込み関数、本格的なツールパネルrollout で作ります。

メッセージ・確認ダイアログ

messageBox "処理が完了しました"               -- OK だけの通知
messageBox "失敗しました" title:"エラー" beep:true
queryBox "続行しますか?"                       -- Yes/No → true/false
yesNoCancelBox "保存しますか?"                 -- #yes / #no / #cancel を返す
  • queryBoxtrue/falseyesNoCancelBox は Name 値(#yes 等)を返します。

一行の値入力

n = getKBValue prompt:"数値を入力"      -- 数値入力(キャンセルで undefined)
s = getKBLine prompt:"文字を入力"       -- 文字列入力
  • ⚠️ どちらもキャンセルすると undefined。使う前にチェックします。

プログレスバー

progressStart "処理中..."
for i in 1 to 100 do
(
    -- ...何か処理...
    progressUpdate i             -- 0〜100 で進捗を更新
    if getProgressCancel() then exit   -- ユーザーがキャンセルしたら中断
)
progressEnd()
  • ⚠️ progressStartprogressEnd必ずペア にします。途中で抜けるときも progressEnd を忘れないようにします。

rollout(ツールパネル)

rollout myTool "My Tool" width:200
(
    spinner      spnCount "個数:" range:[1,100,5] type:#integer
    checkbox     chk "ランダム配置" checked:false
    dropdownlist ddl "並び方:" items:#("横一列", "円形")
    edittext     edt "接頭辞:" text:"Box"
    button       btnRun "実行"
    label        lblInfo "待機中"

    on btnRun pressed do
    (
        lblInfo.text = "実行中..."
        for i in 1 to spnCount.value do box pos:[i*20,0,0]
        lblInfo.text = "完了"
    )
)
createDialog myTool          -- フローティングダイアログとして表示
-- destroyDialog myTool       -- 閉じる
  • ボタン押下などは on <コントロール名> <イベント> do (...) で処理します。
  • 主なコントロール: button spinner checkbox dropdownlist edittext label radiobuttons colorpicker
  • listbox / multilistbox / pickbutton など、コントロールごとの書き方とイベントは 「rollout コントロール」章 にまとめています。

rollout の値を読む / 書く

myTool.spnCount.value          -- スピナの現在値
myTool.spnCount.value = 10     -- 値を設定
myTool.chk.checked             -- チェックボックスの状態
myTool.ddl.selection           -- ドロップダウンの選択インデックス
myTool.edt.text                -- エディットボックスの文字列
  • rollout の外(リスナーなど)からは rollout名.コントロール名 で参照します。rollout 定義内のイベントハンドラの中では名前だけで書けます。

落とし穴まとめ

  • 入力系(getKBValue 等)はキャンセルで undefined。必ずチェックする。
  • progressStart / progressEnd はペア。例外時も閉じる。
  • rollout のイベントは on コントロール名 イベント do。コントロール名は一意にする。
  • 重い処理中は progressUpdate を呼ばないと UI が固まって見える。

関連

← MaxScript チートシート へ