ユーティリティおよびロールアウトのプロパティ、メソッド、およびイベント ハンドラ

プロパティ

スクリプト ユーティリティおよびロールアウトでは、ロールアウトの現在の状態へのアクセスを提供する複数のプロパティが使用できます。

ロールアウト プロパティ

<rollout>.name String, read-only

ロールアウトの名前。

<rollout>.title String

ロールアウトのタイトル。

注:

ダイアログ バーとして登録されたロールアウトまたはロールアウト フロータのタイトルは変更できません。

<rollout>.open Boolean

true の場合は、ロールアウトが開いています。false の場合は、ロールアウトが閉じています。true または false をこのプロパティに代入し、ロールアウトを開いたりロールアップしたりできます。

注: ロールアウトがダイアログ ボックス、ダイアログ バー、または拡張ビューポートの場合、この設定は何も影響しません。これらの場合は常に true になります。
<rollout>.scrollPos Integer

ロールアウトの含まれるパネルのスクロール位置。

注:

ロールアウトがダイアログ ボックス、ダイアログ バー、または拡張ビューポートの場合、このプロパティを設定しても何も影響しません。これらの場合は常に 0 になります。

<rollout>.height Integer

ロールアウトの高さをピクセルで取得/設定します。

注: ロールアウト フロータが拡張ビューポート内にある場合、.width および .height プロパティによってビューポートのサイズと位置がレポートされます。この場合、プロパティは設定できません。
<rollout>.width Integer

ロールアウトの幅を取得/設定します。

注:

ロールアウトがロールアウト フロータ、subRollout、またはコマンド パネルの場合、このプロパティの設定は何も影響しません。

ロールアウト フロータが拡張ビューポート内にある場合、.width および .height プロパティによってビューポートのサイズと位置がレポートされます。この場合、プロパティは設定できません。

<rollout>.controls Array of ui elements, read-only

ロールアウト内のすべての制御の配列を返します。

<rollout>.inViewport Boolean, read-only

ロールアウトが拡張ビューポート内にある場合は True を返します。

<rollout>.dialogBar Boolean, read-only

ロールアウトがダイアログ バーとして登録されている場合は True を返します。

<rollout>.inDialog Boolean, read-only

ロールアウトが createDialog <rollout>. Always valid を使用して作成されたダイアログ ボックスに現在表示されている場合、True を返します。

<rollout>.isDisplayed Boolean, read-only

ロールアウトが現在表示されている場合は true を返し、そうでない場合は false を返します。

<rollout>.visible Boolean

ロールアウトがダイアログ ボックスに表示される場合、ロールアウトの可視性を取得または設定します。true (既定値)の場合、ロールアウトは UI に表示されます。false の場合、ロールアウトは UI で非表示になりますが、MAXScript を介して依然としてアクセスできます。 3ds Max 2021 以降 で使用可能です。注: このプロパティは、ロールアウト フロータのロールアウトの可視性には影響しません。createDialog() で作成されたダイアログ内でのみ影響します。

次に例を示します。

rollout test "Test" (
    button bt_test "Show/Hide Rollout"
    on bt_test pressed  do  test.visible = not test.visible
)

createDialog test
<rollout>.owner Object, read-only

スクリプト プラグインかカスタム アトリビュートによってロールアウトが表示されている場合、このプロパティにはスクリプト プラグインか CA のインスタンスが含まれます。ロールアウト イベント ハンドラでデバッガのブレークが発生したとき、スクリプト プラグインか CA のインスタンスの変数に簡単にアクセスできるようにするため、3ds Max 8 でこのプロパティが追加されました。 この場合、イベント ハンドラの所有者はロールアウトなので、getVar owner.owner を使用してスクリプト プラグインか CA のインスタンスにアクセスできます。

<rollout>.hwnd Integer, read-only

ロールアウトが開いている場合は、そのロールアウトのウィンドウ HWND ハンドルを格納します。ロールアウトが閉じている場合は 0 になります。

3ds Max 2011 以降 で使用可能です。

