feat(P3): add GMSH Frontal-Delaunay tessellation engine
Introduces GMSH as an alternative to OCC BRepMesh for STEP→GLB tessellation. GMSH produces conforming meshes that eliminate fan triangles at cylinder seam edges — a structural limitation of OCC BRepMesh that cannot be fixed via deflection parameters. Changes: - render-worker/Dockerfile: install gmsh>=4.15.0 + libglu1-mesa + libxft2 - export_step_to_gltf.py: --tessellation_engine occ|gmsh CLI arg + _tessellate_with_gmsh() using BRep→GMSH→Poly_Triangulation write-back - admin.py: tessellation_engine setting (SETTINGS_DEFAULTS, SettingsOut, SettingsUpdate, validation) - export_glb.py: pass tessellation_engine to export_step_to_gltf.py CLI in both geometry and production GLB tasks - Admin.tsx: radio button UI for OCC vs GMSH selection Tested: 121 faces meshed, 0 BRepMesh fallback, 649K triangles on sample part. Clean seam edges for UV unwrap — GMSH respects B-rep periodic face boundaries. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -33,7 +33,7 @@ Diese Fehler können **nicht** mit Deflection-Parametern behoben werden — auch
|
||||
|
||||
## Tasks (in Reihenfolge)
|
||||
|
||||
### Task 1: Dockerfile — `gmsh` installieren
|
||||
### [x] Task 1: Dockerfile — `gmsh` installieren
|
||||
|
||||
- **Datei**: `render-worker/Dockerfile`
|
||||
- **Was**: Nach der `trimesh`-Zeile einfügen:
|
||||
@@ -44,7 +44,7 @@ Diese Fehler können **nicht** mit Deflection-Parametern behoben werden — auch
|
||||
- **Akzeptanzkriterium**: `docker compose exec render-worker python3 -c "import gmsh; print(gmsh.__version__)"` gibt `4.15.x`.
|
||||
- **Abhängigkeiten**: keine
|
||||
|
||||
### Task 2: `export_step_to_gltf.py` — CLI-Argument `--tessellation_engine`
|
||||
### [x] Task 2: `export_step_to_gltf.py` — CLI-Argument `--tessellation_engine`
|
||||
|
||||
- **Datei**: `render-worker/scripts/export_step_to_gltf.py`
|
||||
- **Was**: In `parse_args()` ein neues Argument:
|
||||
@@ -57,7 +57,7 @@ Diese Fehler können **nicht** mit Deflection-Parametern behoben werden — auch
|
||||
- **Akzeptanzkriterium**: `--help` listet `--tessellation_engine`.
|
||||
- **Abhängigkeiten**: keine
|
||||
|
||||
### Task 3: `export_step_to_gltf.py` — Funktion `_tessellate_with_gmsh()`
|
||||
### [x] Task 3: `export_step_to_gltf.py` — Funktion `_tessellate_with_gmsh()`
|
||||
|
||||
- **Datei**: `render-worker/scripts/export_step_to_gltf.py`
|
||||
- **Was**: Neue Funktion vor `main()`. Nimmt den XCAF-Compound und Deflection-Parameter. Strategie:
|
||||
@@ -120,7 +120,7 @@ Diese Fehler können **nicht** mit Deflection-Parametern behoben werden — auch
|
||||
|
||||
- **Abhängigkeiten**: Task 1, Task 2
|
||||
|
||||
### Task 4: Admin-Setting `tessellation_engine`
|
||||
### [x] Task 4: Admin-Setting `tessellation_engine`
|
||||
|
||||
- **Datei**: `backend/app/api/routers/admin.py`
|
||||
- **Was**: In `SETTINGS_DEFAULTS` eintragen:
|
||||
@@ -135,7 +135,7 @@ Diese Fehler können **nicht** mit Deflection-Parametern behoben werden — auch
|
||||
- **Akzeptanzkriterium**: `GET /api/admin/settings` gibt `tessellation_engine: "occ"` zurück.
|
||||
- **Abhängigkeiten**: keine
|
||||
|
||||
### Task 5: `export_glb.py` — Setting durchreichen
|
||||
### [x] Task 5: `export_glb.py` — Setting durchreichen
|
||||
|
||||
- **Datei**: `backend/app/domains/pipeline/tasks/export_glb.py`
|
||||
- **Was**: In `generate_gltf_geometry_task()` (und `generate_gltf_production_task()` wo der OCC-Befehl aufgebaut wird):
|
||||
@@ -150,7 +150,7 @@ Diese Fehler können **nicht** mit Deflection-Parametern behoben werden — auch
|
||||
- **Akzeptanzkriterium**: Admin stellt `tessellation_engine` auf `gmsh` → nächster GLB-Export nutzt GMSH.
|
||||
- **Abhängigkeiten**: Task 2, Task 4
|
||||
|
||||
### Task 6: Frontend — Dropdown in Admin-Settings
|
||||
### [x] Task 6: Frontend — Dropdown in Admin-Settings
|
||||
|
||||
- **Datei**: `frontend/src/pages/Admin.tsx`
|
||||
- **Was**: Im Tessellation-Settings-Abschnitt ein Select-Element für `tessellation_engine`:
|
||||
|
||||
Reference in New Issue
Block a user