_581x100.png CGsyomei_583x102.gif 訪問者 無料カウンター ページビュー 無料カウンター

2011年07月25日

選択したポリゴン面の一括デタッチとその注意事項

detach_result.jpg

編集可能ポリゴンの選択したポリゴン面を全て一括でデタッチして別オブジェクトにしようと思い色々調べたところ次のようなスクリプトを見つけました。

poly_count = polyop.getNumFaces $

for i = poly_count to 1 by -1 do

(
   polyOp.detachFaces $ #{i} asNode:true name:"Object01"

)

使い方は、編集可能ポリゴンにしたオブジェクトのポリゴン面を選択し、スクリプトを実行するだけです。各ポリゴンはObject01と名前のついたそれぞれ別オブジェクトになります。


スクリプトのヘルプによれば、polyop.getNumFaces $は選択したポリゴン面の数を返し、 polyop.detachFaces $は選択しているポリゴン面をそれぞれデタッチします。後ろについているasNode:trueはデタッチした後に別ノード、つまり別オブジェクトにするかということで、name:"explodedObject"は別オブジェクトにしたものに名前をつけるためのオプションです。

 このスクリプトを見ててどうも腑に落ちないところがあったのですが、それはなぜfor i = poly_count to 1 by -1 do と、トータルのポリゴン面数から1へと数字を繰り下げながらfor loopを回しているのかということです。ちなみにこのように

poly_count = polyop.getNumFaces $

for i = 1 to poly_count do

(
polyOp.detachFaces $ #{i} asNode:true name:"Object01"

)

1から順に処理していく方法だと以下のようなエラーが出てfor loopの4回目以降が走りません。

-- Frame:
-- i: 4
-- Runtime error: EPoly face index out of range: < 1 or > 3: 4


これに関してツイッターで質問をしたところ、@k240さんと@daiiiさんに非常に分かりやすく説明して頂きました。

続きを読む
posted by けゑ at 07:51| Comment(2) | TrackBack(0) | Max Script