7

3D 印刷用のメッシュ スライス ユーティリティに取り組んでいます。一般に、3D メッシュ モデルを 2D 形状 (多数のポリゴン、おそらく穴を含む) にスライスし、特定のパターンを使用して決定された厚さのパスでそれらを塗りつぶす必要があります。これらのパスは、3d プリンター ファームウェアの gcode コマンドを生成するために使用されます。

python と perl で書かれた、同じ目的を持つさまざまなオープン ソース ツールがあります。しかし、私の目標は、スライサーのワークフローを理解し、C または C++ で独自のツールを作成することです。

これまでのところ、スライスの輪郭を取得でき、パスで埋めることができます。問題は、これを行うための効率的なアルゴリズムが見つからなかったことです。インフィル例の概略プロセス:

これらの充填パスを生成する方法について誰かアドバイスできますか? ありがとう。


現在、次のアルゴリズムを使用しています。

  1. 形状の境界ボックスを見つける
  2. bb を線で縦に分割します (線の数 = bb.width/path.thickness)
  3. 形状と各線の交点を見つけます (線ごとに 2 つの点にする必要があります)。
  4. 境界からのオフセットを使用して、これらのポイントからセグメントを作成します
  5. 元のセグメントを接続してライン ストリップを形成するセグメントを追加します
  6. gcode を生成するか、パスを描画する準備ができました

シンプルなインフィル アルゴリズム

これは単純で高速なアルゴリズムですが、凹面ポリゴンや穴のあるポリゴンでは機能しません。また、指定されたパターンを 1 つだけ使用します。

4

4 に答える 4

7

以下のアプローチでは、可能な場合はいつでも、単一のパスで構成される充填パターンが生成されます(つまり、充填ノズルがオフ、移動、およびオンに戻ることはありません)。

ステップ 4 (「境界からのオフセットを使用してこれらのポイントからセグメントを構築する」) の後、各垂直線分を 2 つ以上のポイントに変換します: 上部と下部の端点に加えて (図が透明なスライドに描かれていると想像してください。その下に水平線が描かれた一枚の紙を用意し、図の垂直線セグメントが紙の水平線と交差する場所に印を付けます)。

ここで、対応するポイントが 1 グリッド単位以下離れている場合は常に 2 つの頂点を接続するエッジを使用して、各ポイントの頂点を含むエッジ加重グラフを形成します。また、線分の隣接する最上点の間、および隣接する最下点の間にエッジを追加します。エッジ ウェイトのポイント間のユークリッド距離を使用します。最後に、魔法の部分: 最小重みのハミルトニアン パスを見つけるこのグラフに。これは、各頂点を 1 回だけ訪れ、最小の長さを持つパスです。最小の長さの制約により、パスが決して交差しないことが保証されます。これは、a から b への線と c から d への線など、2 つの線が交差する場合、これらを削除することでより短い全体パスを作成することが常に可能であるためです。 2 つの線を作成し、エンドポイントの異なる組み合わせ (a---c と b---d、または a---d と b---c) を使用して 2 つの新しい線を作成します。これがあなたが満たす道です。

ハミルトニアン パス (最小重みハミルトン パスは言うまでもなく) を見つけることは、より有名な巡回セールスマン問題に密接に関連する NP 困難な問題です。多くの優れた正確な TSP ソルバーが既に存在するため (たとえばConcorde )、代わりにこれらの 1 つを使用して巡回セールスマン ツアーを見つけ、次に単純にエッジの 1 つを削除して短いハミルトニアン パスを生成するのが賢明です。(最も重いエッジを削除しても、隣接する頂点で開始および終了しない短いパスが存在する可能性があるため、必ずしも最小長のハミルトニアン パスが生成されるとは限りません。ここでは全体の長さですが、すべての頂点を訪れ、それ自体を横切らないパスが必要なだけです.)

残念ながら、グラフにハミルトニアン パスまたは巡回セールスマン ツアーが含まれているとは限りません。(たとえば、グラフが切断されている場合、それらは明らかに存在できませんが、接続されたグラフでさえ、いずれかまたは両方を持たない可能性があります。たとえば、次数 1 の頂点を持つグラフは TSP ツアーを持つことができません。)使用している TSP ソルバーは、すべての頂点を訪問しないツアーを見つけることができます。すべての頂点がカバーされるまでこれを繰り返すことができます。それができない場合は、元のアルゴリズムに頼ります。

于 2013-04-02T17:39:42.210 に答える
3

しばらく調査した後、次のアルゴリズムにたどり着きました ここに画像の説明を入力 。ただし、最適化の機会はたくさんあります。

于 2013-04-02T15:08:50.893 に答える
2

領域にハッチングを適用するアルゴリズムについては、この Web ページを参照してください。

于 2013-03-27T20:12:24.770 に答える