2012年7月6日金曜日

MAXScript オブジェクトのトランスフォームをシャッフル

日頃簡単なスクリプトをちょいちょい書くことがあるので、晒してみようかなという試み。
需要があるかも不明ですし、もっと簡単な書き方とかあるかもしれませんが・・・。

今日書いたのは、オブジェクトのトランスフォームをシャッフルするスクリプト。
大量に置いた物体のこれとこれを入れ替えて・・・って面倒なので、
このスクリプトを気に入った配置になるまで実行みたいな感じで使いました。
選択しているオブジェクトに対して実行されます。

for文と配列の知識だけあればいいのでとても簡単です。

t = #()
obj = selection as array


for i = 1 to obj.count do ( t[i] = obj[i].transform )

for i = 1 to obj.count do
(
  x = random 1 obj.count
  obj[x].transform = t[i]
  deleteItem obj x
)


---------------
.transform のところを .pos とかに書き換えれば位置だけ差し替えとかになります。

※注意点
今回 obj = selection as array という面倒臭い事をしています。
大抵の処理は obj = selection で問題なく走るのですが、obj = selection と定義するとobjの中身は$selectionという状態になります。$selectionも配列なので$selection[1].transformのような書き方が出来るのですが選択しているオブジェクトの配列なので、deleteItem で配列を編集しようとするとエラーが出てしまいます。なので、今回は面倒ですが、一度obj = selection as arrayとしてオブジェクトの配列として格納させました。

0 件のコメント:

コメントを投稿