diff --git a/PENDENZEN.md b/PENDENZEN.md index 87abfa0..31c84af 100644 --- a/PENDENZEN.md +++ b/PENDENZEN.md @@ -25,8 +25,8 @@ ## 🔧 In Arbeit - [ ] **GEO-BLOCK Folgepunkte (2026-07-12, nach dem swissBUILDINGS3D-DXF-Fix)** — Nutzer-Report, noch NICHT umgesetzt: - - **Georeferenzierung fehlt strukturell:** Jeder Import (`fetchBuildings3d`/`fetchBuildings`/`fetchOsm`/`fetchTerrainXyz`) berechnet seine `GeoOrigin` aus dem GESUCHTEN Standort (`makeOrigin(center)`, sucht Zentrum → Modell-(0,0)) — es gibt KEIN `Project`-Feld, das verbindet „mein Wand-Grundriss sitzt HIER im Modell" mit „das entspricht DORT in LV95". Funktioniert nur, wenn zufĂ€llig das eigene GebĂ€ude nahe Modell-(0,0) gezeichnet UND exakt die eigene Adresse gesucht wurde — sonst landet importierter Kontext (NachbargebĂ€ude/Terrain) lagefalsch relativ zu den eigenen WĂ€nden. Nutzer-Zitat: „ich hab das GefĂŒhl du platzierst das nicht georeferenziert". Braucht einen echten Referenzpunkt-Mechanismus (Nutzer klickt einen Punkt im Grundriss, ordnet ihm eine reale Adresse/Koordinate zu — vermutlich ein neues `Project`-Feld + Werkzeug/Dialog). **Nicht umgesetzt, Design mit Nutzer klĂ€ren.** - - **Importierte GebĂ€ude sollen anwĂ€hlbare Meshes auf einer Ebene sein, nicht nur ein Geo-Panel-Eintrag.** Aktuell landen sie in `project.context` (`ImportedMesh`), nur in `SitePanel`/`ContextImportDialog` sichtbar/entfernbar — kein Ebenen-Zuordnung, keine normale Element-Auswahl im 3D/Grundriss wie Wand/Dach/Decke. **Nicht umgesetzt, Design mit Nutzer klĂ€ren** (welche Ebene? Wie weit soll die Auswahl gehen — nur Farbe/Löschen, oder volle Attribut-Bearbeitung wie andere Bauteile?). + - ✅ **Georeferenzierung (Teil-Fix, `ae47b4f`):** `Project.geoAnchor` (persistenter Modell↔LV95-Referenzpunkt) ergĂ€nzt — der ERSTE Import in einem Projekt setzt ihn, ALLE folgenden Importe verwenden denselben Anker statt je eigenstĂ€ndig `makeOrigin(center)` neu zu berechnen (behebt die Lage-Inkonsistenz zwischen mehreren Importen). **Bewusst nur Teil-Fix:** der Anker sitzt immer bei Modell-(0,0) — es gibt noch KEIN Werkzeug, um ihn auf einen beliebigen, vom Nutzer gewĂ€hlten Modellpunkt zu legen. Wenn das eigene GebĂ€ude nicht nahe (0,0) gezeichnet ist, bleibt die Lage weiterhin ungenau. **Frei wĂ€hlbarer Referenzpunkt bleibt offen.** + - ✅ **Importierte GebĂ€ude/Terrain sind jetzt anwĂ€hlbare Meshes im 3D-Viewport (`e6a7738`):** Klick im WASM-3D-Viewport pickt Kontext-Meshes per Raycast (`raycast3d.ts`/`pickGeometry` in `toWalls3d.ts`), Auswahl bekommt einen eigenen Kanal (`selectedContextObjectIds`), Bounding-Box-Umriss als Highlight (volles Dreiecks-Wireframe wĂ€re bei grossen Importen zu dicht), Entf-Taste löscht, `SitePanel`-Liste hebt die Auswahl hervor. **Bewusst NICHT umgesetzt:** die „auf einer Ebene"-Zuordnung (kein `categoryCode`/Layer-Feld an `ImportedMesh`/`TerrainMesh`, keine Sichtbarkeits-Kopplung an die Ebenen-Verwaltung) und keine volle Attribut-Bearbeitung (nur Name-Anzeige/Löschen, keine `deriveSelection()`-Integration ins Attribute-Panel — als zu gross fĂŒr diesen Schritt eingeschĂ€tzt). **Ebenen-Zuordnung bleibt offen, ggf. eigener Design-Entscheid nötig** (eine feste „Import"-Ebene vs. frei zuweisbar). - ✅ **Zwei echte Bugs im swissBUILDINGS3D-Pfad behoben (`35a6834`+`9705890`):** (1) Absturz bei riesigen Kacheln (JSZip „Invalid string length" — DXF komprimiert stark, eine Kachel unter dem 150-MB-Limit kann entpackt trotzdem >700 MB Text ergeben; nur `asset.size` aus der STAC-API zu prĂŒfen reichte nicht, jetzt zusĂ€tzlich die JSZip-interne GrössenschĂ€tzung + genereller Try/Catch, ĂŒbersprungene Kacheln landen sichtbar in `skippedTiles`/UI-Meldung statt stumm 0 GebĂ€ude). (2) **Der eigentliche „Import funktioniert nicht"-Bug:** die installierte `dxf-parser`-Version liefert Polyface-Mesh-Face-Indizes als vier einzelne Felder (`faceA`/`faceB`/`faceC`/`faceD`, Gruppencodes 71–74) statt als `faces`-Array — unser Code prĂŒfte auf das Array, das nie existierte, jede swissBUILDINGS3D-DXF-Kachel ergab dadurch 0 Dreiecke. Live gegen echte Kacheln verifiziert: jetzt tausende Dreiecke mit realistischen Höhenwerten. **Damit ist der GebĂ€ude-Import technisch lauffĂ€hig — die beiden Design-Punkte oben (Georeferenzierung, Ebenen-Zuordnung) bleiben offen.** - [ ] **3D-Kanten-Folgepunkte ("Schattiert mit Kanten", 2026-07-12)** — nach dem Fix der falschen FlĂ€chendiagonalen (`7dc8f0d`) zeigte der Nutzer drei weitere Beobachtungen, NOCH NICHT behoben: @@ -209,6 +209,8 @@ _Nur jĂŒngste Session; Ă€ltere Historie siehe `git log` und HANDOVER-Narrative._ +- [x] 2026-07-12 **Georeferenzierung: persistenter Standort-Bezug statt Neuberechnung je Import (Teil-Fix)** (`ae47b4f`) — erster Design-Punkt aus dem GEO-BLOCK-Report umgesetzt. Neues `Project.geoAnchor` (`{lv95, model, label?}`) verbindet einmalig „dieser LV95-Punkt = dieser Modellpunkt"; der ERSTE Import in einem Projekt setzt ihn automatisch, alle folgenden Importe (`ContextImportDialog`) verwenden denselben Anker statt je unabhĂ€ngig `makeOrigin(center)` neu zu berechnen — behebt die Lage-Inkonsistenz zwischen mehreren Importen in einem Projekt. `tsc` sauber, Suite 794 grĂŒn. **Bewusst Teil-Fix:** Anker sitzt immer bei Modell-(0,0), es gibt noch kein Werkzeug, um ihn auf einen beliebigen, vom Nutzer gewĂ€hlten Modellpunkt zu legen — bleibt offen. +- [x] 2026-07-12 **Kontext-Meshes (importierte GebĂ€ude/Terrain) im 3D-Viewport anwĂ€hlbar** (`e6a7738`) — zweiter Design-Punkt aus dem GEO-BLOCK-Report umgesetzt. Raycast/`pickGeometry` (`raycast3d.ts`/`toWalls3d.ts`) um Kontext-Meshes erweitert (rohe Dreiecke aus `project.context`, kaputte Indizes robust ĂŒbersprungen), neuer Auswahl-Kanal `selectedContextObjectIds` (Store-Slice + `onViewport3dPick`-Zweig, konsistent in ALLE bestehenden Auswahl-Reset-Stellen eingehĂ€ngt), Highlight als achsenparallele Bounding-Box (volles Dreiecks-Wireframe wĂ€re bei importierten GebĂ€uden mit tausenden Dreiecken unbrauchbar dicht), Entf-Taste löscht die Auswahl (reused `project.context`-Filter im bestehenden Lösch-Handler), `SitePanel`-Liste hebt die im 3D gewĂ€hlte Zeile hervor (`host.selectedContextObjectIds`). +9 Tests (`raycast3d.test.ts`, `toWalls3d.test.ts`), Suite 803 grĂŒn, `tsc` sauber. **Bewusst nicht umgesetzt:** Ebenen-/Layer-Zuordnung (`categoryCode` an `ImportedMesh`/`TerrainMesh`), volle Attribut-Panel-Integration (`deriveSelection()`) — als eigener, grösserer Schritt eingeschĂ€tzt, s. „🔧 In Arbeit" oben. - [x] 2026-07-12 **3D-Ansicht: „Schattiert mit Kanten" (BIM-Look) + Fix falscher FlĂ€chendiagonalen** (`a84dc7a`+`7dc8f0d`) — neuer `RenderStyle::ShadedEdges` (render3d): Bauteilfarben + dunkle Modell-Kanten obenauf, wie Revit/ArchiCAD. Direkt danach Nutzer-Report: sichtbare Dreiecks-Diagonalen auf Dach/Fensterglas im neuen Modus. Root Cause: Kontext-Meshes (Dach/Glas/Rahmen, auch swissBUILDINGS3D-Import) werden wegen aktivem Backface-Culling IMMER doppelseitig aufgebaut (`mesh.rs::push_ctx_tri`, Dreieck + gespiegelte RĂŒckseite) — jede Kante bekam dadurch ein exakt entgegengesetztes Normalen-Paar, das die Knick-Erkennung fĂ€lschlich als Kante wertete. Fix in `edges.rs::should_draw`: RĂŒckseiten-Duplikate (dot≈-1) werden vor der Rand-/Knick-Entscheidung zusammengefĂŒhrt. +11 Rust-Tests, 88/88 grĂŒn (`--features render`). **Drei Folgepunkte dabei entdeckt, noch offen** (s. „🔧 In Arbeit" oben): Fenster-Rahmenecken/Dach-First ohne sauberen Verschnitt (vermutlich fehlende Boolean-Union, kein Kanten-Bug), OG-WandflĂ€chen mit vielen vertikalen Strichen (nicht diagnostiziert). - [x] 2026-07-12 **swissBUILDINGS3D-Import repariert: Absturz + eigentlicher „funktioniert nicht"-Bug** (`35a6834`+`9705890`) — zwei getrennte, echte Bugs gefunden und behoben. (1) Harter Absturz (JSZip „Invalid string length") bei Kacheln, deren ENTPACKTE Grösse (DXF komprimiert stark) die max. JS-String-LĂ€nge sprengt, obwohl die ZIP-Grösse selbst unter dem Limit lag — `downloadAssetText` prĂŒft jetzt zusĂ€tzlich die JSZip-interne GrössenschĂ€tzung und fĂ€ngt alle Fehler sicher ab; ĂŒbersprungene Kacheln landen sichtbar in `skippedTiles`/einer UI-Meldung statt eines stummen Leer-Ergebnisses. (2) **Der eigentliche Grund, warum der Import nie GebĂ€ude lieferte:** die installierte `dxf-parser`-Version liefert Polyface-Mesh-Face-Indizes als vier einzelne Felder (`faceA..faceD`, Gruppencodes 71–74) statt als erwartetes `faces`-Array — `addPolyfaceMesh` prĂŒfte auf ein Array, das nie existierte, jede swissBUILDINGS3D-DXF-Kachel (exakt dieses Format) ergab dadurch 0 Dreiecke. Live gegen echte Kacheln verifiziert (vorher 0 Meshes, jetzt tausende Dreiecke mit realistischen Höhenwerten). +3 Tests mit rohem DXF-Text (deckt auch die zugrundeliegende Bibliothek ab), Suite 794 grĂŒn. **Georeferenzierung und „anwĂ€hlbares Mesh auf Ebene statt Geo-Panel-Eintrag" bleiben als eigene, ungelöste Design-Fragen offen** (s. „🔧 In Arbeit" oben). - [x] 2026-07-12 **Fenster-Grundriss komplett ĂŒberarbeitet** (`e65a6b7`..`d2758ef`, iterativ ĂŒber mehrere Live-PrĂŒfungsrunden in Tauri) — Nutzer-Report mit SIA-Referenzbildern deckte mehrere ĂŒbereinanderliegende Probleme auf, alle einzeln gefixt + verifiziert: