Editable_Poly メソッド

 

   

編集可能ポリゴン - クイック ナビゲーション

次のトピックでは Editable_Poly 基本オブジェクトに集約されるオブジェクトに適用される polyOp メソッドを一覧表示します。

トピック ナビゲーション

 

選択の取得/設定

フラグによる取得

カウントの取得

非表示の取得/設定

エッジの可視性

開いたエッジ

面による取得

エッジによる取得

無効な要素の取得

無効な構造

面マテリアル ID

頂点の操作

B を使用した A の取得

面、中心、法線、範囲の取得

アタッチ

削除

連結

作成

自動スムーズ

三角形化

サブディビジョン

面スムージング グループ

ブレーク/分割/スプリット

集約

フラグの伝播

面分割

デタッチ

スライス平面

カット (Cut)

キャップ ホール

平面化

エッジからのシェイプの作成

押し出し/ベベル/面取り

polyOp メソッドの最初の引数について:

すべての polyOp メソッドには、引数 <poly> (操作するポリゴン)を指定します。基本オブジェクトが編集可能ポリゴンであるノードの値、または編集可能ポリゴンの基本オブジェクトを指定できます。

polyOp メソッドのサブオブジェクトの引数について:

ほとんどの polyOp メソッドには、引数として <vertlist>、<facelist>、または <edgelist> を指定します。

これらの引数には、操作するサブ オブジェクトサブオブジェクト要素を指定します。

これらの引数には、次のパラメータを指定できます。

#all - そのタイプのすべてのサブオブジェクト要素。

#selection - そのタイプの現在選択されているサブオブジェクト。

#none - そのタイプのサブオブジェクト要素を除外する。

サブオブジェクト要素のインデックスを表す整数の配列。

サブオブジェクト要素のインデックスを表す bitarray。

サブオブジェクト要素のインデックスを表す整数に変換できる値。

VertexSelection、EdgeSelection、または FaceSelection の値。値のタイプは、指定した サブオブジェクト タイプに一致していなければなりません。

Editable_Poly の無効なサブオブジェクト要素について

編集可能ポリゴンには、「無効な」頂点、エッジ、および面が含まれることがあります。

無効なサブオブジェクト要素とは、ポリゴンからは削除されているが、対応するサブオブジェクト要素のリストから削除されていないもののことです。

これらのサブオブジェクト要素は、そのポリゴンに対して特定の操作を実行したときに無効とマークされます。ただし、サブオブジェクト要素のリストが集約される(無効なサブオブジェクト要素がすべて削除される)のは、通常はその操作が終了したときです。つまり、そのポリゴンには通常、無効なサブオブジェクト要素は存在しません。

サブオブジェクト要素を polyOp メソッドの 1 つを使用して無効としてマークした場合は、 polyOp.collapseDeadStructs() を呼び出してサブオブジェクト要素のリストを集約する必要があります。

サブオブジェクト要素のフラグを取得/設定するメソッド以外では通常、無効なサブオブジェクト要素は polyOp メソッドによって無視されます。メソッドが OK 以外の値を返し、指定されている引数が 1 つの サブオブジェクト要素インデックスだけで、かつその SO 要素が無効な場合は、通常、 undefined の値が返されます。

選択の取得/設定

polyop.getVertSelection <Poly poly>

現在の頂点選択を bitarray として返します。

   

polyop.setVertSelection <Poly poly> <vertlist>

<vertlist> に基づいて現在の頂点選択を設定します。

   

polyop.getEdgeSelection <Poly poly>

現在のエッジ選択を bitarray として返します。

   

polyop.setEdgeSelection <Poly poly> <edgelist>

<vertlist> に基づいて現在のエッジ選択を設定します。

   

polyop.getFaceSelection <Poly poly>

現在の面選択を bitarray として返します。

   

polyop.setFaceSelection <Poly poly> <facelist>

<facelist> に基づいて現在の面選択を設定します。

フラグによる取得

polyop.getVertsByFlag <Poly poly> <int flag> mask:<int maskflag>

ポリゴンの各頂点には、32 ビット フラグ変数が含まれます。

このメソッドは、このフラグ変数内の特定のビットが設定されている頂点の bitarray を返します。テストされるビットは、<flag> および <maskflag> の組み合わせに基づいて決定されます。

<maskflag> の既定値は 0 です。

内部的には、<maskflag> が 0 の場合、<maskflag><flag> 値に設定され、それ以外の場合、<flag><flag> および <maskflag> の bitwise-AND に設定されます。次に <maskflag> のビット 2 が設定されます。このビットが <mask> 内に設定されていない限り、返された bitarray に無効な頂点が含まれることはありません。フラグ変数と maskflag> の bitwise-AND が、<flag><maskflag> の bitwise-AND と同一である場合は、返された bitarray の各ビットが設定されます。

頂点レベル フラグは次のとおりです。

ビット 1 : 頂点が選択されている

ビット 2 : 頂点が無効

ビット 3 : 予約ビット

ビット 4 : 頂点面が現在のビューポートの「後方」を向いていることを示す

ビット 5 ~ 24 : 予約ビット

ビット 25 ~ 32 : 一般的な用途に使用可能

