From 82d5710ddb8fa8324f400b8ed7a92d4cdf6cf768 Mon Sep 17 00:00:00 2001 From: Karim Date: Fri, 10 Jul 2026 01:20:40 +0200 Subject: [PATCH] =?UTF-8?q?Fenster-Dialog:=20Oberlicht=20+=20K=C3=A4mpfer-?= =?UTF-8?q?/Sprossenzeilen=20exponiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zwei vom Renderer bereits konsumierte Felder im Flügel/Sprossen-Panel zugänglich gemacht + in der Live-Ansicht dargestellt: - transomHeight (Oberlicht): 2D-Kämpferlinie im Grundriss + 3D-Oberlichtscheibe waren schon da; Kämpferlinie jetzt auch in der Dialog-Vorschau - mullionRows (Kämpfer-/Sprossenzeilen): 3D-Kämpfer bei 'fein'; waagrechte Teiler in der Vorschau Kein Renderer-Aufwand — reine UI-/Vorschau-Freischaltung. 659/659 grün. --- src/i18n/de.ts | 2 ++ src/i18n/en.ts | 2 ++ src/ui/OpeningEditorDialog.tsx | 49 +++++++++++++++++++++++++++++++++- 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/i18n/de.ts b/src/i18n/de.ts index 777d937..e07c4e0 100644 --- a/src/i18n/de.ts +++ b/src/i18n/de.ts @@ -391,6 +391,8 @@ export const de = { "oed.f.frameThickness": "Rahmenstärke quer (m)", "oed.f.frameDepth": "Rahmentiefe (m)", "oed.f.frameWidth": "Rahmenbreite Ansicht (m)", + "oed.f.transomHeight": "Oberlichthöhe (m)", + "oed.f.mullionRows": "Kämpfer-/Sprossenzeilen", "oed.kind.dreh": "Dreh", "oed.kind.kipp": "Kipp", "oed.kind.drehkipp": "Dreh-Kipp", diff --git a/src/i18n/en.ts b/src/i18n/en.ts index 6d4de98..c45d0b4 100644 --- a/src/i18n/en.ts +++ b/src/i18n/en.ts @@ -391,6 +391,8 @@ export const en: Record = { "oed.f.frameThickness": "Frame depth across (m)", "oed.f.frameDepth": "Frame depth (m)", "oed.f.frameWidth": "Frame face width (m)", + "oed.f.transomHeight": "Transom height (m)", + "oed.f.mullionRows": "Transom/muntin rows", "oed.kind.dreh": "Casement", "oed.kind.kipp": "Tilt", "oed.kind.drehkipp": "Turn-tilt", diff --git a/src/ui/OpeningEditorDialog.tsx b/src/ui/OpeningEditorDialog.tsx index a531ec3..bdeebb5 100644 --- a/src/ui/OpeningEditorDialog.tsx +++ b/src/ui/OpeningEditorDialog.tsx @@ -478,6 +478,20 @@ function FluegelPanel({ return ( <>
{t("oed.fluegel.hint")}
+ {/* Oberlicht (festes Feld über einem Kämpfer) + Kämpfer-/Sprossen-Zeilen. */} + patchWt({ transomHeight: n || undefined })} + /> + patchWt({ mullionRows: Math.max(1, Math.round(n)) })} + /> @@ -832,7 +846,40 @@ function ElevationPreview({ )} ) : ( - segEls + <> + {segEls} + {/* Oberlicht-Kämpfer (waagrechte Linie transomHeight unter der OK). */} + {!dt && wt && (wt.transomHeight ?? 0) > 0 && ( + + )} + {/* Kämpfer-/Sprossen-Zeilen (mullionRows − 1 waagrechte Teiler im + Hauptfeld unterhalb eines etwaigen Oberlichts). */} + {!dt && + wt && + (() => { + const rows = Math.max(1, Math.round(wt.mullionRows ?? 1)); + if (rows <= 1) return null; + const top = originY + px(wt.transomHeight ?? 0); + const fieldH = px(h) - px(wt.transomHeight ?? 0); + return Array.from({ length: rows - 1 }, (_, k) => ( + + )); + })()} + )} );