0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

スライサー(FDM式3Dプリンタ向け)の作成 其の14(閉領域からのポリゴン化アルゴリズム)

Posted at

1.はじめに

 サポート,ラフト,スカート/ブリムモデル等を生成する場面で、閉領域(スライス面)からポリゴン化する必要がありました。
 閉領域は、頂点座標の配列で、順番に稜線を示し、最後に最初の頂点にたどり着く構成です。
 閉領域は、多角形形状であるため、このままでは面(三角ポリゴン)としては扱えない(多のアルゴリズム的に)ので、三角ポリゴン化します。

2.アルゴリズム(考え方)

スライスした閉領域の特性上法線は上向きとなっているため、生成平面がモデル下面とする場合は、面登録時に頂点の順番を入替えます。

  • 3点の場合
    キャプチャ1.JPG
     この場合、何もする必要はなく、そのまま三角ポリゴンとして登録する。

  • 4点の場合
    キャプチャ2.JPG
     この場合、P1-P3を結ぶ稜線を追加する。
     これにより、三角ポリゴン2面(P1-P2-P3/P3-P4-P1)として、ポリゴン登録する。

  • 5点の場合
    キャプチャ3.JPG
     この場合、P1-P3/P1-P4を結ぶ稜線を追加する。
     これにより、三角ポリゴン3面(P1-P2-P3/P3-P4-P1/P4-P5-P1)として、ポリゴン登録する。

 上記法則から基本アルゴリズムを考える。

  1. 閉領域の始点(P1)から+2した点(P3)との間に稜線を追加する。
  2. P1-P2-P3の三角面を登録し、閉領域からP2を取り除く。
  3. 新たな閉領域が頂点3点になるまで、前記を繰り返す。

 ここで注意するのは、下図の様な場合、三角ポリゴンとしては生成できません。
キャプチャ4.JPG

キャプチャ5.JPG

 生成不可能となるのは、「追加する稜線が、他の稜線とクロスする。」/「生成面の法線が反転する。」場合が考えられます。
 生成不可能となる場合、当該稜線は追加できないので、始点となる点を次へ移します(例:P1→P2)
キャプチャ6.JPG
 ※この場合、P1/P2がダメでP3から開始。P3-P8が引けなくなり、次はP7が始点となり終了する。

3.2つの閉領域から生成するには

 下図のような外側と内側の2つの閉領域があり、この間を埋めたポリゴンとする場合、
キャプチャa.JPG

 下図のように、生成できるポリゴンを見つけ切り離す感じにします。すると残りの部分が閉領域1つとなるので、前記アルゴリズムでポリゴン化していきます。
キャプチャb.JPG

キャプチャc.JPG

4.おわりに

 本アルゴリズムで生成されるポリゴンは分割がきれいではないです。
 ですがスライスには影響しないため採用しています。
 時間があれば改良したいと考えています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?