theObj = plane isSelected:true
convertto theObj editable_poly
nVerts = theObj.numverts
bit30 = bit.set 0 30 true
bit31 = bit.set 0 31 true
bit32 = bit.set 0 32 true
-- set a bit on first 3/4 or so verts
(
flagsToSet = bit30
flagsToMask = 0
vertexSet = #{1..(3*nVerts/4)}
theObj.setVertexFlags vertexSet flagsToSet flagMask:flagsToMask generateUndoRecord:true
ok
)
-- and another on middle block
(
flagsToSet = bit31
flagsToMask = 0
vertexSet = #{(nVerts/3)..(nVerts-4)}
theObj.setVertexFlags vertexSet flagsToSet flagMask:flagsToMask generateUndoRecord:true
ok
)
-- set a bit on last 2 verts
(
flagsToSet = bit32
flagsToMask = 0
vertexSet = #{(nVerts-2)..nVerts}
theObj.setVertexFlags vertexSet flagsToSet flagMask:flagsToMask generateUndoRecord:true
ok
)
(
-- get verts with bit30, 31, 32 set
format "30: %\n" (polyOp.getVertsByFlag theObj bit30)
format "31: %\n" (polyOp.getVertsByFlag theObj bit31)
format "32: %\n" (polyOp.getVertsByFlag theObj bit32)
-- get verts with bit30 set, but not bit31
format "30 and !31: %\n" (polyOp.getVertsByFlag theObj bit30 mask:(bit30+bit31))
-- get verts with bit31 not set, doesn't matter what the <flag>
-- value is as long as it's not bit31
format "!31: %\n" (polyOp.getVertsByFlag theObj bit30 mask:(bit31))
-- get verts with bit30 and bit31 set
format "30 and 31: %\n" (polyOp.getVertsByFlag theObj (bit30+bit31))
-- get verts with neither bit31 or bit32 set, doesn't matter what
-- the <flag> value is as long as it's not bit31 or bit32
format "!(31 or 32): %\n" (polyOp.getVertsByFlag theObj bit30 mask:(bit31+bit32))
)
polyop.getVertFlags <Poly poly> <int vert>

頂点のフラグ ビットを整数として返します。

   

polyop.setVertFlags <Poly poly> <vertlist> <int flag> \
mask:<int=0> undoable:<boolean=false>

指定された頂点のフラグ ビットを <flag> のビットに設定します。

mask が指定された場合、 mask: 値に設定されたビットは、指定された頂点のフラグ ビットの設定前に、ポリゴン内のすべての頂点でクリアされます。

undoable:true が指定された場合、この操作はやり直し可能です。<flag> のビット 1 またはビット 2 が設定された場合(選択されたフラグ ビットまたは無効なフラグ ビット)、この操作は常にやり直し可能です。

p=convertToPoly (plane())
p.selectedVerts = #{10..20}
i=1 -- selected bit
j=bit.set 0 30 true -- bit 30 set
oldflags = for k = 1 to p.numverts collect polyop.getVertFlags p k
theSet=#{5..15}
polyop.setvertflags p theSet j mask:i
for k = 1 to p.numverts do
(
nf=polyop.getVertFlags p k
format "% : % : %\n" k nf oldflags[k]
oldflags[k]=nf
)
j=bit.set 0 1 true -- bit 1 set
polyop.setvertflags p theSet j
for k = 1 to p.numverts do
(
nf=polyop.getVertFlags p k
format "% : % : %\n" k nf oldflags[k]
)
polyop.getEdgesByFlag <Poly poly> <int flag> \
mask:<int maskflag>

ポリゴンの各エッジには、32 ビット フラグ変数が含まれます。このメソッドは、このフラグ変数内の特定のビットが設定されているエッジの bitarray を返します。テストされるビットは、<flag> および <maskflag> の組み合わせに基づいて決定されます。

<maskflag> の既定値は 0 です。

内部的には、<maskflag> が 0 の場合、<maskflag><flag> 値に設定され、それ以外の場合、<flag><flag>> および <maskflag> の bitwise-AND に設定されます。次に <maskflag> のビット 2 が設定されます。このビットが <mask> 内に設定されていない限り、返された bitarray に無効なエッジが含まれることはありません。フラグ変数と maskflag> の bitwise-AND が、<flag><maskflag> の bitwise-AND と同一である場合は、返された bitarray の各ビットが設定されます。

エッジ レベル フラグは次のとおりです。

ビット 1 : エッジが選択されている

ビット 2 : エッジが無効

ビット 3 : 予約ビット

ビット 4: 頂点面が現在のビューポートの「後方」を向いていることを示す

ビット 5 ~ 24: 予約ビット

ビット 25 ~ 32: 一般的な用途に使用可能

   

polyop.getEdgeFlags <Poly poly> <int edge>

エッジのフラグ ビットを整数として返します。

   

polyop.setEdgeFlags <Poly poly> <edgelist> <int flag> \
mask:<int=0> undoable:<boolean=false>

指定されたエッジのフラグ ビットを <flag> のビットに設定します。mask が指定された場合、 mask: 値に設定されたビットは、指定されたエッジのフラグ ビットの設定前に、ポリゴン内のすべてのエッジでクリアされます。 undoable:true が指定された場合、この操作はやり直し可能です。<flag> のビット 1 またはビット 2 が設定された場合(選択されたフラグ ビットまたは無効なフラグ ビット)、この操作は常にやり直し可能です。

   