<rollout>.rolloutFloater RolloutFloater, read-only

ロールアウトを収容するロールアウト フロータを含めます。ロールアウトがフロータ内にない場合は、undefined になります。3ds Max 2019 以降で使用可能です。

<rollout>.autoLayoutOnResize Boolean

サイズを変更したときの自動レイアウトがフロータで有効になっている場合は、True です。3ds Max 2019 以降で使用可能です。

ロールアウト メソッド:

いくつかのメソッドを使用して、ユーティリティを開いたり閉じたり、[ユーティリティ] (Utilities)パネルのロールアウトの追加や削除を実行できます。これらのメソッドを次に示します。

openUtility <utility>

[ユーティリティ] (Utilities)パネルでユーティリティのメイン ロールアウトを開きます。これは、MAXScript の[ユーティリティ] (Utilities)パネル ロールアウトにある[ユーティリティ] (Utilities)リストからユーティリティをクリックする操作と同じです。

closeUtility <utility>

[ユーティリティ] (Utilities)パネルでユーティリティのメイン ロールアウトを閉じます。これは、このロールアウトの[閉じる] (Close)ボタンをクリックする操作と同じです。

addRollout <rollout> [ rolledUp:<boolean> ]

ロールアウトを[ユーティリティ] (Utilities)パネルに追加します。addRollout() 関数の rolledUp: パラメータでは、ロールアップされた状態でロールアウトが追加されるかどうかを指定します。この既定値は false で、ロールアウトは完全に開いた状態で追加されます。追加のロールアウトは、addRollout() 呼び出し順に整理されるので、呼び出す順番に注意して、希望する順序を確保してください。

removeRollout <rollout>

[ユーティリティ] (Utilities)パネルからロールアウトを削除します。

メソッド addRollout() および removeRollout() の詳細については、「スクリプトで書かれたユーティリティでの複数のロールアウトの管理」を参照してください。

updateRolloutLayout (<rollout_floater> | <rollout>) forceUpdate:<boolean>

指定したロールアウト フロータ内のロールアウトまたはダイアログ ボックス内のロールアウトのレイアウトを更新します。ただし、ロールアウト フロータとロールアウトの両方の autoLayoutOnResize プロパティが false に設定されていて、かつこのメソッドに対して forceUpdate パラメータが false に設定されているか、または指定されていない(既定は false)場合は除きます。3ds Max 2019 以降で使用可能です。 forceUpdate が true の場合は、autoLayoutOnResize の設定に関係なく、レイアウトは更新されます。

イベント ハンドラ

ロールアウト内の特定のユーザ インタフェース項目に対して指定するイベント ハンドラのほかに、ユーザがロールアウト全体を最初に開いたとき(open)、および明示的に閉じたとき(close)に呼び出されるハンドラの機能を定義できます。このハンドラは、初期化コードやロールアウトが閉じたときのクリーンアップに便利で、1 つのスクリプトで書かれたユーティリティで複数のロールアウトを管理する場合に必要です。ロールアウト フロータ ウィンドウのサイズが変更されたり移動されたりすると、それに伴ってロールアウト フロータ ウィンドウの最初のロールアウト上でイベント ハンドラ(それぞれ resizedmoved)が呼び出されます。追加のイベント ハンドラ(oktoclose)は、ロールアウトを閉じてもよいかどうかを確認するために呼び出されます。

この構文を次に示します。

on <rollout_or_utility> open do <expr>

ロールアウトまたはユーティリティが開いたときに呼び出されます。

on <rollout_or_utility> close do <expr>

ロールアウトまたはユーティリティが閉じたときに呼び出されます。

on <rollout_or_utility> oktoclose do <expr>

ロールアウトの[閉じる] (Close)ボタンをユーザがクリックしたときに呼び出されます。これにより、スクリプト作成者が閉じる操作を継続するかどうかを決定できます。式が true 値に評価される場合は、ロールアウトを閉じることができます。式が false 値に評価される場合は、閉じる操作が無視され、ロールアウトやユーティリティは開いたままになります。

