マクロスクリプト ボタンを正しくチェック解除する方法はありますか。

質問:

ダイアログ ボックスを開くマクロスクリプト ボタンがあるとします。isChecked ハンドラーを利用し、ダイアログ ボックスが開いているときはチェックされたボタンを表示し、再度このボタンが押されたとき (チェック解除されたとき) にダイアログ ボックスを閉じるようにしたいとします。 ここまでは問題ありません。 ここで、ユーザは、[X]ボタンを使用するか、同じマクロスクリプト ボタンを押す以外の方法でインタフェースを閉じます。この場合、このマクロスクリプト ボタンのチェック解除についてはどのように対処すればよいでしょうか。

回答:

この動作を実装する 1 つの例として、現在のオープン/クローズ状態を保持しておく「プライベート グローバル」変数 (マクロスクリプトのスコープにローカル) を使用する方法があります。

この変数を、ロールアウトの On Close() ハンドラー内で設定し、[X]がクリックされたときに、3ds Max GUI を強制的に更新して、ボタンのチェックを解除します。

これは、グローバル変数を使用して実行することもできます (その他のスクリプトでも、スクリプト/ダイアログ ボックスを強制的に閉じられるようにしたい場合)。 また、エラー チェックを追加してもよいでしょう。ただし、一般的な概念は以下のようになります。

例:

    macroScript test category:"Tests"
    (
      local isOpen = false --initialize to false (closed)
      rollout myRollout "MyRollout"
      (
        label lbl_hello "hello world"
        on myRollout close do --when closing, set to false and redraw GUI
        (
          isOpen = false
          updateToolbarButtons()
        )
      )
      on execute do
      (
        if isOpen then --if open, close it
        (
          destroyDialog myRollout
          isOpen = false--and lower the flag
        )
        else --if closed, open it
        (
          createDialog myRollout
          isOpen = true --and raise the flag
        )
      )
      on isChecked return isOpen --return the flag
    )