polyop.getFacesByFlag <Poly poly> <int flag> mask:<int maskflag>

ポリゴンの各面には、32 ビット フラグ変数が含まれます。このメソッドは、このフラグ変数内の特定のビットが設定されている面の bitarray を返します。テストされるビットは、<flag> および <maskflag> の組み合わせに基づいて決定されます。

<maskflag> の既定値は 0 です。

内部的には、<maskflag> が 0 の場合、<maskflag><flag> 値に設定され、それ以外の場合、<flag><flag>> および <maskflag> の bitwise-AND に設定されます。次に <maskflag> のビット 2 が設定されます。このビットが <mask> 内に設定されていない限り、返された bitarray に無効な面が含まれることはありません。フラグ変数と maskflag> の bitwise-AND が、<flag><maskflag> の bitwise-AND と同一である場合は、返された bitarray の各ビットが設定されます。

面レベル フラグは次のとおりです。

ビット 1 : 面が選択されている

ビット 2 : 面が無効

ビット 3 : 予約ビット

ビット 4 : 頂点面が現在のビューポートの「後方」を向いていることを示す

ビット 5 ~ 24 : 予約ビット

ビット 25 ~ 32 : 一般的な用途に使用可能

   

polyop.getFaceFlags <Poly poly> <int face>

面のフラグ ビットを整数として返します。

   

polyop.setFaceFlags <Poly poly> <facelist> <int flag> \
mask:<int=0> undoable:<boolean=false>

指定された面のフラグ ビットを <flag> のビットに設定します。

mask: が指定された場合、 mask: 値に設定されたビットは、指定された面のフラグ ビットの設定前に、ポリゴン内のすべての面でクリアされます。

undoable:true が指定された場合、この操作はやり直し可能です。

<flag> のビット 1 またはビット 2 が設定された場合(選択されたフラグ ビットまたは無効なフラグ ビット)、この操作は常にやり直し可能です。

カウントの取得

polyop.getNumVerts <Poly poly>

ポリゴンの頂点の数を返します。すべての無効な頂点を含みます。

   

polyop.getNumEdges <Poly poly>

ポリゴンのエッジの数を返します。すべての無効なエッジを含みます。

   

polyop.getNumFaces <Poly poly>

ポリゴンの面の数を返します。すべての無効な面を含みます。

非表示の取得/設定

polyop.getHiddenVerts <Poly poly>

対応する頂点が非表示の場合は、ビットが設定された bitarray が返されます。

   

polyop.setHiddenVerts <Poly poly> <vertlist>

ポリゴンの対応する頂点が非表示になります。

   

polyop.getHiddenFaces <Poly poly>

対応する面が非表示の場合は、ビットが設定された bitarray が返されます。

   

polyop.setHiddenFaces <Poly poly> <facelist>

ポリゴンの対応する面が非表示になります。

   

polyop.unHideAllFaces <Poly poly>

ポリゴンのすべての面を表示します。

   

polyop.unHideAllVerts <Poly poly>

ポリゴンのすべての頂点を表示します。

エッジの可視性

polyop.getEdgeVis <Poly poly> <int edge>

指定されたエッジが表示される場合は true 、それ以外の場合は false を返します。

   

polyop.setEdgeVis <Poly poly> <edgelist> <boolean>

指定されたエッジの可視性を設定します。

開いたエッジ

polyop.getOpenEdges <Poly poly>

対応するエッジが開いている場合は(1 つの面のみで使用)、ビットが設定された bitarray が返されます。

   

polyop.getBorderFromEdge <Poly poly> <int edge>

返された bitarray のビットが、開いたエッジを使用して指定されたエッジに接続されるポリゴンの、開いたエッジに設定されます。

ポリゴンのすべての片面エッジは、ポリゴンの境界を示す端から端までのチェーンにグループ化することができます。たとえば、1 つの側面が削除されているボックスでは、すべての片面エッジが穴の周囲を囲むチェーンの一部になります。指定されたエッジが開いていない場合、返される bitarray は空です。

面による取得

polyop.getFaceVerts <Poly poly> <int face>

面の頂点を配列として返します。配列の頂点の順序は、面の頂点の順序に対応します。

   

polyop.getFaceEdges <Poly poly> <int face>

面のエッジを配列として返します。配列のエッジの順序は、面のエッジの順序に対応します。

   

polyop.getFaceDeg <Poly poly> <int face>

指定された面の頂点の数を返します。

エッジによる取得

polyop.getEdgeVerts <Poly poly> <int edge>

エッジの頂点を 2 つの要素の配列として返します。

   

polyop.getEdgeFaces <Poly poly> <int edge>

指定されたエッジを使用する面を返します。通常は 1 つの要素(開いたエッジ)または 2 つの要素の配列です。

無効な要素の取得

polyop.getDeadVerts <Poly poly>

現在の無効な頂点選択を bitarray として返します。通常は空の bitarray を返します。

   

polyop.getDeadEdges <Poly poly>

現在の無効なエッジ選択を bitarray として返します。通常は空の bitarray を返します。

   

