spinner コントロールは、ロールアウトに3ds Max の値スピナーを配置する目的で使用します。ユーザは、このスピナー矢印をドラッグしたり、スピナー編集フィールドに値を入力したりできます。
構文は次のようになります。
spinner <name> [<caption>] [range:[min,max,val]] [type:<name>] [scale:<float>] [fieldWidth:<integer>] [toolTip:<string>] [indeterminate:<boolean>] [controller:(<controller>)] [setKeyBrackets:<boolean>]
spinner
項目の位置合わせの既定値は、#right
です。
例:
spinner frab_amt "Frab %:" range:[0,100,10] type:#integer
spinner ball_radius "Ball radius" controller:($ball.radius.controller)
on frab_amt changed val do frabulate selection val
パラメータ
range:
Point3 値で、それぞれ x、y、z にスピナーの最小値、最大値、初期値が入ります。既定値は、[0,100,0]です。
type:
スピナーのタイプで、#float
、#integer
、または #worldunits
が入ります。既定値は、#float.
です。タイプが #worldunits
の場合、値は現在の 3ds Max の表示単位で表示されますが、常に内部システム単位になります。
scale:
スピナーのスケールには増分の最小値を指定します。既定値は、浮動小数点の場合は 0.1、整数の場合は 1 です。
fieldwidth:
スピナー テキスト編集フィールドのピクセル幅です。既定では、編集フィールドの左端が正確にロールアウトの中央に、右端が右マージンにくるようにスピナーが配置されます。このパラメータを使用してフィールドの幅をコントロールできます。
tooltip:
スピナーの上にマウスを移動したときに表示されるツールチップ文字列を指定します。
3ds Max 2010以降で使用可能です。
Indeterminate:
true
に設定すると、スピナー編集フィールドは空白になります。
controller:
指定されたコントローラにスピナーをリンクします。これは新しいコントローラとなり、切断されると 'undefined' となります。これにより、スピナーとコントローラの間に直接リンクを設定できます。スピナーが変更されると、自動的にコントローラおよびそのコントローラでコントロールされるオブジェクトが更新されます。コントローラが変更されると、自動的にスピナーが更新されます。たとえば、$ball という球があり、既にその半径に割り当てられた実数型コントローラにリンクする場合のコードは、次のようになります。
utility foo "foo"
(
spinner ball_radius "Ball radius" range:[0,1000,1] \
controller:($ball.radius.controller)
)
スピナーが自動的に適用され、シーン ノード $ball の半径が記録されるように、スピナーを設定します。スピナーを変更すると、$ball の半径が更新されます。[修正] (Modify)パネル内で、またはアニメーション用に $ball の半径を変更すると、スピナーが更新されます。このコントローラへのリンクでは、スピナー ユーザ インタフェース項目を作成する前に、指定されたコントローラが用意されている必要があることに注意してください。リンク先のパラメータに既に割り当てられているコントローラを指定したり、あるいはコントローラをスクリプトで作成し、作成したコントローラを目的のパラメータに割り当てることができます。
setKeyBrackets:
true
(オン)または false
(オフ)に設定すると、アニメート パラメータ用のキーフレームがあることを示す赤いキーフレーム ブラケットのオンとオフが切り替わります。これにより、たいていはコールバック関数の変更時にこのスピナー プロパティをオンまたはオフに設定して、スクリプト記述されたロールアウト内のキーフレーム通知をシミュレートできます。
例:
utility foo "foo"
(
local myController=bezier_float()
spinner ball_radius "Ball radius" range:[0,1000,1] \
controller:myController
button apply "Apply Radius Controller"
on apply pressed do
(
animate off at time 0 $ball.radius=myController.value
$ball.radius.controller=myController
)
)
プロパティ:
<spinner>.range Point3
スピナーの現在の範囲および値です。range:
パラメータと同様、Point3 値で表されます。
<spinner>.value (Float | Integer)
スピナーの現在の値です。 返される値のタイプは、スピナー作成時のスライダのタイプ(#integer または #float)によって異なります。
<spinner>.setKeyBrackets Boolean
true (オン)または false (オフ)に設定すると、アニメート パラメータ用のキーフレームがあることを示す赤いキーフレーム ブラケットのオンとオフが切り替わります。これにより、たいていはコールバック関数の変更時にこのスピナー プロパティをオンまたはオフに設定して、スクリプト記述されたロールアウト内のキーフレーム通知をシミュレートできます。
<spinner>.indeterminate Boolean
true
に設定すると、スピナー編集フィールドは空白になります。スピナーが indeterminate に設定されていると、スピナーの値はそのままでアクセス可能です。スピナーの値セットの設定を indeterminate
から false
にします。
<spinner>.tooltip String
スピナーの上にマウスを移動したときに表示されるツールチップ文字列を取得/設定します。
3ds Max 2010以降で使用可能です。
イベント
on <spinner> changed <arg> [<inSpin_arg>] do <expr>
ユーザがスピナーを動かしたり、スピナー フィールドに値を入力し、[Enter]または[Tab]を押してカーソルをフィールドの外に移動したときに呼び出されます。<arg>
引数には、スピナーの新しい値が入ります。 返される値のタイプは、スピナー作成時のスライダのタイプ(#integer または #float)によって異なります。
オプションの < inSpin_arg
> 引数には、マウスと矢印を使用してスピンすることで値が変更された場合は true
が、キーボードや値フィールドを使用して値が入力された場合は false
が格納されます。3ds Max 8 以降 で使用可能です。
on <spinner> entered [<inSpin_arg>] [<inCancel_arg>] do <expr>
ユーザがスピナーの編集フィールドに数値を入力し、[Enter]または[Tab]を押してカーソルをフィールドの外に移動したときに呼び出されます。また、スピナーが解除されたときにも呼び出されます。この時点で既に呼び出されている on <spinner> changed
および <spinner> buttonUp
ハンドラが指定された場合、スピナーの value プロパティが更新されます。
最初のオプションの < inSpin_arg
> 引数には、矢印をスピンしてマウスを離すことで値が入力された場合は true
が、キーボードと値フィールドを使用して値が入力された場合は false
が格納されます。3ds Max 8 以降 で使用可能です。
2 番目のオプションの < inCancel_arg
> 引数には、マウスを右クリックすることによって変更がキャンセルされた場合は true
が、キャンセルが行われなかった場合は false
が格納されます。3ds Max 8 以降** で使用可能です。**
on <spinner> buttondown do <expr>
ユーザがスピナーを初めてクリックするときに呼び出されます。
on <spinner> buttonup [<inCancel_arg>] do <expr>
ユーザがスピナーを解除するときに呼び出されます。
オプションの < inCancel_arg
> 引数には、マウスを右クリックすることによって変更がキャンセルされた場合は true
が、キャンセルが行われなかった場合は false
が格納されます。3ds Max 8 以降 で使用可能です。
buttonDown
および buttonUp
イベントによって、スライダの「巻き記号」の開始および終了位置が効率よく示されるため、調整の設定を実行できます。これは一般に、on <spinner> changed
ハンドラ内で修正されるシーン ノードをフォアグラウンド平面に配置して、画面上の再描画を高速化するために使用します。
スピナーを使用して画面上のオブジェクトをインタラクティブに調整する場合、オブジェクトをフォアグラウンド平面に移動すると、インタラクティブ速度を向上できます。フォアグラウンド平面に配置されたオブジェクトは個別に描画されるため、オブジェクトへのインタラクティブな変更は大幅に高速になります。以下に説明する flagForeground()
メソッドを使用して、フォアグラウンド平面またはバックグラウンド平面に移動します。
flagForeground <node> <boolean> -- mapped
ブール値の引数が true
の場合には、シーン ノードをフォアグラウンド平面に配置します。false
の場合には、バックグラウンド平面に配置します。
フォアグラウンド平面にあまり多くのオブジェクトを配置するとフォアグラウンド平面のパフォーマンスが低下しますので、フォアグラウンド平面にオブジェクトを配置する場合には十分注意してください。オブジェクトをインタラクティブにコントロールする必要がなくなった場合は、オブジェクトをバックグラウンド平面に戻すことを忘れないでください。
例:
spinner foo "height: "
on foo buttonDown do flagForeground $baz...* true
on foo buttonUp do flagForeground $baz...* false