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) => ( + + )); + })()} + )} );