From 6ac054ea7190d6f2b61ed2e3dfee31f440ae78d3 Mon Sep 17 00:00:00 2001 From: Karim Date: Sun, 12 Jul 2026 17:41:37 +0200 Subject: [PATCH] PENDENZEN.md: mullionCols + swissBUILDINGS3D/Terrain als erledigt markieren MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Korrigiert zugleich die veraltete Nordstern-Geo-Rendering-Notiz (war schon seit 35299307d erledigt) und dokumentiert die neu gefundene Dach-Wand- Verschneidungslücke (Z-Fighting) als nächsten Arbeitsschritt. --- PENDENZEN.md | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/PENDENZEN.md b/PENDENZEN.md index 538e13c..8a4d36b 100644 --- a/PENDENZEN.md +++ b/PENDENZEN.md @@ -24,6 +24,8 @@ ## 🔧 In Arbeit +- [ ] **Dach-Wand-Verschneidung fehlt (Z-Fighting im 3D)** — Nutzer-Report 2026-07-12 (Screenshot: flackerndes Rausch-Muster wo Wand-Oberkante die Dachschräge kreuzt). Root Cause: `collectCeilingCutters` (`toWalls3d.ts:819`) kappt Wände nur gegen `project.ceilings`, NIE gegen `project.roofs` — die Wand bekommt ihre Höhe unabhängig vom Dach (`wallVerticalExtent`), das Dach wird komplett separat gerendert (`emitRoofs`, `:1779`). Wo die geneigte Dachfläche den flachen Wand-Top kreuzt, überlappen sich beide Volumen (Interpenetration → Z-Fighting). Kein Quick-Fix: braucht echte Giebelwand-Geometrie (Wand-Top folgt der Dachschräge statt flach zu enden), nicht nur einen weiteren Cutter-Eintrag in der bestehenden `terminateOrSubtractSpans`-1D-z-Intervall-Logik (die nur horizontale Schnitte kann). Verwandt: [[design-schicht-verschneidung-3d-schnitt]] (gleiche Kategorie Problem wie „Wand endet an Decke", nur für geneigte statt horizontale Cutter). Nutzer bestätigt: erst umsetzen (kein Hermes-Task, direkt). + - [ ] **truck-Integration (Profil-Extrusion / B-Rep)** (Plan: [docs/design/truck-plan.md](docs/design/truck-plan.md)). Ziel: Nutzer zeichnet 2D-Querschnitt → truck-Extrusion → 3D-Körper + später Boolean gegen Wand/Decke. Umfang gesamt: ~4–6 Wochen. Fortschritt: - [x] Phase 1: Geometrie-Schicht — Crate `src-tauri/trucksolid` (`extrude_polygon_core`/`extrude_circle_core`, `truck_modeling` nur zur B-Rep-Validierung/`try_attach_plane`/`tsweep`, Tessellierung manuell aus den Ring-Koordinaten — truck-rendimesh-Tessellierung für Solids in 0.3 nicht verfügbar, daher Abweichung vom Übergabe-Dokument), WASM-Bindings (Feature `web`) + `build:truck`-Script + `exclude`-Eintrag, TS-Wrapper `src/engine/truckSolid.ts` (`extrudePolygon`/`extrudeCircle`), `RMeshKind` um `"extrusion"` erweitert (`toWalls3d.ts`). Verifiziert: `cargo test` 5/5 grün, `npm run build:truck` sauber, `tsc --noEmit` 0 Fehler, `vitest run` 339/339 grün. - [x] Phase 2 (MVP, Nutzer-Entscheid 2026-07-06: **"Nur Viewer-Wiring"**, kein Werkzeug/Store) — Ende-zu-Ende-Beweis, dass die Pipeline bis ins Bild funktioniert: ein fest verdrahtetes L-Profil (`emitTruckFixture` in `toWalls3d.ts`, 2 m abseits vom Ursprung) wird bei Bedarf per `trucksolid`-WASM extrudiert und erscheint im 3D-Viewport. **Zwei echte Lücken dabei gefunden und geschlossen:** (1) `render3d::types::MeshKind` kannte nur `Terrain`/`Imported` — ein `kind:"extrusion"` ohne passende Rust-Variante hätte die serde-Deserialisierung des GESAMTEN Modell-Pushes zum Absturz gebracht (nicht nur die Fixture); `Extrusion`-Variante + warmes Orange als Default-Farbe ergänzt (`cargo test` render3d 58/58 weiterhin grün). (2) `updateModel(project)` läuft nur bei Projektänderung (`useEffect`-Dep `project`) — die asynchron ladende Fixture hätte trotz Erfolg NIE einen Re-Push ausgelöst; Fix via Browser-Event `TRUCK_FIXTURE_READY_EVENT` (`toWalls3d.ts` dispatcht, `Wasm3DViewport.tsx` hört + stösst `updateModel` erneut an). **Visuell verifiziert** (Playwright, `?engine=wasm`, Chromium mit `--use-angle=metal` für echten WebGPU-Adapter headed): orangene Extrusion sichtbar neben dem Demo-Haus im Viewport. `tsc --noEmit` + `vitest run` 339/339 + `cargo test` render3d 58/58 grün. **Noch uncommittet** (Bearbeiter committet nicht selbst). @@ -67,7 +69,7 @@ - [x] ~~**RoofType-ResourceManager-Tab**~~ — **erledigt `83abc1d`** (RoofStylesTab auf LayeredStylesTab-Rumpf; anlegen/editieren/löschen, Löschen geschützt bei Verwendung). - [ ] **Decken-Randschicht-Override** (`Ceiling.edgeOverride`, Ringzone anderer Aufbau, Tropfkante/Randdämmung) — P1; **Deckentrenn-Werkzeug** für thermisch getrennte Auskragung (Isokorb, UI-only) — P1. - [ ] **Tür 1:1 Rest:** `glazingRatio` (Teilverglasung), Kassettentür-Geometrie, `frameKind` im 3D (Zarge vs. Blockrahmen), echtes Schwellenprofil; Alt-`Door[]`-Pfad in `Opening` konsolidieren (technische Schuld, zwei Datenwege). - - [ ] **Fenster 1:1 Rest:** asymmetrische Rahmenbreiten, echtes Sprossengitter, Bank/Nische, Laibungsverkleidung, Form (Rund/Spitz/Schräg). + - [ ] **Fenster 1:1 Rest:** asymmetrische Rahmenbreiten, Bank/Nische, Laibungsverkleidung, Form (Rund/Spitz/Schräg). ~~echtes Sprossengitter~~ ✅ **erledigt 2026-07-12 (`00bff27`):** `mullionCols` (vertikale Sprossen-Spalten) spiegelbildlich zu `mullionRows` — 3D-Rahmen-Riegel, Ansichts-Trennlinien + Glasscheiben als echtes rows×cols-Raster, Eingabefelder in `OpeningEditorDialog`/`ResourceManager`. - [ ] **Dach 1:1 Rest:** Kniestock/Drempel, Krüppelwalm, Kehlen bei L-Grundriss (Straight-Skeleton), Gauben/Dachfenster, Aufschieblinge. ~~Dach im Vertikalschnitt~~ ✅ `f248e2a`. - [ ] **Geneigte Decke** (Rampe/Gefälle), Deckenspiegel (zweite abgehängte Fläche) — P2/P3. - **Nicht bauen** (Doc §6): VW-Massketten-Apparat, volle Sichtbarkeitsmatrix, Eck-Fenster/-Dach generisch, Beschlags-Produktbibliothek, IFC-Void-Semantik nachrüsten. @@ -104,16 +106,11 @@ - [x] ~~**Ebene-Schraffur editierbar**~~ — **gelandet `dcb6ed5`**: Kategorie-Dialog (`App.tsx`, `editor.hatch`-Feld) hat `