2012年01月30日

max script 勉強してみた その55 3dsmax 2012

前回はスピナーを調べてみた。1つの数値の入出力インターフェースは全部似たようなモンだからスピナーがわかればあとは簡単だ。例えばスライダーは数値のかわりにスライダーバーで値を表現するもので、

fig01

書式はこうなっている。

slider <name>
 [<caption>]
 [range:[min,max,val]]
 [type:<#float | #integer>]
 [ticks:10]
 [orient:<#horizontal | #vertical>]
 [controller:(<controller>)]
 [toolTip:<string>]

スピナーのパラメータで無かったのはticksとorientかな。ticksはスライダーバーに表示されるメモリの分割数で、

fig02

orientはスライダーバーの方向だ。

fig03

値はvalueプロパティで取得できるし、イベントは見慣れた感じだ。

on <slider> changed <arg> do <expr>

on <slider> rightClick do <expr>

on <slider> buttondown do <expr>

on <slider> buttonup do <expr>

スライダーはスピナーみたいに数値で入力する事は無いから「inSpin_arg」みたいにどこから入力したかを判断するパラメータは無い(必要ないからね)。

Angleは数値のうち特に角度を扱うためのコントロール。これも基本は変わらない。

fig04

書式は以下の通りで、見た目に係わるパラメータがちょっと多いだけだ。

Angle <name>
 [caption]
 [color:<color>]
 [degrees:<float>]
 [bitmap:<bitmap>]
 [diameter:<float>]
 [StartDegrees:<integer>]
 [StartRadians:<integer>]
 [dir:<#cw|#ccw>]
 [range:<point3>]

colorは扇型部分を塗りつぶす色で、設定する時はRBG値(color R G B)を使って設定するならRGB各0〜255の組み合わせで色が表せて

color:(color 255 0 0)

とすれば赤だけ255で緑0、青0なので赤になる。デフォルトは青。

fig05

degreeは初期値でrangeは[最小値,最大値,初期値]で初期値が重なる。試してみたところ、rangeの設定の方が優先されるようだ。

bitmapは扇型の部分を塗りつぶしの代わりにビットマップ画像で置き換える。あらかじめビットマップが作成または読み込まれていればここにセットできる。また、これはプロパティにもなっているので、例えば下のようなコードでユーティリティパネルが開かれた時にビットマップファイルをopenBitMap ( ) で読み込んでセットする事も出来る。

utility utlAngle01 "Slider Test"
(
 local tbm
 Angle ang_01 "Angle" diameter:150

 on utlAngle01 open do
 (
  local bm = openBitMap (getDir #maxroot +"maps/tiger.bmp")
  tbm = bitmap ang_01.width ang_01.height
  copy bm tbm
  ang_01.bitmap = tbm
  close bm
 )
 on utlAngle01 close do
 (
  free tbm
 )
)

一度読み込んだビットマップをコピーしているのはコピーの時にビットマップサイズが自動調整できるからで、これを使えばコントロールのサイズにあわせたビットマップを表示できるよ。それから開いたファイルは閉じて、必要なくなったビットマップはfreeで開放してやった方がメモリーを無駄食いしている時間が減るから積極的にやった方がいいよ(ほっといてもガベッジコレクションされるらしいけど危険だなわ)。それからビットマップファイルを指定する時にgetDir #maxrootを使うとMAXのルートディレクトリが文字列で取得できるから便利だよ。

ビットマップは直接描き込んだりレンダリング結果を入れたりも出来るので使い方によっては面白いことが出来るかも。

fig06

diameterはコントロールの直径だ。大きさはレイアウトパラメータのwidthやheightでも調整できる。

StartDegrees、StartRadiansは開始角度を度とラジアンで指定するもの。

下の例はStartDegreesを45度にしたもの。開始の位置が45度からになった。でも角度の値自体は0から始まるよ。

fig07

dirは角度をどっち周りで表すかで、#cwが時計回り、#ccwが反時計回りでデフォルトは反時計回りだ。

rangeは扇型の中心角の最小値と最大値と初期値を決めるもので、これを変えても円形自体は変化しない。ドラッグできる範囲が変わるだけだ。

そしてこれらはプロパティとしてもアクセスできて、値についてはdegreesでアクセスすれば度単位、radiansでアクセスすればラジアン単位になる。

イベントは変更した時呼ばれるchangedと右クリックした時呼ばれるrightClickの2つだ。

on <Angle> changed <arg> do <expr>

on <Angle> rightClick do <expr> 

それではまた次回。

maxまとめページ



take_z_ultima at 11:59│Comments(0)TrackBack(0)3ds Max | CG

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 

Archives