polyop.getDeadFaces <Poly poly>

現在の無効な面選択を bitarray として返します。通常は空の bitarray を返します。

   

polyop.GetHasDeadStructs <Poly poly>

ポリゴンに無効な頂点がある場合は、戻り値の ビット 1 が設定され、無効なエッジがある場合は ビット 2 、無効な面がある場合は ビット 3 が設定されます。

無効

polyop.isFaceDead <Poly poly> <int face>

指定された面が無効の場合、true を返します。

   

polyop.isEdgeDead <Poly poly> <int edge>

指定されたエッジが無効の場合、 true を返します。

   

polyop.isVertDead <Poly poly> <int vert>

指定された頂点が無効の場合、 true を返します。

   

polyop.CollapseDeadStructs <Poly poly>

すべての無効な SO 要素をポリゴンから削除します。

面マテリアル ID

polyop.getFaceMatID <Poly poly> <int face>

面に割り当てられたマテリアル ID です。

   

polyop.setFaceMatID <Poly poly> <facelist> <int MatID>

マテリアル ID を面に割り当てます。

頂点の操作

polyop.getVert <Poly poly> <int vertex> \
node:<node=unsupplied>

指定された頂点の位置を返します。<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、返された位置は現在の座標系コンテキスト内になります。<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、戻り値はポリゴンのローカル座標系内になります。

   

polyop.setVert <Poly poly> <vertlist> {<point3 pos>|<point3 pos_array>} \
node:<node=unsupplied>

指定された頂点の位置を設定します。

<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、位置は現在の座標系コンテキスト内になります。

<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、位置はポリゴンのローカル座標系内になります。

3ds Max 2008 以降では、このメソッドに配列として位置を指定できるようになりました。この場合、<pos_array> の値の数が <vertlist> で指定された頂点の数と一致している必要があります。この機能は、従来、Avguard 機能拡張の一部でした。

   

polyop.moveVert <Poly poly> <vertlist> {<point3 offset>|<point3 offset_array>} \
node:<node> useSoftSel:<bool>

<offset> で指定された頂点を移動します。

<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、オフセットは現在の座標系コンテキスト内になります。

<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、オフセットはポリゴンのローカル座標系内になります。

3ds Max 2008 以降では、このメソッドに配列として位置を指定できるようになりました。この場合、<pos_array> の値の数が <vertlist> で指定された頂点の数と一致している必要があります。この機能は、従来、Avguard 機能拡張の一部でした。

useSoftSel: が true であり、かつメッシュのソフト選択データ チャネルが存在する場合は、指定されたオフセットに頂点のソフト選択値が乗算されます。

注:<vertlist> 引数は、配列ではなく bitArray 値として渡す必要があります。引数を配列として渡すと、パフォーマンスに非常に重大な影響が発生します。これは、サブオブジェクト リストを操作するすべてのメソッドに該当します。

メッシュの充填

polyop.isMeshFilledIn <Poly poly>

エッジのリストなどのすべてのトポロジ関連リンクがポリゴンに対して完全な場合は、 true を返します。

   

polyop.fillInMesh <Poly poly>

MNFace::vtx lists 内の情報に基づいて、内部の MNEdges MNFace::edg MNVert::edg 、および MNVert::fac のリストを再計算します。

B を使用した A の取得

polyop.getEdgesUsingVert <Poly poly> <vertlist>

対応するエッジが <vertlist> 内の頂点の 1 つを使用する場合、返された bitarray のビットが設定されます。

   

polyop.getFacesUsingVert <Poly poly> <vertlist>

対応する面が <vertlist> 内の頂点の 1 つを使用する場合、返された bitarray のビットが設定されます。

   

polyop.getVertsUsingEdge <Poly poly> <edgelist>

対応する頂点が <edgelist> 内のエッジの 1 つを使用する場合、返された bitarray のビットが設定されます。

   

polyop.getFacesUsingEdge <Poly poly> <edgelist>

対応する面が <edgelist> 内のエッジの 1 つを使用する場合、返された bitarray のビットが設定されます。

   

polyop.getVertsUsingFace <Poly poly> <facelist>

対応する頂点が <facelist> 内の面の 1 つを使用する場合、返された bitarray のビットが設定されます。

   

polyop.getEdgesUsingFace <Poly poly> <facelist>

対応するエッジが <facelist> 内の面の 1 つを使用する場合、返された bitarray のビットが設定されます。

   

polyop.getElementsUsingFace <Poly poly> <facelist> fence:<fence_facelist>

返された bitarray のビットが、<facelist> 内の面を持つ同じ「要素」(すなわち、接続されたコンポーネント)内のすべての面に設定されます。

<fence_facelist> が指定された場合、この処理ではそれらの面は「壁」と見なされ、評価されません。つまり、<facelist> に面 i が指定され、その周囲にある面の輪が <fence_facelist> に指定された場合、アルゴリズムはその輪で停止します。

   

polyop.getVertsUsedOnlyByFaces <Poly poly> <facelist>

対応する頂点が <edgelist> 内の面でのみ使用される場合、返された bitarray のビットが設定されます。

面の中心、法線、範囲の取得

polyop.getFaceCenter <Poly poly> <int face> \
node:<node=unsupplied>

