Files
DOSSIER-STANDALONE/PENDENZEN.md
T
karim b65c676643 Research: Bauteile Treppe/Fenster/Tuer — Rhino-Plugin als Vorbild
RESEARCH_BAUTEILE_RHINO.md: Gap-Vergleich Rhino (treppe.py 1784Z + fenster/tuer)
vs. TS-Ist, priorisierte Anhebungs-Ansaetze (Gruppe A 2D-sofort / B 2D-mittel /
C 3D). Kern-Gaps: Treppe-Aussenlinie, Fenster-Bruestungslinie, Tuer-Sturzlinien
(SIA, gestrichelt) — fallen mit Schnitt/Ansichts-Darstellung zusammen.
PENDENZEN: Bauteil-Item im Backlog + Phase 5 abgehakt (a608a59).
2026-07-05 01:33:35 +02:00

15 KiB
Raw Blame History

PENDENZEN — Aufgaben-Queue (Single Source of Truth)

Diese Datei ist die einzige verbindliche Aufgabenliste. HANDOVER.md enthält nur noch Kontext/Konventionen/Environment/Zielmodelle — keinen Backlog mehr.

Arbeitsprotokoll (ZWINGEND)

Worker-Instanz (führt aus):

  1. Zuerst diese Datei lesen, dann CONVENTIONS.md + verlinkte Detailquellen des Items.
  2. Oberstes nicht-blockiertes Item aus 🔧 In Arbeit bzw. sonst ⏭️ Als Nächstes nehmen, fertig machen, verifizieren (npx tsc --noEmit + npx vitest run + trace-scan), abhaken, eine Ergebniszeile nach Erledigt schreiben (mit Commit-Hash, sobald committet).
  3. Rückfrage-Recht: Bei Unklarheit/Design-Entscheid NICHT raten — Item mit markieren, kurze Frage darunter notieren, nächstes freies Item nehmen. Fragen sammeln sich unter Offene Rückfragen.
  4. Kein Arbeitsschritt endet ohne aktualisierte Liste. Status hier ist immer aktuell, sonst driftet es wieder.
  5. Worker committet nicht selbst und delegiert nicht weiter (Agent/Task verboten) — das macht die Hauptinstanz. (Konvention HANDOVER.)

Planungs-Instanz (mit dem Nutzer, kuratiert):

  • Nimmt Nutzer-Feedback, pflegt daraus die Liste (rein/umpriorisieren/aufspalten). Führt selbst keine Queue-Items aus.
  • Prüft -Zeilen mit dem Nutzer, wandelt sie in konkrete Items.

Blocker (zuerst klären)

  • Toolchain prüfenERLEDIGT 2026-07-04 (macOS-Gerät): node/npm/cargo (1.96.0)/wasm-pack (0.15.0) alle vorhanden. npm install + npm approve-scripts esbuild wasm-pack … (npm gated Install-Scripts → allowScripts-Block in package.json, ungetrackt gelassen), rustup target add wasm32-unknown-unknown, beide WASM-Engines gebaut, Frontend gebaut, npm run tauri:build → Mac-App (cad.app + cad_0.1.0_aarch64.dmg, arm64) läuft. Verifikations-Baseline grün: tsc --noEmit sauber, vitest run 230/230, cargo test render3d 56/56. Kein Blocker mehr für Engine-Slices auf diesem Gerät.

