エッジ中間の EPoly 頂点を削除する方法はありますか。
 
 
 

MAXScript に関する質問と回答 > 編集可能ポリゴンの操作 > エッジ中間の EPoly 頂点を削除する方法はありますか。

質問:

エッジ選択にフィルタ処理を行って、「エッジ選択要素」のような、接続されたエッジを含む配列を作成したいと考えています。2 つの配列のエッジは決して接続されません。 つまり、頂点を共有しません。

回答:

次の疑似コードは、実行可能な手段を記述したものです。

スクリプト:

macroScript KillMidEdgeVerts category: "MXS Help"
(
-- 単一の EPoly オブジェクトが選択されるようにします。
on isEnabledr eturn
 selection.count == 1 and classof selection[1].baseobject == Editable_Poly
on execute do
(
 thePoly = selection[1] --選択したオブジェクトを取得します。
 select thePoly--これを選択します。
 max modify mode--[修正]パネルに切り替えます。
 -- 基本オブジェクトを現在のレベルに設定します。
 modPanel.setCurrentObject selection[1].baseobject
 subObjectLevel = 1--サブ オブジェクト レベルを頂点レベルに設定します。
 numVerts = (polyop.getNumVerts thePoly)--頂点の合計数を取得します。
 undo on "KillMidEdgeVerts"--アンドゥ コンテキストを有効にします。
 (
  -- 最後の頂点から最初の頂点まで後ろ向きにループします。
  for v = numVerts to 1 by -1 do
  (
   -- 頂点を使用するエッジを取得し、数を確認します。
   nVerts = (polyop.getEdgesUsingVert thePoly v) as array
   if nVerts.count == 2 do --2 つのエッジだけが見つかった場合
   (
    -- 最初のエッジの頂点を取得します。
    edge1verts = (polyop.getVertsUsingEdge thePoly nVerts[1]) as array
    -- 最初のエッジ内にある 2 つの頂点によって定義されたベクトルを計算します。
    vector1 = (polyop.getVert thePoly edge1verts[1]) - (polyop.getVert thePoly edge1verts[2])
    -- 2 番目のエッジの頂点を取得します。
    edge2verts = (polyop.getVertsUsingEdge thePoly nVerts[2] as array)
    -- 2 番目のエッジ内にある 2 つの頂点によって定義されたベクトルを計算します。
    vector2 = (polyop.getVert thePoly edge2verts[1]) - (polyop.getVert thePoly edge2verts[2])
    -- 2 つの単位ベクトルの間の角度を計算します。
    angle = acos (dot (normalize vector1) (normalize vector2))
    -- 角度がスレッショルド値よりも小さい場合は (スレッショルド値に合わせて 0.01) 変化させます。
    if angle < 0.01 do
    (
     select thePoly.verts[v]--現在の頂点を選択します。
     thePoly.EditablePoly.buttonOp #Remove--[削除]ボタンをクリックします。
    )
   )--if 終了
  )-v ループ終了
 )--undo 終了
)--on 終了
)--マクロの終了。
関連事項