3.5 KiB
3.5 KiB
Projekt-Konventionen — Browser-BIM (cad)
Siehe ROADMAP.md für Vision, Architektur und Phasen.
Code-Konventionen (verbindlich)
- Alle Bezeichner im Code sind ENGLISCH — Funktionen, Variablen, Typen, Felder,
Datei-/Modulnamen. Keine deutschen Bezeichner. (Beispiel:
computeJoins, nichtverschneidungBerechnen.) - UI-Texte und Kommentare dürfen Deutsch sein (Nutzeroberfläche ist deutsch).
- Domänen-Begriffe möglichst nach Vectorworks-Terminologie benennen (englisch): Design Layer, Sheet/Drawing Layer, Component, Class, Hatch, Wall Style, Viewport.
- Einheiten: intern alles in Metern (number). Anzeige via
formatM. - Geometrie-Konventionen: Wand-Normale
n = leftNormal(u) = (-u.y, u.x); bei CCW-Wicklung zeigt+nnach innen. Schichten werden außen (−T/2) → innen (+T/2) gestapelt.
Code-Struktur (kein God-Component)
App.tsxbleibt ein dünner Shell (Store-Provider, Oberleiste, Docks+View-Router, Statusleiste, Floating-Panels, Ressourcen-Overlay) — keine Geschäftslogik darin.- Globaler Zustand in einem Store (
src/state/, Slices: project/selection/view/layout). Komponenten lesen Zustand über Store-Hooks statt Prop-Drilling. - Features als eigene Module:
src/views/(View-Router-Teile),src/editors/(Inline-Editoren),src/menus/(Kontextmenü-Builder),src/panels/,src/ui/. - Ziel: modular + parallel bearbeitbar (verschiedene Features ≠ dieselbe Datei).
Siehe
docs/design/state-architecture.md.
UI-Konventionen
- Listen-/Manager-Ansichten als saubere Tabellen: eine Kopfzeile mit Spaltentiteln (sticky), darunter kompakte Datenzeilen mit Inline-Edit pro Zelle. KEINE wiederholten Feld-Beschriftungen pro Zeile. Gilt für Component-/Hatch-/ Line-Manager und ähnliche Listen.
- Dunkler DOSSIER-Stil; kompakt, ruhig, viel Inhalt pro Fläche.
- UI-Text immer übersetzbar (i18n): KEINE hartcodierten sichtbaren Strings im
JSX. Alle Texte über eine Übersetzungsfunktion
t('key')aus einem Wörterbuch (Default-Sprache Deutsch). Keys wie bei DOSSIER (common.delete,layers.settings,topbar.resources). Neue Komponenten gleich mitt(...)schreiben. Identifier/Keys bleiben englisch; nur die Wörterbuch-Werte sind die übersetzbaren Texte.
Native-App-Verhalten (kein Browser-Standard)
Die App soll sich wie ein natives Programm anfühlen, nicht wie eine Webseite:
- Browser-Kontextmenü global unterdrücken (
documentcontextmenu→preventDefault). Nur unser eigenesContextMenuerscheint; auf Flächen ohne eigenes Menü passiert nichts. - Keine Textauswahl / „Alles markieren":
user-select: noneglobal;user-select: textNUR in echten Eingaben (input,textarea,[contenteditable]). Ctrl+A außerhalb von Eingaben unterbinden. - Bild-/Element-Drag aus (
draggable=falsewo nötig); keine Browser-Drag-Gesten.
Architektur-Prinzip
Ein semantisches Modell ist die einzige Wahrheit; jede Ansicht (3D, Grundriss, Schnitt) wird abgeleitet. Darstellung (Detailgrad, Stile, Schraffuren) wird beim Rendern angewandt, nie in die Geometrie eingebacken.
Arbeitsweise (für Beiträge)
- Substanzielle, mehrstufige Arbeit schrittweise in isolierten Schritten angehen.
- Änderungen verifizieren:
npx tsc -b,npm run build, und Screenshot vianode scripts/probe.mjs(schreibtscripts/probe.png) bzw.probe-ff*.mjsfür Firefox-Fälle. Screenshot ansehen und Geometrie visuell prüfen. - Dev-Server läuft via
npm run dev(Vite, Port 5173).