スクリプト プラグイン メソッド
 
 
 

addPluginRollouts() は、スクリプト プラグインの作成ツール内で使用されます。これはシーンにインスタンスを作成せずに、作成ツール内でその他のオブジェクトを作成するようなレベル 1 プラグインでの使用に特に適しています。このメソッドを使用すると、一般に作成ツールで作成されるオブジェクトの 1 つである[作成]パネル内で指定したオブジェクトのロールアウトをインストールして、パラメータを作成中に直接調整できます。

形式は次のとおりです。

addPluginRollouts <obj>

次の例では、「マウス ツール句」で説明されている 3 つのライト マウス ツールを永続的で編集可能なクラスに設定します。これは、 2 つの新しいクラスを定義します。ヘルパー クラスの lightMaster は、ライト システムのマスター オブジェクトとして使用されます。ライト クラスの threeLights は、初期システムをレイアウトするために作成します。また、 lightMaster を作成し、そのパラメータがライトをポイントするように設定します。 lightMaster ロールアウトにより、後で[モディファイヤ]パネルでの編集が可能になり、ライトをパラメータ ブロックに保存することにより、シーンの保存およびロードにおいて設定が永続的になります。

スクリプト:

plugin helper lightMaster
name:"Light Master"
classID:#(12345,54321)
extends:Dummy
replaceUI:true
invisible:true
(
parameters main rollout:params
(
key type:#node subAnim:true
fill type:#node subAnim:true
back type:#node subAnim:true
height type:#worldUnits default:0 ui:height
spread type:#worldUnits default:0 ui:spread
angle type:#angle default:90 ui:angle
-- 初期作成時に光が存在しないので、キーの値を確認します。
on height set val do if key != undefined then coordsys key.target
(
key.pos.z = val
back.pos.z = val * 1.5
fill.pos.z = val * 0.5
)
on spread set val do if key != undefined then coordsys key.target
(
-- ターゲットの XY 平面のキー方向を向いた法線ベクトル(kuv)を計算し、
-- その法線ベクトル、現在のスプレッドおよび角度の値に基づいて
-- すべてを再配置します。
local kuv = normalize ([key.pos.x, key.pos.y, 0])
key.pos = [kuv.x * spread, kuv.y * spread, height]
back.pos = [kuv.x * -spread, kuv.y * -spread, height * 1.5]
-- キーの下にそれを配置して、ターゲットの周囲で回転させることで、
-- 位置を作成します。
fill.pos = [kuv.x * spread, kuv.y * spread, height * 0.5]
about key.target rotate fill angle z_axis
)
on angle set val do if key != undefined then coordsys key.target
(
fill.pos = [key.pos.x, key.pos.y, height * 0.5]
about key.target rotate fill angle z_axis
)
)
rollout params "Light Parameters"
(
spinner height "Height" type:#worldUnits range:[-1e32, 1e32, 0]
spinner spread "Spread" type:#worldUnits range:[0, 1e32, 0]
spinner angle "Angle" range:[-180, 180, 30]
on params open do flagForeGround #(key, back, fill) true
on params close do
if key != undefined and back != undefined and fill != undefined then
flagForeGround #(key, back, fill) false
)
)

スクリプト:

plugin light searchlights
name:"Three Lights"
(
local master
tool create
(
on mousePoint click do
(
if click == 1 then -- マウス ボタン クリック時にキー、バックライト、および補助光を作成します。
(
coordsys grid
(
master = lightMaster pos:gridPoint
master.dummy.boxsize = [10,10,10]
in master
(
local targObj=targetobject pos:gridPoint
master.key = targetspot pos:gridPoint name:"key" \
target:targObj
master.back = targetspot pos:gridPoint name:"back" \
target:targObj
master.fill = targetspot pos:gridPoint name:"fill" \
target:targObj
)
)
addPluginRollouts master
)
if click == 3 then
(
select master
master = undefined
#stop
)
)
on mouseMove click do
(
if click == 2 then -- x-y 平面上にドラッグ アウトして、丸くします。
(
-- グリッドにキーを配置し、spread を設定して
-- 「on set spread」ハンドラによって
-- ライトを正しい高さに移動します。
master.key.pos = worldPoint
master.spread = distance master.key master.key.target
)
else if click == 3 then -- ドラッグしてライトを強めます。
master.height = gridDist.z
)
on mouseAbort click do
(
if master != undefined then
(
if master.fill != undefined then delete master.fill
if master.back != undefined then delete master.back
if master.key != undefined then delete master.key
delete master
)
)
)
)
関連事項