チュートリアル > 非四角形ポリゴンの選択 |
MAXScript によって、編集可能な Poly オブジェクトのデータにアクセスし、ポリゴン、頂点、エッジの関係を公開することができるようになります。ポリゴンのモデリングを使用する際、通常はすべてのポリゴンを四角形にしておきます。以下のスクリプトで、4 つのエッジより少ない、または多いすべてのポリゴンを選択します。
関連トピック:
全体の流れ: |
ボタン、メニュー項目またはショートカットとして使用できる macroScript としてコードをパッケージ化します。 |
編集可能な Poly ベース オブジェクトによる単一のオブジェクトが選択された場合にのみ有効です。 |
実行された場合は、選択されたオブジェクトの基本オブジェクトを取得します。 |
基本オブジェクト内のすべてのポリゴンを巡回し、そのエッジについて尋ねます。 |
エッジが正確に 4 個でない場合はエッジ数をカウントし、ポリゴンのインデックスを記憶します。 |
四角形でないすべてのポリゴンを選択します。 |
[修正](Modify)タブの[ポリゴン サブオブジェクト レベル](Polygon Sub-Object Level)に移動します。 |
MAXScript |
macroscript SelectNonQuadPolys category: "HowTo" ( on isEnabled return ( selection.count == 1 and classOf selection[1].baseobject == Editable_Poly ) on execute do ( local face_selection = #{} local base_obj = $.baseobject local num_faces = polyop.getNumFaces base_obj for f = 1 to num_faces do ( local num_face_verts = polyop.getFaceDeg base_obj f if num_face_verts != 4 do face_selection[f] = true )--end f loop polyop.setFaceSelection base_obj face_selection max modify mode modPanel.setCurrentObject base_obj subobjectlevel = 4 )--end on execute )--end script |
Macroscript SelectNonQuadPolys category:"HowTo" (
macroScript は SelectNonQuadPolys と呼ばれます。スクリプトを使用する場合は、[カスタマイズ...](Customize...)を使用してスクリプトを[HowTo]カテゴリからツールバー、メニュー、またはクアッド メニューにドラッグするか、キーボード ショートカットを割り当てることができます。
on isEnabled return ( selection.count == 1 and classOf selection[1].baseobject == Editable_Poly )
isEnabled ハンドラは true または false を返し、ボタンやメニュー項目が有効な状態かどうかを判別します。 true の場合、ボタンは利用可能です。 false の場合は、淡色表示されます。return 式では、シーン内でただ 1 つのオブジェクトが選択されているかどうか、およびその基本オブジェクトのクラスが編集可能な Poly かどうかがチェックされます。スクリプトは、両方の条件を満たしたオブジェクトに対してのみ機能します。
on execute do (
on Execute ハンドらは、ボタンを押す、メニューから選択する、ショートカットを押すなどして macroScript が実行されるたびに実行されます。ハンドラには、スクリプトの「本体」が含まれています。
Macroscript_Body_Event_Handlers
local face_selection = #{}
選択されたポリゴンを格納するためのユーザ変数が必要です。その変数を空の BitArray Array_Values に初期化します。
local base_obj = $.baseobject
このスクリプトは、基本オブジェクトに対してのみ機能します。つまり、選択されたオブジェクトの基本オブジェクトの頂点にモディファイヤがある可能性がありますが、ポリゴンのモデリングは通常基本レベルで行われるので、そのようなモディファイヤは考慮されません。isEnabled ハンドラ内でただ 1 つのオブジェクトが選択されていることが既に確認されているため、複数のオブジェクトが含まれている可能性を考慮せずに、$ を使用して選択されたオブジェクトにアクセスすることができます。
local num_faces = polyop.getNumFaces base_obj
オブジェクト内を巡回するために、オブジェクト内の面の数が必要です。
for f = 1 to num_faces do (
基本オブジェクト内のすべてのポリゴンを巡回します。 f には、チェックされる現在のポリゴンのインデックスが含まれます。
local num_face_verts = polyop.getFaceDeg base_obj f
次に、現在のポリゴン内の頂点の数を取得します。
if num_face_verts != 4 do face_selection[f] = true
頂点の数が 4 でない場合は、そのポリゴンを選択して、現在の面に対応する bitArray 内のビットを true に設定する必要があります。
)--end f loop polyop.setFaceSelection base_obj face_selection
すべてのポリゴンをチェックした後は、収集されたすべてのポリゴンを選択するだけです。
max modify mode
選択の結果をユーザに示すために、最初にコマンド パネルを修正モードに切り換えます。
modPanel.setCurrentObject base_obj
次に、スタック ビュー内の現在のオブジェクトをチェック済みの基本オブジェクトに設定します。
subobjectlevel = 4
最後に、[ポリゴン サブオブジェクト](Polygon Sub-Object)レベルに切り換えて、選択されたポリゴンを表示します。
)--end on execute )--end script
スクリプトを使用する場合は、[カスタマイズ...](Customize...)を使用してスクリプトを[HowTo]カテゴリからツールバー、メニュー、またはクアッド メニューにドラッグするか、キーボード ショートカットを割り当てることができます。編集可能な Poly 基本オブジェクトのある単独のオブジェクトを選択すると、スクリプトが有効になります。実行すると、非四角形のポリゴンが選択されます。
戻る