# Browser-BIM für Wohnbau — Architektur & Produkt-Roadmap

> Arbeitstitel: **cad** (Name später)
> Ausrichtung: **BIM-first** · Nische: **Wohnbau / Einfamilienhäuser**
> Stand: 2026-06-28

## 1. Produktvision

Ein **browserbasiertes BIM-Werkzeug** für Wohnbau, das zwei Dinge verbindet:

1. **Einfaches 3D-Gebäudemodell** — aus semantischen Bauteilen: Wände, Türen, Fenster, Treppen, Decken, Dächer, Räume.
2. **Schöne, normgerechte 2D-Pläne** — Grundrisse, Schnitte, Ansichten — automatisch aus dem Modell abgeleitet.

**Kernversprechen:** *Das schönste und einfachste Werkzeug, um ein Wohnhaus zu modellieren und daraus perfekte Pläne zu ziehen.* Nicht Revit nachbauen — radikaler Fokus auf Wohnbau + Plan-Qualität.

**Markt-Beleg:** Arcol, Snaptrude, TestFit zeigen, dass browserbasiertes BIM real ist und Nutzer schlanke, schöne Tools wollen statt der schwerfälligen Giganten (Revit/ArchiCAD).

---

## 2. Das mentale Modell — warum BIM anders ist als CAD

| | mechanisches CAD | **BIM (unser Weg)** |
|---|---|---|
| Bausteine | generische Volumenkörper | **semantische Bauteile** (Wand, Tür, Fenster…) |
| Beziehungen | keine | Tür *hostet* in Wand & schneidet Öffnung; Wände *verbinden* sich |
| Geschosse | — | **Stockwerke** als erste Klasse |
| 2D-Plan | Hidden-Line-Projektion | **symbolische Darstellung** (Schwenkbögen, Schraffuren, Lauflinien) |
| Standard | STEP | **IFC** |

---

## 2b. Kern-Prinzip: ein Modell, viele Darstellungen

Das **wichtigste Architektur-Prinzip**: Das semantische Modell ist die *eine
Wahrheit*; jede Ansicht (3D, Grundriss, Schnitt) ist eine **abgeleitete
Darstellung**. Im Spike steht das bereits. Daraus folgen direkt die Kern-Wünsche:

- **Modelldarstellungen / Detailgrade** — derselbe Tür/Fenster wird je nach
  `detailLevel` (grob / mittel / fein) unterschiedlich gezeichnet (≙ Revit
  „Detailgrad", ArchiCAD „Modelldarstellung"). Grob: Öffnung + Linie. Fein:
  Rahmen, Blatt, Schwenkbogen, Anschlag.
- **Editierbare Stile** — Wandfarben, Linienstärken, Türlinien, Schraffuren als
  **Stil-Schicht**, erst beim Rendern angewandt (nicht in die Geometrie
  eingebacken). Pro Kategorie *und* pro Element überschreibbar.
- **Mehrschichtige Bauteile** — Wände/Decken mit **Schichtaufbau** (`layers[]`:
  Material + Dicke + Priorität). 3D und Plan lesen dieselben Schichten.
- **In 2D *und* 3D zeichnen** — beide sind editierbare Sichten auf *ein* Modell;
  Werkzeuge mutieren das Modell, alle Sichten re-derivieren reaktiv.

