ON-BLOG

CGのこと、あれこれ書いてます。

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」に設定するというものです。
f:id:tommy_on:20130615235602p:plain
いいですね。
とてもシンプルですね。

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 );

f:id:tommy_on:20130616000154j:plain
長い長い。
まぁ仕様は少し違うんですが、挙動は一緒です。
こう見ると、コード長さではMEL側に軍配が上がるような気がします。

このまま続けようと思ったんですが、一度切ります。。


では…