Files
DOSSIER-STANDALONE/src/state/selectionSlice.ts
T
karim 3d2d4d6321 2D-Plan-Renderer auf WebGL2 (GPU) + akkumulierter Funktionsstand
Neuer GPU-Renderer fuer den Grundriss (src/plan/glPlan/): Earcut-Tessellierung
(konkav-faehig), gehrte Linienzuege (Miter), echte Papier-mm-Strichbreiten im
Massstab (repliziert den SVG-printStrokeVb-Pfad), Hybrid mit scharfem SVG-Text-
Overlay. GPU ist der Standardpfad; der SVG-Renderer bleibt automatischer Fallback,
falls WebGL2/Shader nicht verfuegbar sind. Imperativer Pan (rAF + CSS-transform)
fuer fluessige Interaktion ohne React-Re-Render je Frame.

Enthaelt zudem den bisher nicht committeten Arbeitsstand des Browser-BIM
(Oeffnungen, Treppen, Raeume, Decken, DXF-Export, Materialbibliothek, Kontext-
Import, Tauri-Compute-Boundary-PoC).
2026-07-02 00:12:39 +02:00

61 lines
2.3 KiB
TypeScript

// Auswahl-Slice: gewählte Wände (Menge) und das gewählte 2D-Zeichenelement.
// Wand- und 2D-Auswahl schließen sich gegenseitig aus. Reiner Umzug aus
// App.tsx. Bezeichner englisch, Kommentare deutsch (CONVENTIONS.md).
import type { StoreApi } from "./store";
/** Felder, die diese Slice in den RootState beisteuert. */
export interface SelectionSlice {
// Gewählte Wände als MENGE von IDs (Marquee/Einzelauswahl).
selectedWallIds: string[];
// Gewählte 2D-Zeichenelemente als MENGE (Marquee/Mehrfach/Einzel) — getrennt
// von der Wand-Auswahl. Einzel-Auswahl = Array der Länge 1.
selectedDrawingIds: string[];
// Gewählte Decken als MENGE von IDs — getrennt von Wand-/2D-Auswahl.
selectedCeilingIds: string[];
// Gewählte Öffnungen (Fenster/Türen) als MENGE von IDs — getrennt.
selectedOpeningIds: string[];
// Gewählte Treppen als MENGE von IDs — getrennt von den übrigen Kanälen.
selectedStairIds: string[];
// Gewählte Räume als MENGE von IDs — getrennt von den übrigen Kanälen.
selectedRoomIds: string[];
setSelectedWallIds: (ids: string[]) => void;
setSelectedDrawingIds: (ids: string[]) => void;
setSelectedCeilingIds: (ids: string[]) => void;
setSelectedOpeningIds: (ids: string[]) => void;
setSelectedStairIds: (ids: string[]) => void;
setSelectedRoomIds: (ids: string[]) => void;
/** Auswahl (Wände + Decken + Öffnungen + Treppen + 2D-Elemente) leeren. */
clearSelection: () => void;
}
export function createSelectionSlice(
api: StoreApi<SelectionSlice>,
): SelectionSlice {
const { set } = api;
return {
selectedWallIds: [],
selectedDrawingIds: [],
selectedCeilingIds: [],
selectedOpeningIds: [],
selectedStairIds: [],
selectedRoomIds: [],
setSelectedWallIds: (ids) => set({ selectedWallIds: ids }),
setSelectedDrawingIds: (ids) => set({ selectedDrawingIds: ids }),
setSelectedCeilingIds: (ids) => set({ selectedCeilingIds: ids }),
setSelectedOpeningIds: (ids) => set({ selectedOpeningIds: ids }),
setSelectedStairIds: (ids) => set({ selectedStairIds: ids }),
setSelectedRoomIds: (ids) => set({ selectedRoomIds: ids }),
clearSelection: () =>
set({
selectedWallIds: [],
selectedDrawingIds: [],
selectedCeilingIds: [],
selectedOpeningIds: [],
selectedStairIds: [],
selectedRoomIds: [],
}),
};
}