Fenster-Dialog: Oberlicht + Kämpfer-/Sprossenzeilen exponiert
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.
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -391,6 +391,8 @@ export const en: Record<TranslationKey, string> = {
|
||||
"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",
|
||||
|
||||
@@ -478,6 +478,20 @@ function FluegelPanel({
|
||||
return (
|
||||
<>
|
||||
<div className="oed-hint">{t("oed.fluegel.hint")}</div>
|
||||
{/* Oberlicht (festes Feld über einem Kämpfer) + Kämpfer-/Sprossen-Zeilen. */}
|
||||
<NumField
|
||||
label={t("oed.f.transomHeight")}
|
||||
value={wt.transomHeight ?? 0}
|
||||
min={0}
|
||||
onCommit={(n) => patchWt({ transomHeight: n || undefined })}
|
||||
/>
|
||||
<NumField
|
||||
label={t("oed.f.mullionRows")}
|
||||
value={wt.mullionRows ?? 1}
|
||||
step={1}
|
||||
min={1}
|
||||
onCommit={(n) => patchWt({ mullionRows: Math.max(1, Math.round(n)) })}
|
||||
/>
|
||||
<table className="oed-table">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -832,7 +846,40 @@ function ElevationPreview({
|
||||
)}
|
||||
</>
|
||||
) : (
|
||||
segEls
|
||||
<>
|
||||
{segEls}
|
||||
{/* Oberlicht-Kämpfer (waagrechte Linie transomHeight unter der OK). */}
|
||||
{!dt && wt && (wt.transomHeight ?? 0) > 0 && (
|
||||
<line
|
||||
x1={pad}
|
||||
y1={originY + px(wt.transomHeight ?? 0)}
|
||||
x2={pad + px(w)}
|
||||
y2={originY + px(wt.transomHeight ?? 0)}
|
||||
stroke={strokeMain}
|
||||
/>
|
||||
)}
|
||||
{/* 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) => (
|
||||
<line
|
||||
key={k}
|
||||
x1={pad}
|
||||
y1={top + (fieldH * (k + 1)) / rows}
|
||||
x2={pad + px(w)}
|
||||
y2={top + (fieldH * (k + 1)) / rows}
|
||||
stroke={strokeMuted}
|
||||
strokeWidth={0.75}
|
||||
/>
|
||||
));
|
||||
})()}
|
||||
</>
|
||||
)}
|
||||
</svg>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user