チュートリアル - 非四角形ポリゴンの選択

チュートリアル > 非四角形ポリゴンの選択

MAXScript によって、編集可能な Poly オブジェクトのデータにアクセスし、ポリゴン、頂点、エッジの関係を公開することができるようになります。ポリゴンのモデリングを使用する際、通常はすべてのポリゴンを四角形にしておきます。以下のスクリプトで、4 つのエッジより少ない、または多いすべてのポリゴンを選択します。

関連トピック:

マクロ スクリプトの定義と有効化

有効なポリゴン データへのアクセス

[修正](Modify)パネルへのアクセス

全体の流れ:

ボタン、メニュー項目またはショートカットとして使用できる 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 かどうかがチェックされます。スクリプトは、両方の条件を満たしたオブジェクトに対してのみ機能します。

ClassOf

一般的なノードのプロパティ

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

オブジェクト内を巡回するために、オブジェクト内の面の数が必要です。

Editable_Poly メソッド

for f = 1 to num_faces do
(

基本オブジェクト内のすべてのポリゴンを巡回します。 f には、チェックされる現在のポリゴンのインデックスが含まれます。

for ループ

local num_face_verts = polyop.getFaceDeg base_obj f

次に、現在のポリゴン内の頂点の数を取得します。

Editable_Poly メソッド

if num_face_verts != 4 do face_selection[f] = true

頂点の数が 4 でない場合は、そのポリゴンを選択して、現在の面に対応する bitArray 内のビットを true に設定する必要があります。

配列の値

)--end f loop
polyop.setFaceSelection base_obj face_selection

すべてのポリゴンをチェックした後は、収集されたすべてのポリゴンを選択するだけです。

Editable_Poly メソッド

max modify mode

選択の結果をユーザに示すために、最初にコマンド パネルを修正モードに切り換えます。

max コマンド

modPanel.setCurrentObject base_obj

次に、スタック ビュー内の現在のオブジェクトをチェック済みの基本オブジェクトに設定します。

[修正](Modify)パネル

subobjectlevel = 4

最後に、[ポリゴン サブオブジェクト](Polygon Sub-Object)レベルに切り換えて、選択されたポリゴンを表示します。

subObjectLevel

)--end on execute
)--end script 

スクリプトの使い方

スクリプトを使用する場合は、[カスタマイズ...](Customize...)を使用してスクリプトを[HowTo]カテゴリからツールバー、メニュー、またはクアッド メニューにドラッグするか、キーボード ショートカットを割り当てることができます。編集可能な Poly 基本オブジェクトのある単独のオブジェクトを選択すると、スクリプトが有効になります。実行すると、非四角形のポリゴンが選択されます。

戻る

「チュートリアル」のインデックス ページ