Zeichnungsebenen-Panel: vier einklappbare Kategorien

Die flache Ebenenliste ist in vier einklappbare Kategorien gegliedert —
Geschosse/Schnitte/Ansichten/2D-Zeichnungen nach drawingLevel.kind. Jeder
Kopf trägt ein Chevron und rechtsbündig ein blankes +-Glyph (kein
Button-Chrome), das je Kategorie eine neue Ebene der passenden Art anlegt;
leere Kategorien bleiben mit Kopf und + sichtbar. Für Schnitt und Ansicht
sind dafür neue Platzhalter-Aktionen addSection/addElevation ergänzt
(analog addFloor/addDrawing, noch ohne Schnittlinie).
This commit is contained in:
2026-07-03 23:31:39 +02:00
parent 5b70742efa
commit 633480252e
5 changed files with 201 additions and 30 deletions
+32
View File
@@ -41,6 +41,10 @@ export interface ProjectSlice {
patchActiveFloor: (patch: Partial<DrawingLevel>) => void;
addFloor: () => void;
addDrawing: () => void;
/** Legt eine neue Schnitt-Zeichnungsebene (kind:"section") als Platzhalter an. */
addSection: () => void;
/** Legt eine neue Ansichts-Zeichnungsebene (kind:"elevation") als Platzhalter an. */
addElevation: () => void;
/**
* Legt eine neue freie Zeichnungsebene (kind:"drawing") mit dem gegebenen
* Namen an und liefert ihre ID zurück (z. B. als Ziel eines DXF-Imports).
@@ -309,6 +313,34 @@ export function createProjectSlice(
return { ...p, drawingLevels: [...p.drawingLevels, drawing] };
}),
// Schnitt/Ansicht sind vorerst Platzhalter ohne Schnittlinie (linePoints
// bleibt undefined, bis die Schnitt-UI existiert — siehe toSection.ts).
addSection: () =>
setProject((p) => {
const n = p.drawingLevels.filter((z) => z.kind === "section").length + 1;
const section: DrawingLevel = {
id: `section-${Date.now()}`,
name: t("default.sectionName", { n }),
kind: "section",
visible: true,
locked: false,
};
return { ...p, drawingLevels: [...p.drawingLevels, section] };
}),
addElevation: () =>
setProject((p) => {
const n = p.drawingLevels.filter((z) => z.kind === "elevation").length + 1;
const elevation: DrawingLevel = {
id: `elevation-${Date.now()}`,
name: t("default.elevationName", { n }),
kind: "elevation",
visible: true,
locked: false,
};
return { ...p, drawingLevels: [...p.drawingLevels, elevation] };
}),
// Neue freie Zeichnungsebene mit explizitem Namen anlegen und ihre ID
// zurückgeben (Ziel-Ebene eines DXF-Imports). Der Name kommt vom Aufrufer
// (Dialog); leere Eingabe fällt auf den Default-Namen zurück.