XSIユーザーから観たMELスクリプトについて 其の七
次はチェックボックスについて。
MELではこのようにしてチェックボックスを使います。
global proc makeSphere() { global string $checkBox1; global string $checkBox2; global string $checkBox3; float $val = 1.0; float $x = 1.0; float $y = 1.0; float $z = 1.0; $val = `floatSliderGrp -q -value scaleSlider`; if(`checkBox -q -value $checkBox1`) { $x = $val; } if(`checkBox -q -value $checkBox2`) { $y = $val; } if(`checkBox -q -value $checkBox3`) { $z = $val; } sphere; scale $x $y $z; } string $windowName = `window -title "チェックボックス 1"`; columnLayout; text -label "球体作成"; string $checkBox1 = `checkBox -label "スケールX"`; string $checkBox2 = `checkBox -label "スケールY"`; string $checkBox3 = `checkBox -label "スケールZ"`; floatSliderGrp -label "スケール" -field true -min 0.1 -max 10.0 -step 0.1 -value 1.0 scaleSlider; button -label "作成" -command "makeSphere()"; button -label "閉じる" -command ("deleteUI " + $windowName); showWindow;
XYZに対してチェックボックスがあり、オンにした部分のみスライダーの値が
スケールに入り、無い時はデフォルトの「1」に設定するというものです。
いいですね。
とてもシンプルですね。
string $checkBox1 = `checkBox -label "スケールX"`;
この部分がチェックボックスを構成する所ですね。
labelは表示名です。
ではSIではこうなります。
var oP = ActiveSceneRoot.AddProperty('CustomProperty',false,"OPI" ); oP.AddParameter3("Rad",siDouble,1,1,100); oP.AddParameter3("X",siBool,true); oP.AddParameter3("Y",siBool,true); oP.AddParameter3("Z",siBool,true); var oL, oItem; oL = oP.PPGLayout; oL.AddGroup("球作成"); oL.AddRow(); oL.AddItem("X","Xスケール"); oL.EndRow(); oL.AddRow(); oL.AddItem("Y","Yスケール"); oL.EndRow(); oL.AddRow(); oL.AddItem("Z","Zスケール"); oL.EndRow(); oL.AddRow(); oL.AddItem("Rad","スケール"); oL.EndRow(); oL.AddButton("Set","作成"); oL.EndGroup(); oL.Logic = Set_OnClicked.toString(); oL.Language = "JScript" ; function Set_OnClicked() { var VX = PPG.X.value; var VY = PPG.Y.value; var VZ = PPG.Z.value; var Rad_V = PPG.Rad.value; var Sphere = CreatePrim("Sphere", "NurbsSurface"); var X = 1; var Y = 1; var Z = 1; SetValue(Sphere+".sphere.radius", 1); if(VX){X = Rad_V;} if(VY){Y = Rad_V;} if(VZ){Z = Rad_V;} Scale(Sphere, X, Y, Z); } InspectObj( oP, null, null, siLock );
長い長い。
まぁ仕様は少し違うんですが、挙動は一緒です。
こう見ると、コード長さではMEL側に軍配が上がるような気がします。
このまま続けようと思ったんですが、一度切ります。。
では…