スクリプト ユーティリティ パネル

 

   

ユーザ インタフェースの作成 - クイック ナビゲーション

スクリプト ユーティリティ パネルは、MAXScript の utility 定義構文を使用して作成します。

トップレベルの構文は、次のとおりです。

utility <var_name> <description_string> [rolledUp:<boolean> ] [silentErrors:<boolean> ]
( 
<utility_body> 
) 

<var_name>は、スクリプト ユーティリティ パネルを表す値を保持するために、自動的に作成されたグローバル変数の名前です。

<description_string>は、MAXScript ロールアウトの[ユーティリティ](Utilities)リスト内のユーティリティの説明に使用される文字列です。

オプションの rolledUp: パラメータには、ユーティリティ ロールアウトが最初にロール アップされるかどうかを指定します。 true に設定すると、ユーティリティ ロールアウトは最初にロール アップされます。既定値は false です。

オプションの silentErrors: パラメータは、スクリプト ユーティリティの実行時に MAXScript ランタイム エラーのメッセージを表示するかどうかをコントロールします。このパラメータを false に設定すると、エラーメッセージがリスナーに、場合によってはポップアップ エラー ダイアログ ボックスに表示され、ユーティリティの続行は停止されます。このパラメータを true に設定すると、エラーメッセージは表示されず、ユーティリティの続行が許可されます。 true に設定すると、ユーザが MAXScript エラー メッセージと混同する可能性のある配布されたスクリプト プラグインの場合に便利です。既定値は false です。

<utility_body>は、括弧で囲まれている必要があり、ユーザ相互作用を処理する関数およびイベント ハンドラとともに、ユーティリティに表示されるユーザ インタフースを定義する一連の句です。詳細は、「ユーティリティ句」を参照してください。

ここでは、現在選択したものにオブジェクトの位置を展開するユーティリティを実装する簡単な例を挙げます。この例では、 Spread objects エントリを[ユーティリティ](Utilities)リストにインストールします。 Spread objects ロールアウトを開くと、3 つのチェック ボックスと 1 つのスプレッド量スピナーがあります。スプレッド スピナー イベント ハンドラは、ユーザがスピナーを調整するときは必ず呼び出されます。イベント ハンドラ式では選択したオブジェクトの新しい位置が計算され、スプレッドをコントロールするために各チェック ボックスの状態がテストされます。

例:

utility spread "Spread objects" -- define the utility name and description string
(
local last_amt = 0 -- define and initialize local variable
checkbox x "Spread in x" -- create 3 checkboxes
checkbox y "Spread in y"
checkbox z "Spread in z"
spinner spread "Spread amount:" range:[-1000,1000,0] -- create a spinner
on spread changed amt do -- when spinner value changes...
(
delta = amt - last_amt -- calculate difference in current and previous
for obj in selection do -- values for each selected object
(
-- calculate new position based on current position and selection center
p = obj.pos + normalize (obj.pos - selection.center) * delta
if x.checked then obj.pos.x = p.x -- if checkbox x checked, apply X position
if y.checked then obj.pos.y = p.y -- if checkbox y checked, apply Y position
if z.checked then obj.pos.z = p.z -- if checkbox z checked, apply Z position
)
last_amt = amt -- store spinner value as previous value
) -- end of "on spread changed"
) -- end of utility definition

このスクリプトで書かれた[ユーティリティ](Utilities)パネル ロールアウトは、次の図のようになります。[閉じる](Close)ボタンは、ユーティリティ ロールアウトの MAXScript によって自動的に作成され、ロールアウトを閉じます。

スプレッド オブジェクト ロールアウト

ユーティリティ定義の評価により、いくつかのことが実行されます。ロールアウト クラスのインスタンスであり、ユーティリティ定義を含む新しい値が作成されます。この値は名前付きグローバル変数に割り当てられ、ユーティリティの説明が MAXScript ロールアウトの[ユーティリティ](Utilities)リストにインストールされます。この時点で、ユーザはユーティリティを[ユーティリティ](Utilities)リストから選択でき、ユーティリティのロールアウトが開きます。

注:

同じ説明のあるスクリプト ユーティリティが既に存在する場合は、古いロールアウトが [ユーティリティ](Utilities)パネルで開かれていても、新しいロールアウトに置き換えられます。これにより、ユーティリティを順次部分開発できます。定義を修正して評価するたびに、古いバージョンは新しいものに置き換えられます。

関連事項