Schwierigkeit: Detailgrade/Stile/Schichten sind 🟢 gut machbar; 2D+3D-Editieren
🟡 mittel; **mehrschichtige Wand-Verschneidung** 🔴 der härteste Teil (Risiko #1).

---

## 2c. Arbeitsweise & Dokumentmodell (DOSSIER-Modell) ⭐

Referenz: **DOSSIER** (Rhino-Plugin des Nutzers, https://git.kgva.ch/karim/DOSSIER).
Dieses Projekt ist die **Standalone-Browser-Variante** davon. Zwei *unabhängige* Achsen:

- **Zeichnungsebenen** — die obersten Dokument-Abschnitte, zwei Arten:
  - **Geschosse** (EG, 1OG …): `hoehe` (Geschosshöhe), `schnitthoehe` (Schnitthöhe),
    `okff` (Niveau, akkumuliert), `visible`/`locked`.
  - **Schnitte / Ansichten** (`type:"schnitt"`): Schnittlinie `linePts`, Richtung
    `dirSign`, Höhenbereich, Tiefe.
  - Ein **Geschoss** wird **im 3D-View ODER im Plan-View** betrachtet (Umschalter,
    *keine* getrennten Daten). Plan-View = Clipping-Ebene auf `okff + schnitthoehe`.
- **Ebenen** — das **Grafik-Kategorien-Schema**, in *jedem* Geschoss vorhanden;
  Baum-Knoten mit pro Ebene einstellbaren **Darstellungseinstellungen** (in den
  „Ebeneneinstellungen…"): **Stift** = Typ/Linienstil + Farbe + Dicke (lw);
  **Schraffur** = Typ + Skalierung + Rotation + **Stiftstärke der Schraffurlinien**.
  Modell: `{code, name, visible, locked, lineStyleId|{type,color,lw}, hatchId|{type,scale,angle,lineWeight}, children}`.
  Codes 1:1 wie DOSSIER:
  `00 Raster · 01 Vermessung · 20 Wände (└21 Türen/Fenster) · 30 Decken · 31 Dächer
  · 40 Treppen (└41 Treppen-2D) · 50 Tragwerk · 60 Räume · 80 Plangrafik …`
- **Elemente** (Wand, Decke, Treppe, Öffnung, Plangrafik, Text) liegen **auf den
  Ebenen** und kennen ihr **Geschoss** *und* ihre **Ebene (Code)**.
- **2D-Zeichnen** (Linie, Polylinie, Rechteck, Kreis, Bogen, Text) findet auf der
  Ebene `80 Plangrafik` (bzw. passender Kategorie) statt.

**Ansichtstypen = Kamera-Projektion + optionaler Schnitt** (vereinheitlicht):

| Typ | Projektion | Schnitt |
|---|---|---|
| **Grundriss** | Top-View (orthogonal) | horizontal auf `okff + schnitthöhe` |
| **Schnitt** | Front-View in eine Richtung (orthogonal) | vertikale Schnittebene (Geschnittenes + dahinter) |
| **Ansicht** | Front-View in eine Richtung (orthogonal) | kein Schnitt (Fassade außen) |
| **Perspektive** | 3D perspektivisch | — |

Sichtbarkeit pro Ansicht über Ein-/Ausschalten von Ebenen & Zeichnungsebenen.

Persistenz (DOSSIER): zwei getrennte JSON-Bäume `dossier_zeichnungsebenen` und
`dossier_ebenen`; Elemente tragen `geschoss`-id + Ebenen-`code`. Plan-View nutzt
eine Clipping-Ebene; weitere Konzepte: Overrides (regelbasiert), Ausschnitte
(View-Snapshots), Massstab (pro Viewport), Layer-Kombinationen, SIA-Räume.

## 2d. Resource Manager & Prioritäts-Verschneidung 🔴

Verwaltete Ressourcen-Bibliotheken wie in Vectorworks, jeweils mit eigenem Manager:

- **Line Manager** — Linienstile (Stärke, Farbe, Strichelung), wiederverwendbar.
- **Hatch Manager** — Schraffurstile (Muster, Maßstab, Winkel, Linienstil).
- **Component Manager** — Baustoffe mehrschichtiger Bauteile. Pro Component:
  **Schraffur** (→ Hatch Manager), **3D-Textur**, Farbe und
  **Verschneidungs-Priorität** (`joinPriority`).

Alles verweist per id auf diese Bibliotheken (Components nutzen Hatches, Hatches
nutzen Linienstile, 2D-Objekte & Ebenen-Defaults nutzen Linienstile/Schraffuren) —
zentral änderbar.

Regel: **höhere Priorität verschneidet sich zuerst / läuft durch.** Beispiel an
einer T-Ecke (Beton-Wand mit Innen- und Außenputz):

- **Beton** (höchste Prio) läuft in der Mitte **durch** den Stoß.
- **Putze** (niedrige Prio) **verbinden** sich jeweils auf ihrer Seite mit dem
  angrenzenden Putz, gehen aber **nirgends durch** den Beton.

Das ist die anspruchsvollste Verschneidungs-Logik (Revit „Layer Priority /
Wrapping", Vectorworks „Component-Verschneidung"). Wir bauen sie stufenweise auf
der bereits funktionierenden L-Ecken-Gehrung auf.

---

## 3. Zwei Wege zum 2D-Plan (zentrale Architektur-Erkenntnis)

Architektur-Pläne entstehen auf **zwei verschiedenen Wegen** — das prägt die ganze Engine:

**A) Grundriss = aus dem semantischen 2D-Footprint + Symbolik**
Ein Grundriss ist ein horizontaler Schnitt auf ~1 m. Statt ein 3D-Mesh zu zerschneiden, generieren wir ihn **direkt aus den Parametern**: Wand-Achsen + Dicken → Linien; Öffnungen → Lücken + Tür-/Fenstersymbol; Treppe → Lauflinie. Schnell, exakt, sauber, vektorbasiert.

**B) Schnitt & Ansicht = aus 3D-Projektion (HLR)**
Vertikale Schnitte und Ansichten brauchen echte 3D-Projektion mit verdeckten Kanten (Hidden Line Removal) durch das zusammengebaute Gebäude.

→ Wir brauchen **beides**: einen sauberen 2D-Symbol-Renderer *und* einen Projektions-Pfad.

---

## 4. Tech-Stack

| Schicht | Wahl | Begründung |
|---|---|---|
| BIM-Datenmodell | **eigenes parametrisches Gebäudemodell** (TS) | web-ifc ist stark beim *Lesen/Anzeigen* von IFC, schwächer beim *Authoring/Editieren*. Für ein Editier-Tool brauchen wir ein eigenes, editierbares Modell. |
| IFC-Interop | **web-ifc** (ThatOpen, WASM) | Import/Export nach IFC — Brücke zu Revit/ArchiCAD. |
| 3D-Rendering | **Three.js** | Standard; ThatOpen baut darauf auf, also kompatibel. |
| Geometrie-Booleans | **OpenCascade.js** (Öffnungen) *oder* Manifold | Tür/Fenster schneidet Loch in Wand. OCC = exakt (B-Rep), Manifold = schnell (Mesh). Entscheidung in Phase 0. |
| Projektion/HLR | **OpenCascade.js** (`HLRBRep`) | Saubere Linien für Schnitte/Ansichten. |
| 2D-Pläne | **SVG** + eigener Symbol-Renderer | Vektor, druckbar, exportierbar (DXF/PDF). |
| Frontend | **React + TypeScript + Vite** | Schnelles HMR, großes Ökosystem. |
| Worker-Bridge | **Comlink** | Schwere Geometrie im Web Worker, UI bleibt flüssig. |
| State | **Zustand** o.ä. | Passt zum komplexen Dokumentmodell. |
| Persistenz (später) | Postgres + Object Storage | Versionierbare Projekte. |

---

## 5. Datenmodell (grob)

Vectorworks-orientiert: **Design Layers** (Modell-Eingabe) und **Drawing Layers**
(abgeleitete Ausgabe). Bauteile beziehen ihren Aufbau aus **Components** (verwaltet
im Component Manager).

```
Project
 ├─ Resources            // verwaltete Bibliotheken (Vectorworks-Stil)
 │   ├─ LineStyles[]       // Line Manager: { id, name, weight, color, dash }
 │   ├─ Hatches[]          // Hatch Manager: { id, name, pattern, scale, angle, lineStyleId }
 │   └─ Components[]       // Component Manager: wiederverwendbare Baustoffe
 │         Component { id, name, hatchId, texture3d, color, joinPriority }
 │                      // joinPriority: höher = verschneidet sich zuerst (geht durch)
 ├─ Grids (Achsraster)   (optional)
 ├─ Types                                                  // mehrschichtige Aufbauten
 │   ├─ WallType  { id, name, layers: Layer[] }
 │   └─ SlabType  { id, name, layers: Layer[] }
 │        Layer = { componentId, thickness }              // Priorität liegt am Component
 │
 ├─ DesignLayers ("Ebenen")   // hier wird modelliert & 2D gezeichnet
 │   DesignLayer { id, name, elevation(z), height(Δz),
 │                 defaultLineStyle, defaultHatch,
 │                 elements:  Wall | Door | Window | Slab | Stair | Roof | Space ,
 │                 draw2d:    Line | Polyline | Rect | Circle | Arc | Text }
 │     Wall   { axis, wallTypeId, height }
 │     Door   { hostWall, position, width, height, swing, symbolId }
 │     Window { hostWall, position, width, height, sill }
 │     Slab   { boundary, slabTypeId }   ·   Space { boundary, name }  // Fläche auto
 │
 └─ DrawingLayers ("Zeichnungsebenen")   // abgeleitete Ausgabe
     DrawingLayer { id, name,
                    type: plan | section | elevation | drawing,
                    cutHeight(z),          // bei plan: Schnitthöhe
                    sectionLine,           // bei section
                    sourceDesignLayers[],
                    detailLevel: coarse|medium|fine,
                    scale, styleOverrides, dims[], labels[], annotations[] }
```
3D *und* jede Drawing Layer werden **aus den Design Layers abgeleitet**. `cutHeight`,
`detailLevel`, `Styles` und `Component`-Eigenschaften steuern, *wie* abgeleitet wird.

---

## 6. Die harten Risiken (früh angehen)

1. **Wand-Verbindungen / Cleanup** ⚠️ — Wo Wände aufeinandertreffen, müssen sie sauber verschneiden. **L-Ecken-Gehrung: ✅ erledigt.** Offen & berüchtigt schwer: **Prioritäts-basierte T-/X-Stöße bei mehrschichtigen Wänden** (Beton durch, Putz verbindet seitlich, geht nicht durch — siehe 2d). → stufenweise auf der Gehrung aufbauen.
2. **Gehostete Öffnungen** — Tür/Fenster muss synchron mit der Wand bleiben (verschieben, schneiden). → Saubere Host-Beziehung im Modell.
3. **Symbolischer Plan-Renderer** — normgerechte Darstellung (Schwenkbögen, Schraffuren der geschnittenen Bauteile, Lauflinien). → Eigenes Regelwerk; früh prototypen.
4. **Schnitt-/Ansichts-Projektion (HLR)** durch ganzes Gebäude — Performance. → Worker + Caching.
5. **IFC-Treue** — verlustarmer Round-Trip. → Früh mit echten IFC-Dateien testen.
6. **Geschoss-übergreifende Elemente** (Treppen, Lufträume).

---

## 7. Phasen-Roadmap

### Phase 0 — Spike: das größte Risiko zuerst
**Ziel:** Beweisen, dass der symbolische Plan-Pfad im Browser funktioniert.
- Eine Wand zeichnen, eine Tür platzieren → Öffnung wird geschnitten (3D).
- Daraus **Grundriss als SVG** generieren: Wand-Schnittlinien + Tür-**Schwenkbogen**.
- ✅ *Erfolg:* sauberer, schöner Grundriss-Ausschnitt aus einem semantischen Modell.

### Phase 1 — MVP: durchgehende Wohnbau-Scheibe
- **Dokumentmodell (Vectorworks-Stil):** Design Layers ("Ebenen") + Drawing Layers
  ("Zeichnungsebenen", Typ plan/section/elevation, mit `cutHeight`).
- **Resource Manager:** Line Manager, Hatch Manager, Component Manager (mit
  `joinPriority`, Schraffur, 3D-Textur).
- **Wände** mehrschichtig (✅) mit Eck-Gehrung (✅); **Prioritäts-T-Stöße** (Risiko #1).
- **Türen & Fenster** gehostet in Wänden (Risiko #2).
- **2D-Zeichnen:** Linie, Polylinie, Rechteck, Kreis, Bogen mit Stilen.
- **Decken/Böden** (Slabs); 3D-Viewport + **live Grundriss**, Basis-Bemaßung.
- → aus DOSSIER (§11): Wand-Referenzlage (mid/left/right), Öffnungs-Detailgrad mit Dokument-Override, Decken-Aussparungen, Element-Übersicht (BIM-Tree).
- ✅ Ein einfaches Haus modellieren → saubere Pläne pro Geschoss.

### Phase 2 — Vollständiger Bauteil-Satz Wohnbau
- **Treppen** (mit Lauflinie im Plan), **Dächer**, Geländer.
- **Räume/Spaces** mit automatischer Flächenberechnung & Raumstempel.
- Stützen/Unterzüge (falls nötig).
- Materialien & einfache Visualisierung.
- → aus DOSSIER (§11): Treppen-Typen (gerade/L/Wendel) + geschoss­übergreifend, Dach-Typen (Pult/Sattel/Walm/Mansarde), Stützen-Profile, **SIA-416-Räume** + CSV, Raumstempel-Builder, Stil-Kataloge (Wände/Öffnungen).

### Phase 3 — Plan-/Dokumentations-Modul ⭐ (Differenzierung)
**Hier gewinnen wir. Maximale Politur.**
- **Grundrisse, Schnitte (HLR, Risiko #4), Ansichten.**
- **Automatische Bemaßung** (Außenketten, Achsen, Öffnungen) + manuelle.
- Schraffuren geschnittener Bauteile, Raumstempel, Beschriftungen, Symbole.
- **Plansätze/Sheets** mit Titelblock, Maßstäben, Layout.
- Schöne Typografie & Linienführung — genau das, was die Großen vermasseln.
- → aus DOSSIER (§11): **Massstab pro Viewport** (Auto-DPI, Plotweight-/Schraffur-Skalierung), Section-Style (3D-Schnittflächen), Ausschnitte (View-Snapshots) + Layer-Kombinationen, Kamera-Presets (Kardinal/Iso, **Norden-Rotation**), Detail-Bindung an Ausschnitt, Multi-Page-PDF @DPI, regelbasierte Overrides, Rich-Text-Annotationen.

### Phase 4 — Interop (Import/Export)
- **Import:** **DWG/DXF** (2D-Pläne/Bestand), **IFC** (BIM-Bestand), **STL/OBJ**
  (Mesh-Referenzmodelle), **XYZ** (Punktwolken aus Vermessung).
- **Export:** **IFC** (Brücke zu Revit/ArchiCAD), **DWG/DXF**, **glTF/OBJ**.
- Round-Trip-Tests mit echten Dateien (Risiko #5).
- → aus DOSSIER (§11): **Swisstopo-Import** (swissBUILDINGS3D / swissALTI3D / SWISSIMAGE, LV95↔WGS84) ⭐ CH, OSM-Overpass-Kontext, Terrain-Mesh-Generator.

### Phase 5 — Persistenz & Konten
- Accounts, Projekte speichern/laden, Versionierung, Auto-Save.
- → aus DOSSIER (§11): Projekt-Persistierung auf Browser-Storage migrieren (IndexedDB statt doc.Strings); Presets/Favoriten cross-projekt (LocalStorage, Export/Import).

### Phase 6 — Export & Kollaboration
- Export: **PDF**, **DXF** (Pläne); **IFC**, **glTF** (3D).
- Teilen per Link, Kommentare, später Echtzeit-Co-Editing.

### Phase 7 — Produktisierung
- Performance-Härtung (große Modelle), Onboarding, Pricing, PWA/Offline.

---

## 8. Offene Fragen
- Booleans: OpenCascade (exakt) vs. Manifold (schnell) — Entscheidung in Phase 0.
- Welche Normen für Plandarstellung (SIA / DIN / …)? → beeinflusst Symbolik. *(Hinweis: User ist in der Schweiz → SIA prüfen.)*
- Wie viel Statik/Bauphysik (gar nicht / später)?
- Pricing-Modell (Freemium, pro Seat?).

---

## 9. Nächster konkreter Schritt
**Phase 0 starten:** Projekt scaffolden + Spike bauen — Wand + Tür mit geschnittener Öffnung → schöner Grundriss-Ausschnitt als SVG (mit Schwenkbogen). Das entschärft Risiko #1–#3 (Modell, Hosting, Symbolik) auf einmal.

---

## 10. Leitentscheidungen & UI-Architektur

### 10a. Leitentscheidungen aus der Recherche (Details in `docs/`, Index `docs/README.md`)
1. **Pure-Ableitungs-Architektur** als Fundament — ein semantisches Modell, alle Sichten abgeleitet, Darstellung erst beim Rendern (Store + Undo früh).
2. **OCCT/replicad im Web Worker** früh als Spike — kritischer Pfad für Schnitt/Ansicht (HLR), exakte Wand-Booleans und IFC. WASM-Größe + HLR-Kosten (pro Ansicht cachen) validieren.
3. **Component-getriebene Prioritäts-Verschneidung** (`joinPriority` am Component): höchstes gemeinsames Material läuft durch, Rest mitert. 2D-Plan analytisch, exakte 3D-Booleans im Worker.
4. **SVG/Paper-Space-Maßstabsmodell** — Strichstärke/Text/Hatch in mm, `dpi=96·devicePixelRatio`, ein Serializer für Bildschirm + PDF + DXF.
5. **CH-Spezifika als Differenzierer** ohne Backend — SIA-416 (reine Logik) + serverloser Swisstopo-Flow (CORS-offen, Parzelle/EGRID, Norden-Rotation, Origin-Shift).

### 10b. Panel-System (dockbar, Tabs, erweiterbar) — NEU
- **Docks links & rechts**; Panels in **Tab-Strips** gruppierbar (z. B. Zeichnungsebenen & Ebenen als Tabs eines Docks).
- **Panel-Registry** → eigene Panels und spätere **Plugins** registrieren sich und erscheinen als Panel.
- **Verschiebbar & floatend (am Tab gegriffen):** Ein Panel wird **am Tab selbst** (im Tab-Strip) gezogen → innerhalb des Docks **umsortieren**, ins andere Dock ziehen, oder aus dem Dock lösen. Andocken am **linken/rechten Rand** (Andock-Zonen beim Ziehen hervorheben); wird nicht angedockt, **schwebt** das Panel als freies (verschieb- und größenveränderbares) **Floating-Fenster** über dem Arbeitsbereich. Float-Position/Größe + Dock-Zustand werden gespeichert.
- **Fenster-Layouts speicherbar** (localStorage, benannte Layouts; Standard-Layout als Default).
- Der **Ressourcen-Manager** wird ebenfalls ein Panel (rechtes Dock).
- Pro Layer-Panel oben ein **Anzeige-Modus-Dropdown**: *nur aktive · alle anzeigen · aktive + andere grau* (DOSSIER/Vectorworks „Layer Options") — wirkt auf Plan & 3D.

### 10c. Plan-Navigation
- Grundriss/Schnitt/Ansicht: **Pan** (ziehen), **Zoom** (Mausrad zum Cursor), **Einpassen** — analog zum 3D-Viewport. SVG-`viewBox`-Transform.

### 10d. Backend & Kollaboration (Details: `docs/backend.md`)
- **Jetzt:** client-only (IndexedDB + Datei-Export/Import), kein Server. Modell JSON-serialisierbar + Edits als Operationen → **CRDT-fähig** halten.
- **Phase 5:** **Supabase self-hosted** (Docker Compose: Postgres + Auth + Storage) für Konten/Projekte/Dateien.
- **Phase 6:** **Yjs + Hocuspocus** (CRDT-Sync-Container, persistiert nach Postgres) für Echtzeit-Kollaboration. Alles self-hosted.
- Empfehlung: Stack **noch nicht** aufsetzen (würde den Modellierer ausbremsen); Weiche ist gestellt, Einführung additiv.

### 10e. Top-Bar & Footer/Status-Leiste (Vectorworks-Stil) — NEU
- **Top-Bar (Oberleiste, wie DOSSIER `toolbar.py`/`ToolbarApp.jsx`):** Ansichts-Umschalter (Grundriss/Perspektive/Schnitt/Ansicht), Render-/Darstellungsmodus, aktives Geschoss + aktive Ebene, Snapping-Schalter, Massstab, Werkzeug-Kontext, Einstellungen/Ressourcen.
- **Footer/Status-Leiste (wie Vectorworks unten):** Cursor-Koordinaten **X/Y/Z**, Einheit, aktueller **Massstab** (1:N) + **Zoom %**, aktives Geschoss/Ebene, **Snap-Status**, kurzer Werkzeug-Hinweis links.
- Beide an das Panel-/Dock-Layout angedockt; Inhalte aus dem Modell abgeleitet.

### 10f. Maus-Interaktion & Kontextmenü — NEU
- **Maus-Schema:** **Mitte = navigieren** (Plan: Pan · 3D: Orbit, `Shift`+Mitte: Pan) · **Links = Auswahl** (Einzelklick + **Markierrahmen/Aufziehrahmen** für Mehrfachauswahl im 2D) · **Rechts = Kontextmenü** · **Rad = Zoom** (zum Cursor).
  - Marquee: Aufziehen von links→rechts = nur vollständig umschlossene Elemente; rechts→links = auch berührte (wie CAD-üblich).
- **Eigenes Kontextmenü-System** (gestylt, dunkel, wiederverwendbar) — kein Browser-Menü.
- **Ebenen-Kontextmenü 1:1 wie DOSSIER** (Einträge aus `layers_panel.py`/`DrawingLevelsApp.jsx` übernehmen) — auch auf Zeichnungsebenen.
- Kontextmenü generisch, damit Plan-Elemente, Panels & spätere Plugins eigene Einträge registrieren können.

---

## 11. Aus DOSSIER übernehmen — Backlog

Konkret im DOSSIER-Rhino-Plugin umgesetzte Features, die sich für den Standalone-Port lohnen. Bereits abgedeckt (Layer-Modell, mehrschichtige Wände, Prioritäts-Stöße, Component-/Line-/Hatch-Manager, Ansichtstypen, Detailgrade) ist hier **nicht** erneut gelistet — nur das Zusätzliche. Aufwand: S/M/L. Phase verweist auf §7.

> **⭐ CH-Schätze (Schweiz-spezifisch, kaum woanders verfügbar):**
> - **Swisstopo-Geodaten** — swissBUILDINGS3D (3D-Bestand), swissALTI3D (präzises Höhenmodell), SWISSIMAGE (10-cm-Orthofoto), offene STAC-APIs ohne Auth, inkl. **LV95↔WGS84**-Transformation. Echter Standort-Kontext per Knopfdruck statt manuellem CAD-Import.
> - **SIA-416-Flächen** — Raum-Klassifikation (HNF/NNF/VF/FF/GF/AGF) mit automatischer Bilanz + CSV/Excel-Export. Pflicht für CH-Energie-/Flächennachweise.
> - **Norden-Rotation** bei Kamera-Presets — Georeferenzierung passend zu Swisstopo/swissBUILDINGS.

### Bauteile

| Feature | Nutzen | Aufwand | Phase |
|---|---|---|---|
| Wand-Referenzlage (mid/left/right) | Achse intuitiv auf Aussenkante/Mitte legen; hilft beim Import fremder Dateien | S | 1 |
| Öffnungs-Detailgrad + Dokument-Override (`aktive_darstellung`) | LoD je Massstab (1:500 Rechteck → 1:50 Glas/Sims) global umschaltbar; kritisch für Mixed-Scale | M | 2 |
| Fenster/Tür mit Rahmen, Brüstung, Sims, Glas, Flügelzahl | Öffnung als vollwertiges Bauteil statt nur Loch; Render-Realismus | M | 2 |
| Tür-Schwenkbogen (Öffnungswinkel + Anschlagseite) | Öffnungsbahnen für Möblierung/Kollision; Standard-Plansymbol | M | 2 |
| Decken-Aussparungen (Treppenauge, Schächte, Kamin) | Konstruktiv echte Deckenöffnungen, nicht nur sichtbar | M | 1–2 |
| Decken UK/OK-Override | Abhängungen, schräge Brüstungen, abweichende Raumhöhen | S | 1 |
| Treppen-Typen gerade/L/Wendel + Stufen/Lauflinie/Podest | Volle Vertikalerschliessung, volumetrisch korrekt, Plan-Symbole | M | 2 |
| Treppe geschoss­übergreifend (`geschoss_end`, Höhen-Override) | Atrien, Rampen, Mehr-Geschoss-Läufe (Risiko #6) | S | 2 |
| Treppen-2D-Symbol mit Auf-/Abpfeil + Schnitt | Normgerechtes Plansymbol (Richtung, Stufenzahl, Lauflinie) | M | 2 |
| Dach-Typen Pult/Sattel/Walm/Mansarde + Neigung(en) | 3D-Volumen mit Gefälle, Kubatur, Material; Mansarde später (L) | M–L | 2–3 |
| Stützen-Profile (Quadrat/Rechteck/Rund/I/Rohr) + Drehung | Beton- und Stahltragwerk mit echtem Querschnitt | M | 2 |
| Träger achs-basiert, hängt unter Decken-OK | Unterzug folgt Deckenoberkante, weniger Fehler bei Updates | S | 2 |
| **SIA-416-Räume** (HNF/NNF/VF/FF/GF/AGF) + Bilanz-CSV ⭐ | CH-Flächennachweis, Excel-Export | M | 2 |
| Raum-Stempel-Builder (Drag-&-Drop-Felder) + Fläche-Rundung + Personen | Projekt-eigene Stempel-Layouts ohne Code; lesbare Listen; Brandschutz | M | 2–3 |
| Element-Übersicht (BIM-Tree Geschoss→Kind→Element, Suche, Zoom) | Inhaltsverzeichnis bei 100+ Elementen; Shift-Klick = Zoom | S | 1 |
| Stil-Kataloge Wände & Öffnungen (Presets) | Standard-Typen 1-Klick; globaler Stilwechsel | M | 2 |
| Grip-Editing (Wand-Endpunkte, Schnitt-Symbole im Plan) | Direktes Ziehen statt Dialog; 2D/3D-Sync; wichtig im Browser | L | 3–4 |

### Darstellung / Ressourcen

| Feature | Nutzen | Aufwand | Phase |
|---|---|---|---|
| Regelbasierte Overrides (Layer-/Tag-/Name-Regel, Priorität, Templates) | Automatische Farb-/Strich-/Linientyp-Anpassung; wiederverwendbar (vertieft §2c „Overrides") | M | 3 |
| Section-Style für 3D-Schnittflächen (Schraffur + Schnittkante/Silhouette) | 3D-Schnitt-Rendering im Viewport, nicht nur 2D-Plan | M | 4 |
| Massstabs-abhängige Linientyp-/Plotweight-Skalierung | Linientypen & Strichstärken bei 1:N korrekt sichtbar; PDF-Treue | M | 3–4 |
| Material-Bibliothek mit PBR (Rauheit/Reflexion/Transparenz) + Templates | Vertieft Component-Manager um Renderqualität; Seeds Beton/Holz/Dämmung | M | 3 |
| Rich-Text-Annotationen (Bold/Italic/Hoch-/Tiefstellung, Maskierung, Rahmen) | Bemaßungs-Indizes, formatierte Beschriftungen auf Canvas | M | 3 |
| LoD-bewusste Stil-UI (zeigt nur passende Controls je Geometrie-Typ) | Weniger kognitive Last (keine Füll-Optionen bei 3D-Auswahl) | S | 1 |

### Pläne / Output

| Feature | Nutzen | Aufwand | Phase |
|---|---|---|---|
| **Massstab pro Viewport** mit Auto-DPI + Schraffur-/Strich-Skalierung | Exakte Masse & lesbare Strichstärken ohne manuelle Kalibrierung | M | 3 |
| Ausschnitte / View-Snapshots (Kamera + Darstellung + Massstab) | Navigation über 50+ Ansichten; ersetzt Ordner-Wildwuchs (vertieft §2c) | M | 3 |
| Layer-Kombinationen als Presets (live oder eingefroren) | Bauphasen/Varianten/MEP per Klick statt manuellem Toggling (vertieft §2c) | S | 3 |
| Kamera-Presets (Kardinal N/O/S/W, Iso-Oktanten, **Norden-Rotation** ⭐) | Schnelle Ansichtswechsel; Georeferenzierung für Swisstopo | S | 3 |
| Detail↔Ausschnitt-Bindung + „Alle aktualisieren" | Titelblock/Detail synchron umbenennen; 1-Klick-Sync aller Schnitte | M | 3 |
| Multi-Page-PDF-Export @DPI (Vektor) | Druckfertige Plansätze — Kern-Output (ergänzt Phase-3-Sheets) | M | 3 |
| 9-Punkt-Bemaßung/Objekt-Info (lesen + verschieben/skalieren/rotieren) | Direktes Dimensionieren ohne Properties-Panel | M | 3 |

### Kontext / Daten

| Feature | Nutzen | Aufwand | Phase |
|---|---|---|---|
| **Swisstopo-Import** (swissBUILDINGS3D/ALTI3D/SWISSIMAGE) ⭐ CH | Authentischer Standort-Kontext, offene APIs, kein Auth | M | 4 |
| LV95↔WGS84-Transformation ⭐ CH | Karten-Anzeige + präzise CH-Koordinaten; Formeln direkt portierbar | S | 4 |
| OSM-Overpass-Import (Strassen/Gebäude/Wasser/Grün, 7 Kategorien) | Weltweiter, kostenloser Kontext; ergänzt Swisstopo | M | 4 |
| Terrain-Mesh-Generator (Mesh/TIN/NURBS-Patch/Höhenlinien, Volumen für Schnitt) | Geländemodell aus Höhendaten; Section-Cut-Füllung; portierbar zu Three.js | L | 4 |
| Auto-Zoom auf Import + Nullpunkt-Verschiebung (LV95→0/0/0) | Modellierungsgenauigkeit trotz Millionen-Koordinaten; UX-Standard | S | 4 |
| Projekt-Persistierung browser-nativ (IndexedDB statt doc.Strings) | Projekt kapselt seine Einstellungen lokal | M | 5 |
| Cross-Projekt-Presets (LocalStorage-Favoriten, Export/Import, Team-Sharing) | Einmal speichern, überall nutzen | S | 5 |