面のすべての頂点の平均をとって、面の中心を返します。

<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、返された位置は現在の座標系コンテキスト内になります。

<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、戻り値はポリゴンのローカル座標系内になります。

   

polyop.getSafeFaceCenter <Poly poly> <int face> \
node:<node=unsupplied>

可能な場合には、面の「安全な」中心を返します。

凸型ではない面の場合、 getFaceCenter を使用して検出される平均ポイントは、一部のアプリケーションには不適切です。これは、平均ポイントが完全に面の外側に存在するか、すべての面の頂点を見ることができない領域に存在するためです(中心からコーナーへのライン セグメントが面の外側を通過する)。

安全な中心が検出できない場合、 undefined という値が返されます。

面の凸型カバーの中心を検出する方が適している場合もあります。凸型カバーとは、すべてのコーナーへの明確な視界のラインを持つ面の領域のことです。押し出された文字 M の上面のように、空の凸型ハルを持つ面もあります。このような場合には、このルーチンは失敗し、 ComputeCenter で指定された通常の中心が返されます。

<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、返された位置は現在の座標系コンテキスト内になります。

<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、戻り値はポリゴンのローカル座標系内になります。

   

polyop.getFaceNormal <Poly poly> <int face> \
node:<node=unsupplied>

面の面法線を返します。

<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、返された方向ベクトルは現在の座標系コンテキスト内になります。

<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、戻り値はポリゴンのローカル座標系内になります。

   

polyop.getFaceArea <Poly poly> <int face>

指定された面の範囲を返します。

アタッチ

polyop.attach <Poly poly> <source> \
targetNode:<node=unsupplied> sourceNode:<node=unsupplied>

必要に応じてポリゴン メッシュに変換し、<source><poly> にアタッチします。

<source> または <poly> がノード値ではない場合、対応する targetNode: または sourceNode: を指定する必要があります。

アタッチの実行後にソース ノードが削除されます。

削除

polyop.deleteVerts <Poly poly> <vertlist>

指定された頂点を削除します。

   

polyop.deleteFaces <Poly poly> <facelist> \
delIsoVerts:<boolean=true>

指定された面を削除します。

<delIsoVerts> true の場合、面が使用しなくなった頂点もすべて削除されます。

   

polyop.deleteEdges <Poly poly> <edgelist> \
delIsoVerts:<boolean=true>

指定されたエッジを削除します。

<delIsoVerts> true の場合、エッジが使用しなくなった頂点もすべて削除されます。

PolyOp.deleteEdges() PolyOp.deleteVerts() 、および PolyOp.deleteFaces() の各メソッドの動作は、3ds Max 5 で変更されました。これらのメソッドを使用すると、削除された要素を使用するサブオブジェクトの要素もすべて削除されます。(内部の) Delete メソッドとして使用されていた内容は、(内部の) Remove メソッドになりました。この新しいメソッドは polyOp 構造体を通して公開されるのではないため、EditablePoly インタフェースの Remove メソッドを通して作業する必要があります。

バージョン 4 以上で機能する置き換えられた関数の例を次に示します。

fn polyop_deleteEdges obj which delIsoVerts =
(
if (MaxVersion())[1] >= 5000 then
(
local bit30 = bit.set 0 30 true
polyop.setEdgeFlags obj which bit30
obj.EditablePoly.remove selLevel:#edge flag:bit30
if delIsoVerts == true do polyop.deleteIsoVerts obj
)
else
polyop.deleteEdges obj which delIsoVerts:delIsoVerts
)
polyop.deleteIsoVerts <Poly poly>

面が使用していない頂点をすべて削除します。

連結

polyop.weldVertsByThreshold <Poly poly> <vertlist>

しきい値距離内の指定された頂点を連結します。

しきい値距離は編集可能ポリゴンのプロパティ(weldThreshold)です。

連結できるのは境界線上の頂点のみです。

   

polyop.weldVerts <Poly poly> <int vert1> <int vert2> <point3 location> \
node:<node=unsupplied>

2 つの指定された頂点を連結し、その結果生じる頂点は指定された位置になります。

連結できるのは境界線上の頂点のみです。

<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、場所は現在の座標系コンテキスト内になります。

<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、場所はポリゴンのローカル座標系内になります。

   

polyop.weldEdgesByThreshold <Poly poly> <edgelist>

しきい値距離内の指定されたエッジに関連付けられた頂点を連結します。

しきい値距離は編集可能ポリゴンのプロパティ( weldThreshold )です。

連結できるのは境界線上の頂点のみです。

   

polyop.weldEdges <Poly poly> <int edge1> <int edge2>

指定されたエッジに関連付けられた頂点を連結します。

連結できるのは境界線上の頂点のみです。

作成

polyop.createVert <Poly poly> <point3 pos> \
node:<node=unsupplied>

頂点を指定された位置として作成します。

<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、位置は現在の座標系コンテキスト内になります。

<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、位置はポリゴンのローカル座標系内になります。

作成された頂点のインデックスを返すか、または頂点が作成されていない場合は undefined を返します。

   

polyop.createEdge <Poly poly> <int vert1> <int vert2>

2 つの指定された頂点を使用してエッジを作成します。