🔧 In Arbeit

  • kernel2d-Port nach Rust/WASM (Plan: PORT_PLAN.md, Crate src-tauri/kernel2d, TS-Referenz bleibt kernel2d.ts, Differential-Harness src/geometry/kernel2d.parity.test.ts). Fortschritt:
    • Phase 1: Crate-Skelett + WASM-Fassade + build:kernel2da78e7c7
    • Phase 2: Primitive/Schnitt/Fläche/Kreis + Batch-Fassaden + Diff-Harness (Zufall+Golden) — 9e2c521
    • Phase 3: Offset (Miter + 1e-9-Fallback) + Fillet — c8ea2bf
    • Phase 4: Trim/Split/Join (trimPolyline, splitAtIntersections, joinChains — Löwenanteil) — 28471c1
    • Phase 5: roomArea-Flächen/ceiling/stair/roomBoundary portiert (vitest 263, 33 Parity) — a608a59. Offen in Phase 5: opening (mit Aufrufstellen-Änderung) — noch nicht portiert.
    • Phase 6: TS-Fassade umstellen (alt → kernel2d.legacy.ts), Suite grün, npm run build + WASM sauber. Achtung Laufzeit-Entscheid: macht die Live-App synchron WASM-abhängig (Init + Per-Call-Marshalling) — heute nutzt die App KEINE WASM-Geometrie zur Laufzeit; vor Umstellung mit Nutzer klären.

⚠️ Zu prüfen (evtl. schon erledigt / Status unklar)

  • Snap an Wand-Schichttrennliniengelandet 339202b (wallLayerBoundarySegments in src/tools/snapping.ts), verifiziert vorhanden.

⏭️ Als Nächstes

  • SPIKE — Bild-Texturen in render3d (RenderStyle::Textured real machen). Kleinster ehrlicher Durchstich: beweisen, dass der wgpu-3D-Renderer echte Bild-Texturen auf Wandflächen zeigt, sichtbar im spike3d-Fenster. Voller Auftrag/Übergabe: SPIKE_TEXTUR_render3d.md (Ausgangslage verifiziert, Symbol-Karte, exakter Umfang, harte Randbedingungen, Akzeptanz, Abschlussbericht). Kurz: UVs auf Wandflächen (planar in Metern, Alt-Pfad [pos,normal,color] bitgleich unangetastet) · prozedurales 256×256-Schachbrett (kein Asset, kein image-Crate) · Textur-Bind-Group group 1 (Globals bleibt group 0) · MESH_TEXTURED_WGSL (gleiche Beleuchtung, Albedo aus textureSample) · Verdrahtung bei RenderStyle::Textured · spike3d umschaltbar (T). Nur render3d-Crate, keine neuen Deps, Default-Build unverändert. Akzeptanz: cargo test grün (Mesh-Regression + naga-Test für MESH_TEXTURED_WGSL), spike3d zeigt weltmassstäbliche Textur. Ist der erste Durchstich der Textur-/PBR-Pipeline (§3D-REST unten) → am Ende ehrliche Lückenliste + Aufwandsschätzung für „richtig gutes" Texturing.

