Schnittebenen 2D↔3D Phase 1+2, native Fenster, Hell/Dunkel-Theme, SWISSIMAGE-Import

- Schnittebenen: 3D-Live-Schnitt folgt der gewählten Grundriss-Schnittlinie
  (section3dCutId/sectionPlaneFromLevel), Schalter "Im 3D schneiden" im
  Objekt-Info, Doppelklick auf Schnittlinie springt in 2D-Schnittansicht,
  unsichtbare Ebenen blenden ihre Führungslinie aus
- Eigene native Tauri-Fenster für Kontext-Import/Zeichnungsebenen/
  Ebenen-Einstellungen/Ressourcen/Einstellungen + klassische Menüleiste
  (AppMenuBar) neben der Wortmarke
- Hell/Dunkel-Umschalter (Einstellungen → Darstellung), persistiert,
  flackerfrei vor erstem Render gesetzt
- SWISSIMAGE-Luftbild-Import (swisstopo WMS) als Kontext-Hintergrundebene
- UI-Politur: Werkzeug-Panel Symbole/Liste umschaltbar, Topbar-Quick-Access-
  Icons entfernt, Zahnrad→Einstellungen in Panel-Köpfen, Footerbar/
  Snap-Marker/Maß-HUD auf helle Pillen-Sprache umgestellt
- Neues Dachziegel-Material (RoofingTiles013A)
This commit is contained in:
2026-07-20 10:51:37 +02:00
parent 0ab0361e3d
commit 68a0459d0e
90 changed files with 7730 additions and 1849 deletions
+27
View File
@@ -0,0 +1,27 @@
// Hell/Dunkel-Umschalter (Einstellungen → Darstellung). Hell ist Standard
// (siehe styles.css); Dunkel wird per `data-theme="dark"` auf <html> opt-in
// gesetzt und in localStorage persistiert, damit die Wahl einen Neustart
// übersteht. `applyThemeMode` wird SYNCHRON vor dem ersten Render aufgerufen
// (main.tsx), damit es keinen Hell/Dunkel-Flackerer beim Laden gibt.
export type ThemeMode = "light" | "dark";
const THEME_STORAGE_KEY = "cad.themeMode";
export function getStoredThemeMode(): ThemeMode {
if (typeof window === "undefined") return "light";
return window.localStorage.getItem(THEME_STORAGE_KEY) === "dark" ? "dark" : "light";
}
export function applyThemeMode(mode: ThemeMode): void {
if (mode === "dark") {
document.documentElement.setAttribute("data-theme", "dark");
} else {
document.documentElement.removeAttribute("data-theme");
}
}
export function setStoredThemeMode(mode: ThemeMode): void {
window.localStorage.setItem(THEME_STORAGE_KEY, mode);
applyThemeMode(mode);
}