次の例では、[OK To Close]チェック ボタンにチェックマークが付くまでユーティリティは閉じません。

    utility ui_oktoclose "OKToClose Test"
    (
    checkbutton a2 "OK To Close"
    on ui_oktoclose oktoclose do a2.state
    )
on <rollout_or_utility> help do <expr>

ダイアログ、ロールアウト フロータ、ロールアウトにフォーカスがあり、[F1]が押された場合に呼び出されます。

ロールアウトまたはロールアウト内のロールアウト コントロールにフォーカスがある場合、コードはそのロールアウトに対して「ヘルプ」イベント ハンドラが定義されているかどうかを確認します。

そうでなく、ロールアウトがロールアウト フロータ内にある場合、フロータはメッセージを受け取り、フロータ内の最初のロールアウトに「ヘルプ」イベント ハンドラがあるかどうかを確認し、存在する場合はそれを呼び出します。

ロールアウトがサブロールアウト内にある場合、MAXScript は明示的に同じチェックを実行し、サブロールアウト内の最初のロールアウトに対してハンドラを呼び出します。

「ヘルプ」イベント ハンドラが見つからない場合、メッセージは最終的に 3ds Max ウィンドウに渡され、3ds Max ヘルプが呼び出されます。

on <rollout_or_utility> rolledUp <arg> do <expr>

ロールアウトまたはユーティリティがロール アップまたはロール ダウンされたときに呼び出されます。引数には、ロールアウトがロール ダウンされた(開かれた)場合には true、ロールアウトがロール アップされた(閉じられた)場合には false が含まれます。

    rollout test "Test"
    (
    button btn_test "Press Me"
    on test rolledUp state do
    if state then print "Rolled Down!" else print "Rolled Up!"
    )
    nf = newRolloutFloater "Test" 200 200
    addRollout test nf
on <rollout> resized <arg> do <expr>

ユーザ操作、またはロールアウト フロータ ウィンドウの size プロパティを変更するスクリプトによってロールアウト フロータ ウィンドウがサイズ変更されるとき、最初のロールアウト上で呼び出されます。resized イベント ハンドラ式のロールアウト フロータ ウィンドウをサイズ変更することによって resized イベント ハンドラが再び呼び出されることはありません。< arg > の値は、ロールアウト フロータ ウィンドウの現在の幅と高さです。

    global my_rof_size
    ...
    on my_rollout resized size do
    (
    my_rof_size = size -- save the new window size
    )
on <rollout> moved <arg> do <expr>

ユーザ操作、またはロールアウト フロータ ウィンドウの pos プロパティを変更するスクリプトによってロールアウト フロータ ウィンドウが移動されるとき、最初のロールアウト上で呼び出されます。< arg > の値は、ピクセル単位での画面上のロールアウト フロータ ウィンドウの現在位置です。

以下の例では、動作を記録するログ ファイルを保持し、ロールアウトのオープンおよびクローズ ハンドラを使用して、ログ ファイルを開閉します。

    utility frab "Optimal Frabulator"
    (
    local log
    spinner frab_x ...
    button do_it "Enfrabulate now"
    ...
    on do_it pressed do
    (
    frabulate selection
    format "selection frabbed at %\n" localTime to:log
    )
    on frab open do log = createFile "frabulator.log"
    on frab close do close log
    )

次の例では、ロールアウト フロータ ウィンドウがサイズ変更されるときに on resized イベント ハンドラが呼び出されます。イベントは、ロールアウト フロータ ウィンドウの最初のロールアウトだけで生成されるため、on b resized イベント ハンドラは全く呼び出されません。

    rollout a "Rollout A"
    (
    button a1 "a1"
    on a resized val do (format "A: %\n" val)
    )
    --
    rollout b "Rollout B"
    (
    button b1 "b1"
    on b resized val do (format "B: %\n" val)
    )
    --
    rof=newrolloutfloater "test" 200 200
    addrollout a rof
    addrollout b rof
    rof.size=[300,300]