XSIユーザーから観たMELスクリプトについて 其の六
ではWindowのスライダー版
こんな感じ。
global proc makeSphere() { float $val; $val = `floatSliderGrp -q -value radiusSlider`; sphere; scale $val $val $val; } window -title "スライダ 1"; columnLayout; text -label "球体の作成"; floatSliderGrp -label "半径" -field true -min 0.1 -max 20.0 -step 0.1 -value 1.0 radiusSlider; button -label "作成" -command "makeSphere()"; showWindow;
スライダーで決めた値をスフィアに代入してその大きさで作成するというもの。
ここ一個一個説明を。
$val = `floatSliderGrp -q -value radiusSlider`;
関数内の部分ですが、上記では
「変数VALに、(radiusSlider)という名のスライダーの値を取得します」
というものです。
※(-q -value)の(-q)は必須です。
それを作成したスフィアにスケール値として代入してます。
次
text -label "球体の作成";
これはウィンドウに表示するようのタイトルです。
floatSliderGrp -label "半径" -field true -min 0.1 -max 20.0 -step 0.1 -value 1.0 radiusSlider;
ここでスライダーを作成、設定します。
「floatSliderGrp」スライダーのタイプ
「-label "半径"」表示される名前
「-field true」上のラベルを表示するかどうか
「-min 0.1 -max 20.0 -step 0.1 -value 1.0 radiusSlider」
最小、最大、増分値、デフォルト値、スライダーの名前を設定。」
このスライダーかなりいいですね。
色々と使えそうっす。
SIだと、
var oP = ActiveSceneRoot.AddProperty('CustomProperty',false,"OPI" ); var Sp = oP.AddParameter3("Rad",siDouble,1,1,100); var oL, oItem; oL = oP.PPGLayout; oL.AddGroup("球作成"); oL.AddRow(); oL.AddItem("Rad","半径"); oL.EndRow(); oL.AddButton("Set","作成"); oL.EndGroup(); oL.Logic = Set_OnClicked.toString(); oL.Language = "JScript" ; function Set_OnClicked() { var Rad_V = PPG.Rad.value; var Sphere = CreatePrim("Sphere", "NurbsSurface"); SetValue(Sphere+".sphere.radius", 1); Scale(Sphere, Rad_V, Rad_V, Rad_V); } InspectObj( oP, null, null, siLock );
こんな感じ。
やっぱ長いっすね。
けどSIの方がわかりやすいかも。。
MAYAとのスライダー感が微妙に違うんすよね。
では他にもリアルタイム版として以下もあります。
sphere; window -title "attrFieldSliderGrp"; columnLayout; text -label "球体のスケール値"; attrFieldSliderGrp -label "スケール X" -min 0.1 -max 20.0 -at nurbsSphere1.sx; showWindow;
これ上のコマンドだとセットして作成ですが、このコードは
リアルタイムでスケール値を変えてくれます。
※地味MAYAのバージョンが違いますねw
Si版では
var oP = ActiveSceneRoot.AddProperty('CustomProperty',false,"OPI" ); var Sp = oP.AddParameter3("Rad",siDouble,1,0,100); var oL, oItem; oL = oP.PPGLayout; oL.AddGroup("球スケール"); oL.AddRow(); oL.AddItem("Rad","Xスケール"); oL.EndRow(); oL.EndGroup(); oL.Logic = Rad_OnChanged.toString(); oL.Language = "JScript" ; function Rad_OnChanged() { var Rad_V = PPG.Rad.value; var oSel = Selection(0); SetValue(oSel+".kine.local.sclx", Rad_V ); } InspectObj( oP, null, null, siLock );
はい、まえのやつと変わりませんね。
こんな感じでした。
次はチェックボックス。
うむ。。
では…