これらの頂点を使用するには、共通の面が必要です。

作成されたエッジのインデックスを返します。エッジが作成されていない場合は undefined を返します。

   

polyop.createPolygon <Poly poly> <vertex array>

指定された頂点を使用して面を作成します。

面の頂点の順序は、頂点配列内の順序です。各頂点ペアが連続している場合は、頂点間に存在できるエッジは 1 つだけで、そのエッジを最初の頂点から 2 番目の頂点に移動することはできません。

面が凸型でない場合は、指定された数の頂点を持つ面に対して、既定の三角形化が使用されます。この三角形化が適していないこともあります。

この場合は、この面の作成後、面上で retriangulate() を呼び出します。

作成された面のインデックスを返すか、または面が作成されていない場合は undefined を返します。

自動スムーズ

polyop.autoSmooth <Poly poly>

ポリゴンの自動スムーズを実行します。

面スムージングしきい値角度は編集可能ポリゴンのプロパティ( autoSmoothThreshold )です。

三角形化

polyop.flipNormals <Poly poly> <facelist>

指定された面の法線を反転します。

   

polyop.retriangulate <Poly poly> <facelist>

指定された面を再三角形化します。

   

polyop.setDiagonal <Poly poly> <int face> <int face_vert1> <int face_vert2>

2 つの頂点間にある面の対角線を設定します。

面には 3 度を超える角度が必要であり、2 つの頂点がエッジで接続されないようにする必要があります。

サブディビジョン

polyop.forceSubdivision <Poly poly>

次のビューポートの再描画でサーフェス サブディビジョンを強制的に更新します。

[NURMS サブディビジョン](NURMS Subdivision)がオンで、[更新オプション](Update Options)が[手動](Manually)の場合に使用します。

   

polyop.meshSmoothByVert <Poly poly> <vertlist>

指定された頂点に関連付けられた面をスムージングします。

編集可能ポリゴンの .smoothness .separateBySmoothing 、および .separateByMaterial の各プロパティを使用します。

   

polyop.meshSmoothByFace <Poly poly> <facelist>

指定された面をスムージングします。

編集可能ポリゴンの .smoothness .separateBySmoothing 、および .separateByMaterial の各プロパティを使用します。

   

polyop.meshSmoothByEdge <Poly poly> <edgelist>

指定されたエッジに関連付けられた面をスムージングします。

編集可能ポリゴンの .smoothness .separateBySmoothing 、および .separateByMaterial の各プロパティを使用します。

面スムージング グループ

polyop.setFaceSmoothGroup <Poly poly> <facelist> <int smoothing_group> add:<boolean=false>

指定された面のスムージング グループを設定します。

<smoothing_group> の各ビットの状態は、対応するスムージング グループにその面が属しているかどうかを示します。

<add> true の場合、<smoothing_group> は各面に指定された既存のスムージング グループ データに追加されます。

<add> false の場合、既存のスムージング グループ データが上書きされます。

   

polyop.getFaceSmoothGroup <Poly poly> <int face>

指定された面のスムージング グループ データを整数として返します。

返された各ビットの状態は、対応するスムージング グループにその面が属しているかどうかを示します。

ブレーク/分割/スプリット

polyop.breakVerts <Poly poly> <vertlist>

<vertlist> 内の各頂点に対して、N-1 個の新しい頂点が同じ位置に作成されます。N はその頂点を使用する面の数です。

N はその頂点を使用する面の数です。

   

polyop.divideEdge <Poly poly> <int edge> <float fraction>

エッジに沿って指定された距離(分数)で指定されたエッジを分割します。

戻り値は新しい頂点のインデックスです。頂点が作成されていない場合は、 undefined を返します。

   

polyop.divideFace <Poly poly> <int face> <point3 pos> node:<node=unsupplied>

指定された面を分割し、指定された位置に最も近い面上のポイントに新しい頂点が作成されます。

指定された位置が面の外側にある場合、頂点は面の中心に作成されます。

<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、位置は現在の座標系コンテキスト内になります。

<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、位置はポリゴンのローカル座標系内になります。

作成された頂点のインデックスを返します。

   

polyop.splitEdges <Poly poly> <edgelist>

指定されたエッジを中間で分割します。

集約

polyop.collapseVerts <Poly poly> <vertlist>

指定された頂点にある頂点の各クラスタを単一の頂点に集約します。

頂点クラスタは互いに直接接続された頂点のセットです。

   

polyop.collapseFaces <Poly poly> <facelist>

指定された面にある各面集団に関連付けられた頂点を単一の頂点に集約します。

面集団は互いに直接接続された面のセットです。

   

polyop.collapseEdges <Poly poly> <edgelist>

指定されたエッジにある各エッジ集団に関連付けられた頂点を単一の頂点に集約します。

エッジ集団は互いに直接接続されたエッジのセットです。

フラグの伝播

polyop.propagateFlags <Polypoly> <toSOLevel> <toFlag_int><fromSOLevel> <fromFlag_int> \
ampersand:<boolean=false> set:<boolean=true> undoable:<boolean=true>

