Files
DOSSIER-STANDALONE/docs/README.md
T
karim a6c2c04736 Doku: STATUS.md (Codebase-Analyse) + Kern-Docs an den Ist-Zustand angeglichen
Vollständige Bestandsaufnahme der Codebasis als neue STATUS.md (Kennzahlen,
Feature-Inventar, Mist-Liste: toter Code, verwaiste WASM-Crates,
Doku-Widersprüche). ARCHITECTURE.md/README.md/CONVENTIONS.md waren noch auf
dem Tag-1-Planungsstand (Electron/Three.js/OpenCascade/Zustand/HLR-Worker) und
beschrieben nicht mehr, was tatsächlich gebaut wurde (eigene Rust/WASM-Engines,
eigener Store, analytische Rust-Schnitt-Pipeline, Tauri auf macOS + Electron
auf Linux). ROADMAP.md und HANDOVER.md als historisch markiert (Hinweis-Box),
Inhalt unverändert.
2026-07-21 13:35:58 +02:00

168 lines
10 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Dokumentation — Standalone Browser-BIM (cad)
> Stand: 2026-06-29 · **Historische Recherche-/Design-Dokumente aus der ersten
> Woche.** Mehrere Kern-Empfehlungen hier (replicad/OCCT als B-Rep-Kernel,
> Manifold, web-ifc, `three/webgpu`) wurden im tatsächlichen Bau **nicht**
> umgesetzt — stattdessen entstanden eigene Rust/WASM-Rendering-Engines
> („Nordstern"). Für den aktuellen Ist-Zustand: **[../STATUS.md](../STATUS.md)**
> und **[../ARCHITECTURE.md](../ARCHITECTURE.md)**. Die Dokumente unten sind als
> Recherche-Hintergrund weiterhin lesenswert, aber nicht mehr aktueller Plan.
> Übergeordnet: [ROADMAP.md](../ROADMAP.md) (Vision & Phasen, ebenfalls historisch) ·
> [CONVENTIONS.md](../CONVENTIONS.md) (Konventionen) · [ARCHITECTURE.md](../ARCHITECTURE.md).
Dieses Verzeichnis bündelt die Recherche- und Design-Dokumente für `cad`, die
eigenständige Browser-Variante des DOSSIER-Rhino-Plugins (React + TypeScript +
Three.js + SVG, alles client-side). **Leitprinzip aller Dokumente:** ein
semantisches Modell ist die einzige Wahrheit; jede Sicht (3D, Grundriss, Schnitt)
wird **abgeleitet**, Darstellung erst beim Rendern angewandt. Bezeichner im Code
englisch (Vectorworks-Terminologie), Prosa deutsch, Einheiten intern in Metern.
Die Dokumente sind in vier Gruppen geordnet: **Tech** (Bibliotheken/Kernel),
**Architektur/Design** (Aufbau & Bauteile), **UX** (Oberfläche & Interaktion),
**Swisstopo/SIA** (CH-Geodaten & Flächenstandards).
---
## Tech — Technologie- & Bibliotheksauswahl
### [research/tech-selection.md](research/tech-selection.md)
Evaluiert den kompletten Client-Stack für ein server­loses BIM-Werkzeug und
empfiehlt **`replicad`** (idiomatische TS-Schicht über `opencascade.js`/OCCT, MIT)
als primären B-Rep-Kernel im Web Worker, ergänzt durch **`Manifold`** (Apache-2.0)
für schnelle, robuste Mesh-Booleans auf Importgeometrie — denn nur ein echter
B-Rep-Kernel liefert exakte 2D-Ableitungen, und genau das löst replicads
`drawProjection` (OCC-HLR, `{visible, hidden}`-Kanten direkt im Browser). Weitere
Wahl: Import via **web-ifc + Fragments** (IFC), `dxf-parser` (DXF) und
`libredwg-web` (DWG, aber **GPL-3.0 → vorab klären/kapseln**); Vektor-Export über
**`svg2pdf.js` + `jsPDF`** (PDF) und **`@tarikjabiri/dxf`** (echte Hatch-Entities);
Schraffuren als SVG-`<pattern>` mit `userSpaceOnUse` (maßstabskorrekt); Rendering
über **`three/webgpu`** mit automatischem WebGL2-Fallback. Top-Risiken: DWG-Lizenz,
OCCT-WASM-Größe, HLR-Kosten (pro Ansicht cachen), WebGPU vor Migration benchmarken.
---
## Architektur/Design — Aufbau, Datenmodell & Bauteile
### [../ARCHITECTURE.md](../ARCHITECTURE.md)
Die übergreifende Standalone-Architektur und die systematische Übersetzung jedes
DOSSIER-Konzepts in ein Browser-Äquivalent (30-zeilige **Rhino→Browser-Mapping-
Tabelle**). Kern: das semantische `Project` (JSON) als einzige Wahrheit mit pure
`derive()` zu Scene3D/Plan/Section; ein **Zwei-Achsen-Datenmodell**
(`drawingLevels` × `layers`) plus `Resources`/`WallType`/`Element`/`Sheet`; ein
**Zustand-Store** ersetzt DOSSIERs `sc.sticky`-Bus, **`.cad.json`** (File System
Access API) + IndexedDB-Autosave ersetzen `doc.Strings`, und ein **Immer-Patch-
Undo/Redo** eliminiert die Cache-Stale-Bugs strukturell. Ziel-Repo-Struktur mit
**kleinen Bauteil-Modulen** statt des 7244-LOC-`elemente.py`-Monolithen; Rendering
über einen `THREE.Group`-Baum, der den Ebenen-Baum spiegelt.
### [design/parametric-walls.md](design/parametric-walls.md)
Regelbasierte Wandgenerierung als Alternative zum Direktzeichnen. Vier Regel-Varianten
(`GridRule`, `ModuleRule`, `ConditionalRule`, `PolylineRule`) erzeugen `Wall[]`-Arrays
über einen reinen Auflöser (`resolveParametricWall`). Deckungsbereich: Schweizer 3-m-
Wohnraster, bedingte Außen-/Innenwand-Dicken, 6-m-Jochbauweise. Phase A: Typsystem +
Resolver isoliert, kein UI. Phase B: Command + Formular-Editor. Phase C: Grid-Ressource
und IFC-Export.
### [design/elements.md](design/elements.md)
Legt **Daten, Generierung (3D + Plan) und Grip-Editing pro Bauteil** fest. Wichtigste
Empfehlung: die **Prioritäts-T-/X-Verschneidung mehrschichtiger Wände** (Backbone-
Algorithmus, Port von `_t_junction_layer_overrides`) — das höchstpriorisierte
gemeinsame Material läuft durch, der Rest mitert an; Priorität sitzt am **Component**
(`joinPriority` als Daten, nicht Hardcode). Deckt zudem gehostete Öffnungen mit
LoD-Stufen (`_OEFF_PIECE_DEFS`), Decken mit Aussparungen, Treppen (gerade/L/Wendel,
geschossübergreifend, normgerechtes 2D-Symbol), Dächer, Tragwerk und **SIA-416-Räume**
(Shoelace-Fläche, Stempel, Färbung über Override-Preset) ab; das `Tool`-Interface +
Snap-Engine ersetzt DOSSIERs Rhino-Command-Aliases.
### [design/plans-output.md](design/plans-output.md)
Der Weg zu **schönen, normgerechten, druckfertigen 2D-Plänen** (Vektor-PDF). Zentrale
Erkenntnis: Ansichten = Kamera + optionaler Schnitt, und es gibt **zwei Plan-Pfade**
(symbolischer Grundriss aus Parametern vs. Schnitt/Ansicht via **HLR im Worker**,
gecacht). Empfiehlt SVG/Paper-Space als Maßstabsmodell — Strichstärke/Schraffur sind
direkt in mm definiert (`dpi = 96·devicePixelRatio`, Hatch-Faktor `sqrt(N)/10`), was
DOSSIERs fragiles Plotweight-Rescaling überflüssig macht. Behandelt außerdem
Ausschnitte/View-Snapshots, Layer-Kombinationen, Kamera-Presets + Norden-Rotation,
Bemaßung sowie Sheets + Vektor-PDF-Export (`svg2pdf.js`/`jsPDF`, `PAPER_MM`).
### [design/resources-graphics.md](design/resources-graphics.md)
Die **Stil-Schicht**: verwaltete Ressourcen-Bibliotheken (Component-/Hatch-/Line-
Manager, alles per id referenziert), die `resolveStyle`-Kette
(ByLayer → Element-Style → Override) und die **regelbasierte Overrides-Engine**.
Schlüssel-Empfehlung: Overrides als **reine Render-Reads** modellieren (kein
Backup/Restore wie in DOSSIER, da nichts mutiert wird) — inklusive eines
**SIA-416-Presets** statt hartcodierter Färbung. Ergänzt Symbol-Bibliothek,
Rich-Text-Annotationen, den LoD-Resolver (`resolveDetail`) und den Section-Style für
geschnittene Bauteile; eine Tabelle zeigt, was der Browser hier gegenüber DOSSIER
vereinfacht.
---
## UX — Oberfläche, Interaktion & gefühlte Geschwindigkeit
### [research/ux-patterns.md](research/ux-patterns.md)
Untersucht UX-Muster moderner Browser-CAD/BIM-Tools (Arcol, Snaptrude, TestFit,
Onshape, Vectorworks, Figma) und leitet **priorisierte Leitplanken** ab. Empfehlung
für die Grundstruktur: eine feste, Figma-artige **3-Zonen-Shell**
(Navigator/Viewport/Inspector) — explizit gegen Paletten-Wildwuchs —, mit
Vectorworks-Navigation-Tabs für unsere zwei Achsen und einem zwei/drei-spaltigen
Resource-Manager als Vorbild. Größte Differenzierungs-Hebel laut Doku:
**Snapping/Inferencing** im Onshape-Stil (Vertex-Highlights, Achsenlinien, Shift
unterdrückt) und **Grip-Editing über Sicht-Grenzen** (Schnittlinie im Plan ziehen);
dazu perceived-performance-Muster (Skeletons, optimistic UI, 150-ms-Delay-then-show),
eine Command-Palette (Cmd/Ctrl-K) und learn-by-doing-Onboarding am Sample-Projekt.
---
## Swisstopo/SIA — Schweizer Geodaten & Flächenstandards
### [research/swisstopo-sia.md](research/swisstopo-sia.md)
Dokumentiert die **live getesteten** geo.admin.ch-Dienste und die SIA-Flächenlogik.
Überraschendster Befund: **alles ist ohne eigenen Backend-Proxy nutzbar** — alle vier
Hosts senden `access-control-allow-origin: *`, und der Height-Service antwortet
faktisch frei. Schlüssel fürs Browser-Gelände-Mesh ist **swissALTI3D als Cloud-
Optimized GeoTIFF** (Range-Requests via `geotiff.js`, kein Full-Download); die
**Parzelle** kommt direkt als LV95-Polygon + EGRID aus dem Identify-Service. Empfiehlt
einen konkreten Library-Satz (`proj4`, `geotiff`, `3DTilesRendererJS`/`loaders.gl`)
und ordnet die Umsetzung in ROADMAP-Phasen ein (Phase 2 SIA-Räume = reine Logik →
Phase 4a Koordinaten → 4b Gelände/Orthofoto → 4c Nachbargebäude). SIA-Teil:
verifizierte SIA-416-Formeln, DOSSIERs SIA-Logik 1:1 portierbar (Shoelace,
`compute_sia_bilanz`, CSV mit BOM); Origin-Shift (LV95 → 0/0/0) ist Pflicht wegen
float32-Jitter, Caching über IndexedDB.
---
## Top-5 Querschnitts-Empfehlungen für die ROADMAP
Diese fünf Punkte tauchen in mehreren Dokumenten auf und sollten die ROADMAP-Planung
und Priorisierung leiten:
1. **Pure-Ableitungs-Architektur als unverhandelbares Fundament** — ein
semantisches Modell, alle Sichten abgeleitet, Darstellung erst beim Rendern.
Trägt ARCHITECTURE.md, beide Plan-/Stil-Designs und die UX-Doku (billiger
Split-View, optimistic Edits, kein Cache-Stale-/Override-Restore-Aufwand). Muss
früh stehen (Store + Undo, Phase 01), weil sie alles Spätere prägt.
2. **OCCT/replicad im Web Worker früh als Spike absichern** — der B-Rep-Kernel und
sein `drawProjection`-HLR sind der kritische Pfad für Schnitt/Ansicht (Risiko #4)
*und* für exakte Wand-Booleans (Risiko #1) *und* für IFC. WASM-Größe, HLR-Kosten
(pro Ansicht cachen) und das Worker-Pattern sollten vor Phase 3 mit einer echten
Szene validiert werden.
3. **Component-getriebene Prioritäts-Verschneidung (Backbone-T/X) als zentrales
Geometrie-Risiko** — `joinPriority` als Daten am Component; höchstes gemeinsames
Material läuft durch, Rest mitert. Verbindet elements.md + resources-graphics.md;
2D-Plan rein analytisch, exakte 3D-Booleans im Worker. Stufenweise umsetzen
(Risiko #1, Phase 1).
4. **SVG/Paper-Space-Maßstabsmodell + maßstabskorrekte Schraffuren durchgängig**
Strichstärke/Text/Hatch in mm, `dpi = 96·devicePixelRatio`, Hatch `sqrt(N)/10`,
SVG-`<pattern>` mit `userSpaceOnUse`. Eliminiert DOSSIERs Plotweight-Rescaling und
speist denselben Serializer für Bildschirm, PDF und DXF (tech-selection +
plans-output + resources-graphics).
5. **Schweiz-Spezifika als Differenzierer ohne Backend-Last** — SIA-416-Bilanz
(reine Logik, Phase 2, ⭐) und der serverlose Swisstopo-Flow (CORS-offen,
COG-Terrain, Parzelle/EGRID, Norden-Rotation, Origin-Shift). Klein im Aufwand,
groß im CH-Marktwert; SIA-Färbung läuft über das Override-Preset, nicht über
Sonderpfade.