RolloutCreator 関数

RolloutCreator は、ロールアウトを動的に作成する関数の構造体です。この関数は、stdplugs\stdscripts\baseLib\rolloutCreator.ms にあるスクリプトによって実装されます。

ここでは、実装されている関数とその使い方について説明します

rolloutCreator <rollout_name> <rollout_caption>

rolloutCreator のインスタンスを作成し、それを変数に割り当てます。

rci = rolloutCreator "myRollout" "My Rollout"
<rollout_creator>.begin()   

この関数は、インスタンスを作成した直後に呼び出す必要があります。

<rollout_creator>.addControl <control_type> <control_name> <control_caption> [  paramStr:<string>]

ロールアウトにコントロールを追加します。

<control_type>

#button、#spinner、#activeXControl など、任意の rolloutControl を指定できます。

<control_name>

#btnButton など、コントロールの参照に使用される変数名

<control_caption>

「My Button」コントロールのキャプション

[paramStr:]

コントロールに渡す必要があるすべてのキーワード パラメータの文字列表記(オプション)。「width:100 height:20 align:#right」など

rci.addControl #button #myButton "My Button"
<rollout_creator>.addHandler <control_name> <event_type> [paramStr:<string>] [codeStr:<string>] [filter:<boolean>]

追加済みのコントロールにイベント ハンドラを追加します。

<control_name>

コントロール作成中に渡される変数

<event_type>

コントロールがサポートするイベント。changed、#pressed、#selected など

[paramStr:<string>]
[codeStr:<string>]

イベント ハンドラ コードの文字列表記。文字列にサブストリングが含まれている場合は、それらを「@」で囲み、filter: パラメータに on\true を渡します。

rci.addHandler #myButton #pressed codeStr: "MessageBox @Hey@" filter:on

「myButton」というボタンにイベント ハンドラが追加されます。このボタンをクリックすると、「hey」というテキストを含むメッセージ ボックスがポップアップされます。ロールアウト定義の最終結果は、次のようになります。

on myButton presseddoMessageBox "Hey"

別の例

rci.addHandler #myCheckbox #changed paramStr:"val" codeStr:"myOtherCheckbox.state = not val"

「myCheckbox」というチェックボックスのイベント ハンドラが追加されます。チェックボックスの状態が変更された場合、以前に定義した「myOtherCheckbox」という別のチェックボックスの状態も、「myCheckbox」の実際の状態が渡された引数変数「val」の反転されたブール値に変更されます。ロールアウト定義の最終結果は、次のようになります。

on myCheckbox changed val do myOtherCheckbox.state = not val
<rollout_creator>.end [executeDefinition:true]

この関数は、要求されたコントロールとそのイベント ハンドラがすべて呼び出されたときに、呼び出す必要があります。この関数は、ロールアウト文字列を作成および評価し、その定義を返します。返された定義は、createDialog または addRollout 関数に渡すことができます。

executeDefinition が true の場合、この関数はロールアウト文字列を作成し、 safeExecute() を使用して評価し、その定義を返します。返された定義は、createDialog または addRollout 関数に渡すことができます。 3ds Max 2022.1 Update 以降で使用可能です。executeDefinition が false の場合、この関数はロールアウト文字列を形成し、StringStream 値として返します。呼び出し側は、StringStream 値を実行し、ロールアウト値を取得します。

safeExecute() は定義をダイナミック スクリプトとして評価し、[セーフ シーン スクリプトの実行](Safe Scene Script Execution)によってブロックされたコマンドと UI コントロールはブロックされることに注意してください。呼び出し側が返された StringStream 値を実行すると、呼び出し側のスクリプト ソースを使用して定義が評価されます。

<rollout_creator>.addLocal <string> [init:<value>]

この関数を使用して、ロールアウト定義にローカル変数を追加できます。変数の値は、init: 値を渡すことで初期化できます。

<string>

ローカル変数の名前。

init:

ローカル変数の初期値を指定します。

<rollout_creator>.addText <string> [filter:<boolean>]

この関数は、ロールアウト定義に関数を追加するときに使用します。文字列にサブストリングが含まれている場合は、それらを「@」で囲み、filter : パラメータに true を渡します。

<string>

ロールアウト定義に追加される文字列。

例(詳細) :

rci = rolloutCreator "myRollout" "My Rollout"
rci.begin()
rci.addControl #button #myButton "My Button"
rci.addHandler #myButton #pressed filter:on codeStr:"MessageBox @Isn't this cool@ title:@Wow@"
createDialog (rci.end())

別の例:

rfTest = rolloutCreator "rfTestN" "rfTestC"
-- Start creating the rollout
rfTest.begin()
rfTest.addControl #button #myButton "My Button" -- add a button
rfTest.addHandler #myButton #pressed filter:on codeStr:"MessageBox @Look to the \@Light\@ thing@"
rfTest.end()
createDialog rfTest.def