2011年8月29日月曜日

scriptのすすめ3 ~showpropertiesとinstance~

今回は、前回のスクリプトを拡張していきましょう。

まず、ポイントを作成する所を少し拡張です。
他のオブジェクトの例も交えながら説明すると、
作成時に、オブジェクトの持っているプロパティの値を指定し作りたい場合は
以下のように書きます。

point size:10
box length:10 width:10 height:10 lengthsegs:3
teapot radius:10


ってな感じです。
指定したいパラメータだけ書けば大丈夫で、書かなかったプロパティはデフォルト値になります。

デフォルト値で作成後、編集という形をとるならば、
boxの例だけをとると

a = box()
a.length=10
a.width=10
a.height=10
a.lengthsegs=3


といった書き方になります。

ですが、オブジェクトのプロパティをスクリプトでどの様に書くか知っていないと指定も出来ませんよね?
UIに書いてある値(英語版の3dsmax)と一緒の場合もありますが、違う場合もあります。


ヘルプでその都度調べても良いのですが、結構面倒ですよね。
ここで、便利なshowpropertiesというスクリプトがあります。

showproperties $


オブジェクトを1つ選択して、実行すると選択オブジェクトの持つプロパティを
リスナーに表示してくれます。


maxscriptで$は特殊な意味をもっていて、選択オブジェクト(1つ)という意味です。
複数選択しているときには使えません。

他にも$は名前でオブジェクトを指定して使う場合にも使います。
例えば、シーンにtepot01とい名前のオブジェクトがある場合、
$teapot01.pos = [10,10,10] 

showproperties $teapot01
の様な書き方が出来ます。

脱線したので、元に戻ります。

前回の選択オブジェクト達に親を作るスクリプトですが、もう少し便利にしてみましょう。

myP = point box:on
for o in selection do
(
    np = instance myP
    np.wirecolor = (color 14 255 2)
    np.rotation = o.rotation
    np.pos = o.pos
    o.parent=np   
)

delete myP
ctrl+Eで実行です。























このスクリプトは、ポイントを1つ作り
選択オブジェクトの数ぶんインスタンスコピーし、それらを回転を合わせ配置し、親とします。

最後のdelete myPとしているのは、最初に作ったmyPは
forループでコピー作成後不要なので消しています。

スクリプトをそのまま日本語訳すると

pointを作ります。それをmyPとします。
forループを選択オブジェクトの回数まわします。
(
    np はmyPのインスタンスコピーです。
    npのワイヤーカラーはcolor 14 255 2です。
    npの回転値は、oの回転値です。
    npの位置は、o(選択オブジェクト)の位置です。
    o(選択オブジェクト)の親は、npです。
)
myPを消します。 

np = instance myP
を少し補足すると、何かのインスタンスコピーを作るとき

instance オブジェクト

と書きます。

他にただのコピー、参照コピーを作るメソッドがあります。

copy オブジェクト
reference オブジェクト

今回はこの辺で、では。

0 件のコメント :