Schnitt/Ansicht: SectionOutput aus render3d an die Zeichenebenen anbinden

- render3d/web.rs: GPU-freies WASM-Binding cut_section_json(model_json, p, n)
  → JSON {cutPolygons, visibleEdges, hiddenEdges} in (u,v)-Metern.
- src/plan/toSection.ts (neu): SectionOutput-Typen, sectionPlaneFromLevel()
  leitet die Schnittebene aus linePoints/directionSign ab, computeSection()
  flacht über projectToModel3d ab und ruft das Binding.
- src/engine/engine3d.ts (neu): geteilter memoisierter pkg3d-Loader, damit
  3D-Viewport und Schnittpfad EINE mod.default()-Init teilen.
- generatePlan.ts: generateSectionPlan() übersetzt SectionOutput in
  bestehende Primitive (Cut = polygon mit Poché-Schraffur, sichtbare Kante =
  line solid, verdeckte Kante = line dashed) — keine neue Primitive-Art nötig.
- App.tsx: SectionPlanView ersetzt den Stub für Ebenen vom Typ Schnitt/Ansicht;
  rendert dasselbe PlanView, mit lokalisierten Hinweisen (lädt/keine Linie/Fehler).
- i18n de/en: section.*-Schlüssel.
- Öffnungen erscheinen korrekt (Brüstung/Sturz-Teilrechtecke) über die
  projectToModel3d-Teilkörper-Zerlegung.

Gates: tsc -b 0, build grün (WASM = eigener Lazy-Chunk), render3d cargo test 29/29,
wasm32 --features web check grün.
This commit is contained in:
2026-07-03 18:37:49 +02:00
parent 4a62dbf83c
commit 28b5492def
8 changed files with 514 additions and 30 deletions
+5
View File
@@ -397,6 +397,11 @@ export const de = {
"content.drawingTitle": "Zeichnung · {name}",
"content.drawingCanvas": "Zeichenfläche",
"content.drawingLegend": "Freie 2D-Zeichnung",
"content.sectionTitle": "{kind} · {name}",
"section.loading": "{kind} wird berechnet …",
"section.empty": "{kind} — keine Schnittlinie im Grundriss gesetzt",
"section.error": "{kind} — Berechnung fehlgeschlagen (render3d-WASM neu bauen?)",
"section.legend": "{kind} · abgeleitete Projektion (render3d)",
"props.floorHeight": "Geschosshöhe",
"props.cutHeight": "Schnitthöhe",
"props.okff": "OKFF",
+5
View File
@@ -394,6 +394,11 @@ export const en: Record<TranslationKey, string> = {
"content.drawingTitle": "Drawing · {name}",
"content.drawingCanvas": "Drawing canvas",
"content.drawingLegend": "Free 2D drawing",
"content.sectionTitle": "{kind} · {name}",
"section.loading": "Computing {kind} …",
"section.empty": "{kind} — no section line set in the plan",
"section.error": "{kind} — computation failed (rebuild render3d WASM?)",
"section.legend": "{kind} · derived projection (render3d)",
"props.floorHeight": "Floor height",
"props.cutHeight": "Cut height",
"props.okff": "FFL",