3d2d4d6321
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).
61 lines
2.3 KiB
TypeScript
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: [],
|
|
}),
|
|
};
|
|
}
|