zudo-stl-fix
GitHub リポジトリ

検索したい単語を入力

いつでも検索バーを開ける

エンジン契約

エンジンが何を検査し、何を修復し、それぞれの結果が何を意味するか。

エンジン(engine/stl_doctor.py、バージョン 1.0.0)は、設計として保守的です。対応できないジオメトリは想定内の結果であり、ソリッドを推測して作り出す理由にはなりません。

Warning

検証済みのメッシュであっても、印刷可能性、はめあい、壁の厚さ、強度、設計意図を証明するものではありません。座標の単位は STL では規定されておらず、エンジンは単位の変換を一切行いません。

検査

すべてのファイルは、暗黙の溶接を行わずに保存されている座標を読み取って監査されます。バイナリ STL は float32 の座標そのもので検査され、ASCII の 10 進数はまず binary64 としてパースされます。

失敗(いずれか 1 つでもあればステータスは FAIL):

  • boundary_edges、nonmanifold_edges、nonmanifold_vertex_count

  • inconsistent_edge_windings

  • duplicate_triangles、zero_area_triangles

  • surface_intersections_or_invalid_contacts(三角形ペアを厳密な述語でスキャンした結果)

  • nonpositive_total_signed_volume

警告(ステータスは PASS_WITH_WARNINGS。表示されますが失敗ではありません):

  • 高さが 1e-5 座標単位未満の三角形(スライバーの検査であり、壁の厚さの測定ではありません)

  • Z=0 より下にあるジオメトリ(配置は変更しません)

  • 2 つ以上の連結したシェル(包含関係や空洞の向きは保証されず、自動修復は拒否されます)

  • 保存されているファセット法線が欠落している、不正である、または 1 度を超えてずれている(エクスポート時に再生成されます)

水密な接続性だけでは十分ではなく、交差スキャンも完了している必要があります。スキャンは最悪の場合に二次の計算量になるため、max_faces(デフォルト 20000)と max_pairs(デフォルト 2000000)で制限され、上限に達した場合は安全側に倒して失敗します。リソース上限で打ち切られたスキャンが、クリーンな監査とみなされることは決してありません。

修復の操作

修復は単一の閉じたシェルにのみ、次の順序で適用されます。

  1. 面積が厳密にゼロの三角形と、厳密に重複した三角形を取り除きます。

  2. 単一シェルの面の向きを揃え直します。

  3. 厳密に平面で、折り重なったり重なり合ったりしている適切なパッチを、既存の向き付けされた境界から再三角形分割します。

  4. 正の溶接許容値が指定された場合に限り、既存の短いエッジを潰します。デフォルトの許容値はゼロで、適用した場合はそのことが報告されます。

  5. バイナリ STL にシリアライズし、それを読み込み直して、その座標そのものを監査します。

候補は、失敗がなく、シェルが 1 つのままで、バウンディングボックスが許容される変位の範囲内に収まり、符号付き体積の相対変化が 1e-6 のガード以内である場合を除いて拒否されます。拡大縮小、回転、平行移動、スムージング、ボクセル化、穴埋めは一切行いません。

エンジンは、厳密な整理を行ったあとも開いている、または非多様体のメッシュ、解決できない一般の非同一平面の交差、不正な境界や分岐した境界を持つパッチ、複数のシェルや入れ子になったシェルを自動修復しません。

結果

結果意味出力
unchanged完全な検査を行い、対応範囲の作業が必要なものは見つかりませんでした。警告は引き続き表示されます。-fixed コピーなし。
repaired修復に成功し、シリアライズ後のバイト列が完全な監査を通過しました。検証済みの候補 STL。
refusedジオメトリが対応範囲の外にあります(unsupported_geometry)。候補なし。
incompleteリソース上限によってスキャンが打ち切られたため、クリーンな結果は存在しません。候補なし。
error不正な入力、権限、入力の変更、検証、プロトコル、クラッシュのいずれかによる失敗です。候補なし。

アプリでは、これらはそれぞれ「No repair needed」(警告がある場合は「Checked, review needed」)、「Repair ready」、「Cannot repair safely」、「Check incomplete」、「Error」に対応します。

基準となる期待値

オリジナルの nuts-v2-*-double.stl フィクスチャ 2 つはどちらも 62 件の不正な三角形ペアの干渉を含み、残りの 9 つは実施した検査の範囲ではメッシュの失敗がありません。溶接を無効にした状態で、どちらも不正なペアがゼロになり、バウンディングボックスは変わらず、微小三角形の警告は残ります。フィクスチャは make verify-fixtures によって fixtures/manifest.json と照合して検証されます。修復ロジック内のファイル名で判定しているわけではありません。

Revision History

Takeshi Takatsudo作成: 2026-10-16T13:26:56+09:00更新: 2026-10-16T13:26:56+09:00