ON-BLOG

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

XSIユーザーから観たMELスクリプトについて 其の三

続き


次は「アトリビュート」について。
SIではプロパティでしょうか?※パラメーター?

SIでは、

null.kine.local「.posx」

括弧の部分ですかね。
SIなら上記のやり方やいろんなやり方がありますが、
MAYAではどうでしょうか?

string  $sname[] = `sphere`;
float $tx = `getAttr (&sname[0] + ".tx")`;

これで
「sphere.translateX」が取得できました。
う~んSIとは大きく変わりませんが、
すごく違和感があります。
特にKineが無い所や、わざわざ「getAttr」しないといけない所。




逆にセットする場合はSIだと

SetValue("sphere5.kine.local.posx", 10, null);

これでローカルのPOSXに10移動してます。


ではMAYAでは

string  $sname[] = `sphere`;
setAttr ($sname[0] + ".tx") 10.0;

はい、getAttrの逆ですね、
気をつけないといけない部分は
「``」で括っていない所ですね。
Getはいるのにね。。。


あと、こんなやり方もいけるみたいです。

select nurbsSphere1;
setAttr .tx 2.5;
setAttr .ty 3.0;
setAttr .tz 5.2;

これは便利ですね。



じゃ続けてもう一個
実践ぽいやつ。

まずはMAYA。

global proc spiralObjects1(float $rad,int $num)
{
        int $i;
        float $r = 0.0;
        float $y = 0.0;
        string $name[];
        
        for($i = 0 ; $i < $num ; $i++)
                {
                $name = `sphere`;
                setAttr($name[0] + ".tx") $rad;
                rotate -ws -p 0 0 0  0 $r 0;
                setAttr($name[0] + ".ty") $y;
                $r += 30.0;
                $y += 0.5;
                }
}

これは球を螺旋状に配置していくスクリプトです。
f:id:tommy_on:20130614004539p:plain
これをSIに置き換えるとこんな感じ。
もっとスマートなやり方あるはずですが、ひとまず。

spiralObjects1(5.0,30);
function spiralObjects1(rad,num)
{
        var r = 0.0;
        var y = 0.0;
        for(var i = 0 ; i < num ; i++)
                {
                var name = CreatePrim("Sphere", "NurbsSurface");
                SetValue(name+".sphere.radius", 1);
                SetValue(name+".kine.local.posx", rad, null);
                TranslatePivot(name,0,0,0);
                Rotate(name, 0, r, 0 , siRelative, siGlobal, siObj, siXYZ, null, null, null, null, null, null, null, 0, null);
                SetValue(name+".kine.local.posy", y, null);
                r += 30.0;
                y += 0.5;
                }
                
}

f:id:tommy_on:20130614004445j:plain

ここまで見ていくと、簡単なやつは簡単に置き換えができそうです。

こんな感じでMAYAでかなり重要なアトリビュートの所でした。



では…