Fenster-/Tür-Einstellungsdialog: reicher Editor mit Live-Ansicht + Stil speichern

Das ⚙ der Öffnungs-Sektion öffnet neu einen dedizierten Dialog (VW-Studie §3)
statt in den Ressourcen-Tab zu springen. Drei Zonen: Kategorie-Sidebar,
Parameter-Panel, Live-2D-Frontalansicht (aus den aktuellen Werten gezeichnet:
Rahmen/Flügel/Öffnungslinien/Verglasung/Rollladenkasten).

- OpeningEditorDialog.tsx: Kategorien Basis/Grösse/Rahmen/Flügel/Sonnenschutz
  (Fenster) bzw. Türblatt (Tür); Flügeltabelle (Flügel/Pfosten + Öffnungsart +
  Anschlag je Zeile); Stil-Leiste mit Stilwahl + 'Als Stil speichern …'
- App: openingEditorId-State, Dialog-Render, saveOpeningStyle (klont aktuellen
  Typ als neuen benannten WindowType/DoorType und weist ihn zu)
- host.onOpenOpeningEditor + OpeningInfo.id für den ⚙-Sprung
- Studie docs/design/window-editor-vectorworks-study.md
- Dialog-CSS (.oed-*) + i18n (de/en)

Renderer-Konsum der neuen Felder (sashes/glazingPanes/shading in 2D/3D) folgt separat.
This commit is contained in:
2026-07-10 01:13:15 +02:00
parent 1bbe814ab1
commit c734802555
9 changed files with 1696 additions and 4 deletions
+63 -1
View File
@@ -362,7 +362,69 @@ export const en: Record<TranslationKey, string> = {
// ── Opening attributes (object info panel) ──────────────────────────────
"objinfo.opening.section": "Opening",
"objinfo.opening.type": "Type",
"objinfo.opening.editType": "Edit type (Resources)",
"objinfo.opening.editType": "Settings …",
// Window/door settings dialog (OpeningEditorDialog).
"oed.title.window": "Window settings",
"oed.title.door": "Door settings",
"oed.style": "Style",
"oed.saveStyle": "Save as style …",
"oed.saveStyle.hint": "Store the current settings as a new, reusable style",
"oed.saveStyle.prompt": "Name of the new style:",
"oed.saveStyle.copySuffix": "(copy)",
"oed.categories": "Categories",
"oed.noStyle": "No style assigned — choose or save one via the style bar.",
"oed.preview": "View",
"oed.cat.basis": "Basics",
"oed.cat.groesse": "Size/position",
"oed.cat.rahmen": "Frame",
"oed.cat.fluegel": "Sashes/muntins",
"oed.cat.sonnenschutz": "Shading",
"oed.cat.tuerblatt": "Leaf",
"oed.f.kind": "Opening type",
"oed.f.glazing": "Glazing",
"oed.f.insetFace": "Inset from",
"oed.f.insetFromFace": "Layer inset (m)",
"oed.f.width": "Width (m)",
"oed.f.height": "Height (m)",
"oed.f.sillHeight": "Sill height (m)",
"oed.f.position": "Position (m)",
"oed.f.frameThickness": "Frame depth across (m)",
"oed.f.frameDepth": "Frame depth (m)",
"oed.f.frameWidth": "Frame face width (m)",
"oed.kind.dreh": "Casement",
"oed.kind.kipp": "Tilt",
"oed.kind.drehkipp": "Turn-tilt",
"oed.kind.fest": "Fixed",
"oed.kind.schiebe": "Sliding",
"oed.glazing.1": "Single",
"oed.glazing.2": "Double",
"oed.glazing.3": "Triple",
"oed.insetFace.aussen": "Outer face",
"oed.insetFace.innen": "Inner face",
"oed.fluegel.hint": "Sashes and posts from left to right. Opening type and hinge per sash.",
"oed.fluegel.col.kind": "Type",
"oed.fluegel.col.opening": "Opening",
"oed.fluegel.col.hinge": "Hinge",
"oed.fluegel.type.fluegel": "Sash",
"oed.fluegel.type.pfosten": "Post",
"oed.fluegel.remove": "Remove",
"oed.hinge.left": "Left",
"oed.hinge.right": "Right",
"oed.shading.create": "Roller shutter / shading box",
"oed.shading.kind": "Kind",
"oed.shading.rollladen": "Roller shutter",
"oed.shading.raffstore": "Venetian blind",
"oed.shading.markise": "Awning",
"oed.shading.boxHeight": "Box height (m)",
"oed.shading.boxDepth": "Box depth (m)",
"oed.door.leafCount": "Door leaves",
"oed.door.leaf1": "Single leaf",
"oed.door.leaf2": "Double leaf",
"oed.door.leafStyle": "Leaf style",
"oed.door.glatt": "Flush",
"oed.door.kassette": "Panelled",
"oed.door.glas": "Glass",
"oed.door.wandoeffnung": "Wall opening",
"objinfo.stair.type": "Type",
"objinfo.type.none": "(no type)",
"objinfo.opening.kind": "Type",