次のトピックでは Editable_Poly 基本オブジェクトに集約されるオブジェクトに適用される polyOp メソッドを一覧表示します。
すべての polyOp メソッドには、引数 <poly> (操作するポリゴン)を指定します。基本オブジェクトが編集可能ポリゴンであるノードの値、または編集可能ポリゴンの基本オブジェクトを指定できます。
ほとんどの polyOp メソッドには、引数として <vertlist>、<facelist>、または <edgelist> を指定します。
これらの引数には、操作するサブ オブジェクトサブオブジェクト要素を指定します。
#selection - そのタイプの現在選択されているサブオブジェクト。
#none - そのタイプのサブオブジェクト要素を除外する。
サブオブジェクト要素のインデックスを表す bitarray。
サブオブジェクト要素のインデックスを表す整数に変換できる値。
VertexSelection、EdgeSelection、または FaceSelection の値。値のタイプは、指定した サブオブジェクト タイプに一致していなければなりません。
編集可能ポリゴンには、「無効な」頂点、エッジ、および面が含まれることがあります。
無効なサブオブジェクト要素とは、ポリゴンからは削除されているが、対応するサブオブジェクト要素のリストから削除されていないもののことです。
これらのサブオブジェクト要素は、そのポリゴンに対して特定の操作を実行したときに無効とマークされます。ただし、サブオブジェクト要素のリストが集約される(無効なサブオブジェクト要素がすべて削除される)のは、通常はその操作が終了したときです。つまり、そのポリゴンには通常、無効なサブオブジェクト要素は存在しません。
サブオブジェクト要素を polyOp メソッドの 1 つを使用して無効としてマークした場合は、 polyOp.collapseDeadStructs() を呼び出してサブオブジェクト要素のリストを集約する必要があります。
サブオブジェクト要素のフラグを取得/設定するメソッド以外では通常、無効なサブオブジェクト要素は polyOp メソッドによって無視されます。メソッドが OK 以外の値を返し、指定されている引数が 1 つの サブオブジェクト要素インデックスだけで、かつその SO 要素が無効な場合は、通常、 undefined の値が返されます。
ポリゴンの各頂点には、32 ビット フラグ変数が含まれます。
このメソッドは、このフラグ変数内の特定のビットが設定されている頂点の bitarray を返します。テストされるビットは、<flag> および <maskflag> の組み合わせに基づいて決定されます。
内部的には、<maskflag> が 0 の場合、<maskflag> は <flag> 値に設定され、それ以外の場合、<flag> は <flag> および <maskflag> の bitwise-AND に設定されます。次に <maskflag> のビット 2 が設定されます。このビットが <mask> 内に設定されていない限り、返された bitarray に無効な頂点が含まれることはありません。フラグ変数と maskflag> の bitwise-AND が、<flag> と <maskflag> の bitwise-AND と同一である場合は、返された bitarray の各ビットが設定されます。
ビット 4 : 頂点面が現在のビューポートの「後方」を向いていることを示す
指定された頂点のフラグ ビットを <flag> のビットに設定します。
mask が指定された場合、 mask: 値に設定されたビットは、指定された頂点のフラグ ビットの設定前に、ポリゴン内のすべての頂点でクリアされます。
undoable:true が指定された場合、この操作はやり直し可能です。<flag> のビット 1 またはビット 2 が設定された場合(選択されたフラグ ビットまたは無効なフラグ ビット)、この操作は常にやり直し可能です。
ポリゴンの各エッジには、32 ビット フラグ変数が含まれます。このメソッドは、このフラグ変数内の特定のビットが設定されているエッジの bitarray を返します。テストされるビットは、<flag> および <maskflag> の組み合わせに基づいて決定されます。
内部的には、<maskflag> が 0 の場合、<maskflag> は <flag> 値に設定され、それ以外の場合、<flag> は <flag>> および <maskflag> の bitwise-AND に設定されます。次に <maskflag> のビット 2 が設定されます。このビットが <mask> 内に設定されていない限り、返された bitarray に無効なエッジが含まれることはありません。フラグ変数と maskflag> の bitwise-AND が、<flag> と <maskflag> の bitwise-AND と同一である場合は、返された bitarray の各ビットが設定されます。
ビット 4: 頂点面が現在のビューポートの「後方」を向いていることを示す
指定されたエッジのフラグ ビットを <flag> のビットに設定します。mask が指定された場合、 mask: 値に設定されたビットは、指定されたエッジのフラグ ビットの設定前に、ポリゴン内のすべてのエッジでクリアされます。 undoable:true が指定された場合、この操作はやり直し可能です。<flag> のビット 1 またはビット 2 が設定された場合(選択されたフラグ ビットまたは無効なフラグ ビット)、この操作は常にやり直し可能です。
ポリゴンの各面には、32 ビット フラグ変数が含まれます。このメソッドは、このフラグ変数内の特定のビットが設定されている面の bitarray を返します。テストされるビットは、<flag> および <maskflag> の組み合わせに基づいて決定されます。
内部的には、<maskflag> が 0 の場合、<maskflag> は <flag> 値に設定され、それ以外の場合、<flag> は <flag>> および <maskflag> の bitwise-AND に設定されます。次に <maskflag> のビット 2 が設定されます。このビットが <mask> 内に設定されていない限り、返された bitarray に無効な面が含まれることはありません。フラグ変数と maskflag> の bitwise-AND が、<flag> と <maskflag> の bitwise-AND と同一である場合は、返された bitarray の各ビットが設定されます。
ビット 4 : 頂点面が現在のビューポートの「後方」を向いていることを示す
指定された面のフラグ ビットを <flag> のビットに設定します。
mask: が指定された場合、 mask: 値に設定されたビットは、指定された面のフラグ ビットの設定前に、ポリゴン内のすべての面でクリアされます。
undoable:true が指定された場合、この操作はやり直し可能です。
<flag> のビット 1 またはビット 2 が設定された場合(選択されたフラグ ビットまたは無効なフラグ ビット)、この操作は常にやり直し可能です。
対応するエッジが開いている場合は(1 つの面のみで使用)、ビットが設定された bitarray が返されます。
返された bitarray のビットが、開いたエッジを使用して指定されたエッジに接続されるポリゴンの、開いたエッジに設定されます。
ポリゴンのすべての片面エッジは、ポリゴンの境界を示す端から端までのチェーンにグループ化することができます。たとえば、1 つの側面が削除されているボックスでは、すべての片面エッジが穴の周囲を囲むチェーンの一部になります。指定されたエッジが開いていない場合、返される bitarray は空です。
現在の無効な頂点選択を bitarray として返します。通常は空の bitarray を返します。
現在の無効なエッジ選択を bitarray として返します。通常は空の bitarray を返します。
現在の無効な面選択を bitarray として返します。通常は空の bitarray を返します。
ポリゴンに無効な頂点がある場合は、戻り値の ビット 1 が設定され、無効なエッジがある場合は ビット 2 、無効な面がある場合は ビット 3 が設定されます。
指定された頂点の位置を返します。<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、返された位置は現在の座標系コンテキスト内になります。<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、戻り値はポリゴンのローカル座標系内になります。
<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>
<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、オフセットは現在の座標系コンテキスト内になります。
<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、オフセットはポリゴンのローカル座標系内になります。
3ds Max 2008 以降では、このメソッドに配列として位置を指定できるようになりました。この場合、<pos_array> の値の数が <vertlist> で指定された頂点の数と一致している必要があります。この機能は、従来、Avguard 機能拡張の一部でした。
useSoftSel: が true であり、かつメッシュのソフト選択データ チャネルが存在する場合は、指定されたオフセットに頂点のソフト選択値が乗算されます。
エッジのリストなどのすべてのトポロジ関連リンクがポリゴンに対して完全な場合は、 true を返します。
MNFace::vtx lists 内の情報に基づいて、内部の MNEdges と MNFace::edg 、 MNVert::edg 、および MNVert::fac のリストを再計算します。
対応するエッジが <vertlist> 内の頂点の 1 つを使用する場合、返された bitarray のビットが設定されます。
対応する面が <vertlist> 内の頂点の 1 つを使用する場合、返された bitarray のビットが設定されます。
対応する頂点が <edgelist> 内のエッジの 1 つを使用する場合、返された bitarray のビットが設定されます。
対応する面が <edgelist> 内のエッジの 1 つを使用する場合、返された bitarray のビットが設定されます。
対応する頂点が <facelist> 内の面の 1 つを使用する場合、返された bitarray のビットが設定されます。
対応するエッジが <facelist> 内の面の 1 つを使用する場合、返された bitarray のビットが設定されます。
返された bitarray のビットが、<facelist> 内の面を持つ同じ「要素」(すなわち、接続されたコンポーネント)内のすべての面に設定されます。
<fence_facelist> が指定された場合、この処理ではそれらの面は「壁」と見なされ、評価されません。つまり、<facelist> に面 i が指定され、その周囲にある面の輪が <fence_facelist> に指定された場合、アルゴリズムはその輪で停止します。
<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、返された位置は現在の座標系コンテキスト内になります。
<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、戻り値はポリゴンのローカル座標系内になります。
凸型ではない面の場合、 getFaceCenter を使用して検出される平均ポイントは、一部のアプリケーションには不適切です。これは、平均ポイントが完全に面の外側に存在するか、すべての面の頂点を見ることができない領域に存在するためです(中心からコーナーへのライン セグメントが面の外側を通過する)。
安全な中心が検出できない場合、 undefined という値が返されます。
面の凸型カバーの中心を検出する方が適している場合もあります。凸型カバーとは、すべてのコーナーへの明確な視界のラインを持つ面の領域のことです。押し出された文字 M の上面のように、空の凸型ハルを持つ面もあります。このような場合には、このルーチンは失敗し、 ComputeCenter で指定された通常の中心が返されます。
<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、返された位置は現在の座標系コンテキスト内になります。
<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、戻り値はポリゴンのローカル座標系内になります。
<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、返された方向ベクトルは現在の座標系コンテキスト内になります。
<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、戻り値はポリゴンのローカル座標系内になります。
必要に応じてポリゴン メッシュに変換し、<source> を <poly> にアタッチします。
<source> または <poly> がノード値ではない場合、対応する targetNode: または sourceNode: を指定する必要があります。
<delIsoVerts> が true の場合、面が使用しなくなった頂点もすべて削除されます。
<delIsoVerts> が true の場合、エッジが使用しなくなった頂点もすべて削除されます。
PolyOp.deleteEdges() 、 PolyOp.deleteVerts() 、および PolyOp.deleteFaces() の各メソッドの動作は、3ds Max 5 で変更されました。これらのメソッドを使用すると、削除された要素を使用するサブオブジェクトの要素もすべて削除されます。(内部の) Delete メソッドとして使用されていた内容は、(内部の) Remove メソッドになりました。この新しいメソッドは polyOp 構造体を通して公開されるのではないため、EditablePoly インタフェースの Remove メソッドを通して作業する必要があります。
バージョン 4 以上で機能する置き換えられた関数の例を次に示します。
しきい値距離は編集可能ポリゴンのプロパティ(weldThreshold)です。
2 つの指定された頂点を連結し、その結果生じる頂点は指定された位置になります。
<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、場所は現在の座標系コンテキスト内になります。
<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、場所はポリゴンのローカル座標系内になります。
しきい値距離内の指定されたエッジに関連付けられた頂点を連結します。
<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、位置は現在の座標系コンテキスト内になります。
<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、位置はポリゴンのローカル座標系内になります。
作成された頂点のインデックスを返すか、または頂点が作成されていない場合は undefined を返します。
作成されたエッジのインデックスを返します。エッジが作成されていない場合は undefined を返します。
面の頂点の順序は、頂点配列内の順序です。各頂点ペアが連続している場合は、頂点間に存在できるエッジは 1 つだけで、そのエッジを最初の頂点から 2 番目の頂点に移動することはできません。
面が凸型でない場合は、指定された数の頂点を持つ面に対して、既定の三角形化が使用されます。この三角形化が適していないこともあります。
次のビューポートの再描画でサーフェス サブディビジョンを強制的に更新します。
[NURMS サブディビジョン](NURMS Subdivision)がオンで、[更新オプション](Update Options)が[手動](Manually)の場合に使用します。
編集可能ポリゴンの .smoothness 、 .separateBySmoothing 、および .separateByMaterial の各プロパティを使用します。
編集可能ポリゴンの .smoothness 、 .separateBySmoothing 、および .separateByMaterial の各プロパティを使用します。
編集可能ポリゴンの .smoothness 、 .separateBySmoothing 、および .separateByMaterial の各プロパティを使用します。
<smoothing_group> の各ビットの状態は、対応するスムージング グループにその面が属しているかどうかを示します。
<add> が true の場合、<smoothing_group> は各面に指定された既存のスムージング グループ データに追加されます。
<add> が false の場合、既存のスムージング グループ データが上書きされます。
<vertlist> 内の各頂点に対して、N-1 個の新しい頂点が同じ位置に作成されます。N はその頂点を使用する面の数です。
エッジに沿って指定された距離(分数)で指定されたエッジを分割します。
戻り値は新しい頂点のインデックスです。頂点が作成されていない場合は、 undefined を返します。
指定された面を分割し、指定された位置に最も近い面上のポイントに新しい頂点が作成されます。
指定された位置が面の外側にある場合、頂点は面の中心に作成されます。
<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、位置は現在の座標系コンテキスト内になります。
<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、位置はポリゴンのローカル座標系内になります。
指定された頂点にある頂点の各クラスタを単一の頂点に集約します。
指定された面にある各面集団に関連付けられた頂点を単一の頂点に集約します。
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 が設定された場合(選択されたフラグ ビットまたは無効なフラグ ビット)、この操作は常にやり直し可能です。
編集可能ポリゴンの .tesselateBy および .tessTension の各プロパティを使用します。
編集可能ポリゴンの .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> を指定する必要があります。
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> を指定する必要があります。
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> を指定する必要があります。
<size> が指定されている場合、スライス平面のサイズが参照される変数内に返されます。
<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、返されたレイは現在の座標系コンテキスト内になります。
<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、戻り値はポリゴンのローカル座標系内になります。
スライス平面を、<plane_and_dir> で指定した位置と方向に設定し、<size> で指定したサイズに設定します。
<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、レイは現在の座標系コンテキスト内になります。
<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、レイはポリゴンのローカル座標系内になります。
<plane_and_dir> で指定した平面と方向に基づいてポリゴンをスライスします。
<poly> がノードの場合、または <poly> が編集可能ポリゴンで <node> が指定されている場合、レイは現在の座標系コンテキスト内になります。
<poly> が編集可能ポリゴンであり、<node> が指定されていない場合、レイはポリゴンのローカル座標系内になります。
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 を返します。
1 つまたは複数の指定された頂点を使用するすべての境界線を見つけ、面を作成して穴をキャップします。
1 つまたは複数の穴がキャップされた場合は true を返します。
指定された面に関連付けられた 1 つまたは複数の頂点を使用するすべての境界線を見つけ、面を作成して穴をキャップします。
1 つまたは複数の穴がキャップされた場合は true を返します。
指定されたエッジに関連付けられた 1 つまたは複数の頂点を使用するすべての境界線を見つけ、面を作成して穴をキャップします。
polyop.moveVertsToPlane <Poly poly> <vertlist> <Point3 planeNormal> <float planeOffset> \ node:<node>
ターゲット平面とは、DotProducted に N オフセットを返すすべてのポイントとして定義されます。
指定されたエッジに関連付けられた頂点が平面になるように移動します。
polyop.moveEdgesToPlane <Poly poly> <edgelist> <Point3 planeNormal> <float planeOffset> \ node:<node=unsupplied>
指定されたエッジに関連付けられた頂点を指定された平面に移動します。
ターゲット平面とは、DotProducted に N オフセットを返すすべてのポイントとして定義されます。
指定された面に関連付けられた頂点が平面になるように移動します。
polyop.moveFacesToPlane <Poly poly> <facelist> <Point3 planeNormal> <float planeOffset> \ node:<node=unsupplied>
指定された面に関連付けられた頂点を指定された平面に移動します。
polyop.createShape <Poly poly> <edgelist> \ smooth:<boolean=false> name:<string="Shape01"> node:<node=unsupplied>
指定された面を指定された量だけ押し出します。編集可能ポリゴンの .extrustionType プロパティを使用します。
指定された面をベベルします。指定された面を指定された高さに押し出し、新しい上部面を <outline> でスケール調整します。