ユーティリティ句

スクリプト ユーティリティ定義の <utility_body> は、次のような一連のユーティリティ句で構成されます。

<utility_body> ::= { <utility_clause> }+

ここで、

<utility_clause> ::= <rollout_clause> | <nested_rollout>

<utility_clause> には、<rollout_clause> または <nested_rollout> の 1 つ以上のインスタンスを含めることができます。ネストされたロールアウトは、基本的に別の自己収容型のロールアウト定義であり、複数のロールアウトを持つスクリプト ユーティリティを生成したり、ユーティリティに関連付けられているロールアウト フロータ ウィンドウを配置したりするなどに使用できます。<nested_rollout> は次のように定義されています。

rollout <var_name> <description_string> [ rolledUp:<boolean> ] [ silentErrors:<boolean> ] \
  [ autoLayoutOnResize:<boolean> ]
(
<rollout_body>
)

ここで

<rollout_body> ::= { <utility_clause> }+

つまり、ロールアウト定義は、説明の文字列が MAXScript ロールアウトの[ユーティリティ] (Utilities)リスト内に表示されない点を除いては、ユーティリティ定義と同じです。ユーティリティは、実際にはロールアウトの特殊な形とみなすことができ、これらはいずれも Rollout クラスのインスタンスです。

例として、次のスクリプトを考えます。1 行目はユーティリティの開始を定義し、2 ~ 42 行目はユーティリティ本体です。 ユーティリティ句の範囲は、3 行目(ロールアウト句)、5 ~ 9 行目(ネストされたロールアウト)、11 ~ 30 行目(ネストされたロールアウト)、32 ~ 35 行目(ロールアウト句)、37 ~ 40 行目(ロールアウト句)です。

スクリプト:

    utility MyUtil "My Utility"
    (
    local pot
    rollout bout "About My Utility"
    (
    button aboutMU "About" width:45 height:20
    on aboutMU pressed do
    messagebox "My First Utility\nby ME\nVersion .1"\
    title:"About My Utility"
    ) -- end rollout bout
    rollout creator "The Teapot"
    (
    group "Object Creator"
    (
    button tea "Teapot"
    spinner rad "Radius" range:[10,50,20] type:#integer
    spinner seg "Segments" range:[4,32,12] type:#integer scale:1
    )
    on tea pressed do
    (
    pot=teapot radius:rad.value
    pot.name="TestPot"
    pot.segs=seg.value
    ) -- end on tea pressed
    on rad changed value do
    pot.radius=value
    on seg changed value do
    pot.segs=seg.value
    ) -- end rollout creator
    on MyUtil open do
    (
    addRollout bout
    addRollout creator
    ) -- end on MyUtil open
    on MyUtil close do
    (
    removeRollout bout
    removeRollout creator
    ) -- end on MyUtil close
    ) -- end utility MyUtil

上記のスクリプトによって作成された[ユーティリティ] (Utilities)パネル ロールアウトは、次のようになります。

ユーティリティで定義された複数のロールアウト

スクリプト ユーティリティに関連付けられていないロールアウト フロータにロールアウトを追加する場合、ユーティリティ定義の外側でロールアウトを定義することもできます。詳細は、「ロールアウト フロータ ウィンドウ」を参照してください。

ユーティリティまたはロールアウトを定義するスクリプトを実行すると、ユーティリティまたはロールアウトの値が作成されます。ユーティリティ値は、同じ名前を持つ新しいユーティリティが実行されない限り、3ds Max セッション全体で有効です。ユーティリティで定義されたロールアウトの寿命は、ユーティリティ値の寿命と同じです。ユーティリティの外側で定義されたロールアウトの寿命は、ロールアウトが定義されたコンテキストの寿命と同じです。詳細は、「変数のスコープ」を参照してください。