📋 Backlog (Priorität grob absteigend)

  • BAUTEILE aufs Rhino-Niveau heben (Treppe/Fenster/Tür). Vergleich Rhino-Plugin ↔ TS + priorisierte Ansätze: RESEARCH_BAUTEILE_RHINO.md. Gruppe A (2D, sofort, kernel2d): (1) Treppe Aussenlinie/Outline (gerade/L/Wendel), (2) Fenster Brüstungslinie im Plan, (3) Tür Sturzlinien (gestrichelt, SIA), (4) Treppe Referenz links/mitte/rechts, (5) Fenster Flügel-Mittelpfosten, (6) Tür wandoeffnung-Typ. Gruppe B (2D mittel), Gruppe C (3D, nach Mesh-Pipeline/truck). A-Items 13 fallen mit „Schnitt- vs. Ansichts-Darstellung" zusammen (Sturz = Bauteil unter Schnittebene → gestrichelte Überkopf-Projektion).

  • STRATEGIE — „von BIM-Tool zu echtem CAD". Direkt am Quellcode studierte Referenzen (OpenCADStudio/truck/acadrust) + Web-Import-Landkarte → konkrete, priorisierte Ansätze in RESEARCH_CAD_APPROACHES.md. Kern: (1) generisches Entity-Modell + Trait-Dispatch, (2) modeless Command-System (StepInput-Funnel + Kommandozeile), (3) DWG/DXF-Round-Trip via acadrust (MPL-2.0, pure Rust, WASM-tauglich), (4) volle Object-Snap-Schicht, (5) 3D-B-Rep später selektiv via truck (Apache-2.0, Geometrie-Crates WASM-fähig, Booleans/Fillets noch instabil). Der kernel2d-Rust/WASM-Kurs ist damit bestätigt. Mit Nutzer priorisieren, welcher Ansatz zuerst.

  • Schnitt- vs. Ansichts-Darstellung nach Schnitthöhe (BIM-Standard). Kern-Idee (Nutzer): jedes Bauteil bekommt getrennt eine Schnittlinie (kräftig, z. B. 0.250.35 mm, + Schnitt-Poché) und eine Ansichtslinie (Haarlinie); WELCHE gilt, entscheidet die z-Ausdehnung des Bauteils vs. die Schnitthöhe des Grundrisses (Default ~1 m):

    • Bauteil wird von der Schnittebene GESCHNITTEN → Schnittlinie + Schnitt-Poché (heutiges Wandverhalten).
    • Bauteil liegt ganz UNTER der Ebene (z. B. 30-cm-Wand bei 1 m Schnitthöhe, Brüstung, Podest) → nur „von oben gesehen" = Ansichtslinie/Haarlinie, KEINE Schnitt-Poché. ← genau der vom Nutzer genannte Fall.
    • Bauteil liegt ganz ÜBER der Ebene (Decke/Slab, Unterzug) → Ansicht, üblicherweise gestrichelte Überkopf-Haarlinie.
    • Passt konsistent zum bereits existierenden viewHatchId (Ansichts-Schraffur) vs. Schnitt-Schraffur — die Linienstärke-Dualität (View-/Cut-Weight je Component) ist die natürliche Erweiterung derselben Logik.
    • Nicht nur cut/view, sondern cut / AUFSICHT / UNTERSICHT (Nutzer): ein Bauteil sieht von oben anders aus als von unten. Der Grundriss (Blick nach unten) zeigt Bauteile UNTER der Ebene in Aufsicht (Oberseite); ein Deckenspiegel/Reflected Ceiling Plan (Blick nach oben) zeigt Bauteile ÜBER der Ebene in Untersicht (Unterseite — z. B. Kassettendecke, Leuchten). Also je Component potenziell drei Darstellungs-Slots (Schnitt / Aufsicht / Untersicht) × {Schraffur + Linienstärke}. Das heutige viewHatchId ist faktisch EIN View-Slot und vermischt Auf-/Untersicht; sauber wäre die Trennung. WELCHER Slot gilt, entscheidet die Blickrichtung der Sicht (Grundriss ↓ / Deckenspiegel ↑) UND die z-Lage relativ zur Schnittebene.
    • Verallgemeinert den Decken-Footprint-Clip (a2f6923): „Decke unter Wand verdeckt" ist ein Spezialfall von „Ansichtsbauteil vs. schneidende/überdeckende Bauteile".
    • Aufwand: mittelgroß, phasenweise machbar (1: z-Extent-vs-Schnitthöhe-Klassifikation cut/above/below; 2: Ansichtslinie-Weight je Component + Haarlinie/gestrichelt; 3: 30-cm-Wände & Slabs verdrahten). Nicht zu komplex im Konzept — es ist der reguläre CAD/BIM-Weg (ArchiCAD/Vectorworks/Revit). Mit Nutzer Detailgrade/Defaults festlegen.
  • Ebene-Schraffur editierbargelandet dcb6ed5: Kategorie-Dialog (App.tsx, editor.hatch-Feld) hat <select> auf cat.hatch + HatchSwatch-Vorschau. Verifiziert vorhanden.

  • GEO-BLOCK (gemeinsame Dateien io/geoContext/swissTopo/terrain/ContextImportDialog/Viewport3D/siteSlice):

    • Reale Höhen + Projekt-MüM (EG-Referenzhöhe): Terrain georeferenziert bei realem z relativ dazu, Gebäude auf Terrain drapiert (heute alles z=0).
    • Luftbild/SWISSIMAGE-Orthofoto als Textur aufs Terrain-Mesh.
    • Importierte Geo-Elemente auf aktives Geschoss (viewSlice.activeLevelId) + Gelände-Ebene.
    • Nordstern-Geo-Rendering: importierte Meshes (heute nur three.js importedMesh/terrainMesh) auch in projectToModel3d einspeisen.
    • 3D-Mesh-DXF/DWG-Import (heute DXF nur 2D); Building-Draping; höhere DTM-Auflösung.
  • ResourceManager Bauteile-Tab auf Master-Detailbereits Master-Detail (ComponentsTab/ComponentDetail in src/ui/ResourceManager.tsx, Liste links res-md-list / Detail rechts). Verifiziert vorhanden.

  • Einstellungs-Fenster (Rest): Verdrahtung ist da (viewSlice.snapColor/marqueeColor → PlanView SnapMarker/Marquee, Defaults aus theme/accents.ts, Projekt-MüM-Feld referenceElevationMasl). Offen bleibt nur: Snap/Endpunkt-Default = „aki" (s.u., derzeit Sora #5FA1C9) — reine Farbentscheidung des Nutzers.

  • Bildschraffur: ambientCG/CGI-Colorfiles als Quelle (Material-Lib WIP — erst nach Freigabe); Bild-Filter Sättigung/Helligkeit/Kontrast/SW (image.filters).

  • E2b Schraffur-Kachel-Motiv (MotifEditor für HatchStyle-Tile wiederverwenden).

  • Linienstile aufräumen (Weight-only-Stile → „Volllinie", lineStyleId-Referenzen remappen).

  • 2D-Plan z-Anordnen (Kombo-Schraffuren); Bild-Schraffur GL/DXF (heute Fallback).

  • AUDIT (DOSSIER-Studie): A1 Override-Regel-Engine; A2→A3 View-Snapshots → Print-Layout-Blätter (PDF pro Blatt); A5 reichere Öffnungen; B1 Text-Werkzeug (+ Kreis-Tool → Shortcuts 1&3); A4 Tragwerk; B2 Object-Info numerisch. (A6 Bauteil-Schedule-CSV erledigt.) Belege in /tmp/dossier-ref/rhino/*.py.

  • Elemente im Schnitt anwählbar; render3d 2D-Schraffur auf 3D-Flächen.

3D-REST (engine-schwer, bewusst NICHT blind — mit Nutzer angehen)

  • Textur-/PBR-Pipeline (Sampler/Bindings/UV in wgpu; dann textured-Style + Component.texture3d/Material echt rendern). Erster Durchstich als Spike terminiert → SPIKE_TEXTUR_render3d.md (steht unter ⏭️ Als Nächstes).
  • Wand-Schicht-Bänder in 3D Option Bbereits umgesetzt in resolveWallBands(layered=true) (src/plan/toWalls3d.ts:236-241): 3D-Viewer-Pfad liefert je Materiallage ein eigenes WallBand (Dicke + Component-Albedo + Normalen-Versatz), pushSegment emittiert jede Lage als eigene Voll-Box. dominantLayerColor ist nur noch Fallback für den Schnitt-Einkörper-Pfad (layered=false). Verifiziert per Code-Lesung.
  • Ortho-Ray-Picking (aktuell perspektivischer Pick-Strahl; Front/Top/Side-Presets vor erster Navigation leicht ungenau).
  • 3D-Griffe/Editieren (Wand-Endpunkte im 3D ziehen etc. — bisher nur Auswahl + Panel-Edit).

Offene Rückfragen (an den Nutzer)

  • „aki" Snap/Endpunkt-Farbeentschieden 2026-07-04: Sora #5FA1C9 als endgültiger Default festgeschrieben (src/theme/accents.ts DEFAULT_SNAP_COLOR, Doc aktualisiert). Frage geschlossen.
  • Floating-ResourceManager „headless" = ganz ohne Titelleiste? (aktuell MIT)
  • Geo-Block: Projekt-MüM zuerst oder Nordstern-Geo-Rendering?
  • Verifizieren/klären: Isometrie „echte" orthographische Iso (teilw. durch Locked-Iso cb8fae5 adressiert)? · TopBar-Detailgrad (zoom% ganz aus Footer)? · DOSSIER-Audit welche Features konkret übernommen?

Erledigt (Verlauf, neueste oben)

Nur jüngste Session; ältere Historie siehe git log und HANDOVER-Narrative.

  • 2026-07-05 Textur-Spike render3d (RenderStyle::Textured real) — zweiter Vertex-Pfad [pos,normal,uv] aus dem Mesh abgeleitet (Alt-Pfad bitgleich, per Test belegt), prozedurales 256×256-Schachbrett (kein Asset/image-Crate), Textur-Bind-Group group 1, MESH_TEXTURED_WGSL (gleiche Beleuchtung, Albedo aus Sampler), Pipeline bitidentisch zur Haupt-Pipeline, spike3d per T umschaltbar. Umsetzung per Agent, Hauptinstanz verifiziert: cargo test 58/59 (inkl. naga-Test) grün, alle 4 Builds sauber. Visuelle Fenster-Abnahme durch Nutzer bestanden 2026-07-05 (Schachbrett korrekt, T-Umschaltung ok). Erster Durchstich der Textur-/PBR-Pipeline; ehrliche Lückenliste im Bericht — 8556037
  • 2026-07-04 Grundriss: Decke drückt nicht mehr durch die Wände — Decken-Umriss an Wand-Footprints (OBB) geclippt; Füllfläche strokelos, Umriss nur über unverdeckte Teilstücke (Überstände). Deckungsgleiche Decke ⇒ Umriss entfällt. vitest 230, tsc sauber — a2f6923
  • 2026-07-04 T-Stoss-Putznaht entfernt — L-Seitenlinie nur noch bei materialFREMDEM Nah-Putz; materialgleicher Putz verschmilzt nahtlos (Nutzer-Direktive „Naht entfernen"). TS+Rust synchron, 3 Tests gezogen, cargo 8/8 — a5ebfa7
  • 2026-07-04 Snap-Farbe entschieden: Sora #5FA1C9 als endgültiger Default festgeschrieben (DEFAULT_SNAP_COLOR, Doc), „aki"- geschlossen.
  • 2026-07-04 Mac-Build via Tauri + Queue-Abgleich — Toolchain auf macOS-Gerät verifiziert, cad.app/cad_0.1.0_aarch64.dmg gebaut & gestartet. Verifikations-Baseline grün (tsc/vitest 230/cargo 56). Queue-Reconciliation: Toolchain-Blocker, Snap-Slice (339202b), Ebene-Schraffur (dcb6ed5), Bauteile-Tab-Master-Detail, Einstellungs-Verdrahtung UND Wand-Schicht-Bänder 3D (Option B, toWalls3d.ts) waren allesamt bereits gelandet, aber in PENDENZEN noch als offen gelistet → abgehakt. (kein Code-Commit)
  • 2026-07-04 Öffnungen als echte Boolean-Löcher (+ Deckentrim-nur-3D) — Fenster/Türen = 1 Wandkörper mit rechteckigen holes (Rechteck-Gitter-Zerlegung + Laibungsquads), Segment-Boxen weg; Deckentrim nur noch im 3D-Pfad, Schnitt volle Höhe. Pflicht-Testfall versetzt-überlappende Fenster grün. cargo test 56, vitest 230, build:engine3d + tsc sauber — 1407c68
  • 2026-07-04 Joins Phase 1c Durchgangswand am T-Stoss echt aufbrechen (spanCutouts) — c5a344d
  • 2026-07-04 Locked-Iso-Fix freie Kamera bleibt nach Ortho-Preset orthografisch — cb8fae5
  • 2026-07-04 3D-Live-Schnittebene mit schraffierten Schnittflächen — 03f0c40
  • 2026-07-04 Joins Phase 2 Merge-Regel im Schnitt (gleiche Komponente verschmilzt) — 82d354f