ここでは、 toSOLevel/fromSOLevel = {#object | #vertex | #edge | #face} になります。

コンポーネント フラグを伝播します。

フラグ <fromFlag_int> が設定されている各 <fromSOLevel> 要素については、その要素を使用する、またはその要素によって使用される <toSOLevel> 要素に、<toFlag_int> に基づいて内部のフラグ変数ビットが設定されます。

<toFlag_int> に設定されたビットに対応するビットのみが影響を受けます。

<ampersand> false であり、<fromFlag_int> に複数のビットが設定されている場合、<fromSOLevel> 要素は、対応するビットがすべて設定されているかどうかを確認するためにテストされます。 true の場合、<fromSOLevel> コンポーネント要素は、対応するビットがすべて設定されているかどうかを確認するためにテストされます。

<set> true の場合、<toSOLevel> 要素にはフラグ <toFlag_int> が設定されています。 false の場合、これらのフラグがクリアされます。

<undoable> true の場合、操作はやり直し可能ですが、それ以外の場合はやり直しできません。

<toFlag_int> のビット 1 またはビット 2 が設定された場合(選択されたフラグ ビットまたは無効なフラグ ビット)、この操作は常にやり直し可能です。

<fromFlag_int> フラグ対してポジティブと判定された <fromSOLevel> 要素の数を返します。

面分割

polyop.tessellateByVert <Poly poly> <vertlist>

指定された頂点で使用される面を面分割します。

編集可能ポリゴンの .tesselateBy および .tessTension の各プロパティを使用します。

   

polyop.tessellateByFace <Poly poly> <facelist>

指定された面を面分割します。

編集可能ポリゴンの .tesselateBy および .tessTension の各プロパティを使用します。

   

polyop.tessellateByEdge <Poly poly> <edgelist>

指定されたエッジで使用される面を面分割します。

編集可能ポリゴンの .tesselateBy および .tessTension の各プロパティを使用します。

   

デタッチ

polyop.detachFaces <Poly poly> <facelist> delete:<boolean=true> \
asNode:<boolean=false> name:<string="Object01"> node:<node=unsupplied>

指定された面をデタッチします。

<delete> true の場合、面はデタッチ後に削除されます。

<delete> false の場合、面は削除されません。

<asNode> true の場合、面は別のノードとしてデタッチされます。

<asNode> false の場合、面はポリゴンの要素としてデタッチされます。

<asNode> true の場合、<name> は新しいノードの名前を指定します。

<asNode> true であり、<poly> が編集可能ポリゴンである(ノードではない)場合は、<node> を指定する必要があります。

操作が正常に終了した場合は true を返します。

スクリプト

--The following script explodes an EditablePoly object to elements,
--each polygon becomes one element
macroScript PolyToElements category:"Help_Examples"
(
on isEnabled return
selection.count == 1 and classof selection[1].baseobject == Editable_Poly
on execute do
(
obj = selection[1]
for p = polyop.getNumFaces obj to 1 by -1 do
polyOp.detachFaces obj #{p}
)
)

   

polyop.detachEdges <Poly poly> <edgelist> delete:<boolean=true>\
asNode:<boolean=false> name:<string="Object01"> node:<node=unsupplied>

指定されたエッジで使用される面をデタッチします。

<delete> true の場合、面はデタッチ後に削除されます。

<delete> false の場合、面は削除されません。

<asNode> true の場合、面は別のノードとしてデタッチされます。

<asNode> false の場合、面はポリゴンの要素としてデタッチされます。

<asNode> true の場合、<name> は新しいノードの名前を指定します。

<asNode> が true であり、<poly> が編集可能ポリゴンである(ノードではない)場合は、<node> を指定する必要があります。

操作が正常に終了した場合は true を返します。

   

polyop.detachVerts <Poly poly> <vertlist> delete:<boolean=true> \
asNode:<boolean=false> name:<string="Object01"> node:<node=unsupplied>

指定された頂点で使用される面をデタッチします。

<delete> true の場合、面はデタッチ後に削除されます。

<delete> false の場合、面は削除されません。

<asNode> true の場合、面は別のノードとしてデタッチされます。

<asNode> false の場合、面はポリゴンの要素としてデタッチされます。

<asNode> true の場合、<name> は新しいノードの名前を指定します。

<asNode> true であり、<poly> が編集可能ポリゴンである(ノードではない)場合は、<node> を指定する必要があります。

操作が正常に終了した場合は true を返します。

スライス平面

polyop.resetSlicePlane <Poly poly>

スライス平面をリセットします。

   

polyop.getSlicePlane <Poly poly> \
size:<&size_float_var> node:<node=unsupplied>

スライス平面の位置と方向をレイ値として返します。

<size> が指定されている場合、スライス平面のサイズが参照される変数内に返されます。

<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、返されたレイは現在の座標系コンテキスト内になります。

<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、戻り値はポリゴンのローカル座標系内になります。

   

polyop.setSlicePlane <Poly poly> <ray plane_and_dir> <float size> \
node:<node=unsupplied>

スライス平面を、<plane_and_dir> で指定した位置と方向に設定し、<size> で指定したサイズに設定します。

<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、レイは現在の座標系コンテキスト内になります。

<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、レイはポリゴンのローカル座標系内になります。

   

polyop.slice <Poly poly> <facelist> <ray plane_and_dir> \
node:<node=unsupplied>

<plane_and_dir> で指定した平面と方向に基づいてポリゴンをスライスします。

<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、レイは現在の座標系コンテキスト内になります。

<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、レイはポリゴンのローカル座標系内になります。

編集可能ポリゴンの分割プロパティを使用します。スライスが正常に終了した場合は true を返します。

   

polyop.inSlicePlaneMode <Poly poly>

編集可能ポリゴンがスライス モードの場合は true 、それ以外の場合は false を返します。

切り取り

polyop.cutVert <Poly poly> <int start_vert> <point3 destination> <point3 projdir> \
node:<node=unsupplied>

<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、<destination><projdir> は、現在の座標系コンテキスト内になります。

<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、<destination><projdir> はポリゴンのローカル座標系内になります。

頂点が作成されている場合は新しい頂点のインデックスを返し、頂点が作成されていない場合は undefined を返します。

   

polyop.cutFace <Poly poly> <int face> <point3 start> <point3 destination> <point3 projdir> \
node:<node=unsupplied>

<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、<start><destination>、および <projdir> は、現在の座標系コンテキスト内になります。

<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、<start><destination>、および <projdir> はポリゴンのローカル座標系内になります。

頂点が作成されている場合は新しい頂点のインデックスを返し、頂点が作成されていない場合は undefined を返します。

   

polyop.cutEdge <Poly poly> <int edge1> <float prop1> <int edge2> \
<float prop2><point3 projdir> node:<node=unsupplied>

<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、<projdir> は現在の座標系コンテキスト内になります。

<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、<projdir> はポリゴンのローカル座標系内になります。

頂点が作成されている場合は新しい頂点のインデックスを返し、頂点が作成されていない場合は undefined を返します。

キャップ ホール

polyop.capHolesByVert <Poly poly> <vertlist>

1 つまたは複数の指定された頂点を使用するすべての境界線を見つけ、面を作成して穴をキャップします。

1 つまたは複数の穴がキャップされた場合は true を返します。

   

polyop.capHolesByFace <Poly poly> <facelist>

指定された面に関連付けられた 1 つまたは複数の頂点を使用するすべての境界線を見つけ、面を作成して穴をキャップします。

1 つまたは複数の穴がキャップされた場合は true を返します。

   

polyop.capHolesByEdge <Poly poly> <edgelist>

指定されたエッジに関連付けられた 1 つまたは複数の頂点を使用するすべての境界線を見つけ、面を作成して穴をキャップします。

1 つまたは複数の穴がキャップされた場合は true を返します。

平面化

polyop.makeVertsPlana <Poly poly> <vertlist>

指定された頂点が平面になるように移動します。

   

polyop.moveVertsToPlane <Poly poly> <vertlist> <Point3 planeNormal> <float planeOffset> \
node:<node>

指定された頂点を指定された平面に移動します。

ターゲット平面とは、DotProducted に N オフセットを返すすべてのポイントとして定義されます。

すべての頂点は、法線ベクトル N に沿って移動されます。

   

polyop.makeEdgesPlanar <Poly poly> <edgelist>

指定されたエッジに関連付けられた頂点が平面になるように移動します。

   

polyop.moveEdgesToPlane <Poly poly> <edgelist> <Point3 planeNormal> <float planeOffset> \
node:<node=unsupplied>

指定されたエッジに関連付けられた頂点を指定された平面に移動します。

ターゲット平面とは、DotProducted に N オフセットを返すすべてのポイントとして定義されます。

すべての頂点は、法線ベクトル N に沿って移動されます。

   

polyop.makeFacesPlanar <Poly poly> <facelist>

指定された面に関連付けられた頂点が平面になるように移動します。

   

polyop.moveFacesToPlane <Poly poly> <facelist> <Point3 planeNormal> <float planeOffset> \
node:<node=unsupplied>

指定された面に関連付けられた頂点を指定された平面に移動します。

ターゲット平面とは、DotProducted に N オフセットを返すすべてのポイントとして定義されます。

すべての頂点は、法線ベクトル N に沿って移動されます。

エッジからのシェイプの作成

 polyop.createShape <Poly poly> <edgelist> \
smooth:<boolean=false> name:<string="Shape01"> node:<node=unsupplied>

指定されたエッジからシェイプ ノードを作成します。

<smooth> true の場合、シェイプがスムーズなカーブとして作成されます。

新しいノードの名前が <name> で指定されます。

<poly> が編集可能ポリゴンである(ノードではない)場合は、<node> を指定する必要があります。

押し出し/ベベル/面取り

polyop.extrudeFaces <Poly poly> <facelist> <float amount>

指定された面を指定された量だけ押し出します。編集可能ポリゴンの .extrustionType プロパティを使用します。

   

polyop.bevelFaces <Poly poly> <facelist> <float height> <float outline>

指定された面をベベルします。指定された面を指定された高さに押し出し、新しい上部面を <outline> でスケール調整します。

編集可能ポリゴンの .extrustionType プロパティを使用します。

   

polyop.chamferVerts <Poly poly> <vertlist> <float amount>

指定された頂点を指定された量だけ面取りを行います。

   

polyop.chamferEdges <Poly poly> <edgelist> <float amount>

指定されたエッジを指定された量だけ面取りを行います。

関連事項