# Dokumentation — Standalone Browser-BIM (cad) > Stand: 2026-06-29 · Übergeordnet: [ROADMAP.md](../ROADMAP.md) (Vision & Phasen) · > [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-`` 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 0–1), 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-`` 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.