Fenster-Grundriss: keine Glaslinie mehr im Feld, auch nicht bei fein

Die dünne Glaslinie (fein: Doppellinie) lief mittig durchs Glasfeld, egal wo
und wie gross das Fenster war — Nutzer wollte dort keine Haarlinie, weder bei
mittel (schon vorher entfernt) noch bei fein. Blendrahmen + Flügelrahmen +
Rahmenblöcke an Laibung/Flügelstoss bleiben als Kontur bestehen.
This commit is contained in:
2026-07-12 18:25:02 +02:00
parent 4a01754b4d
commit d21af4ac5a
2 changed files with 7 additions and 16 deletions
+4 -13
View File
@@ -460,6 +460,10 @@ export function windowSymbol(
const gInnerN = frameInnerN + (operable ? reveal : 0);
// Verschachtelter Flügelrahmen NUR bei „fein" (SIA fig. 38); „mittel" bleibt
// beim reinen Blendrahmen-Band (SIA fig. 37).
// Keine Glaslinie mehr im Feld (auch nicht bei „fein") — Nutzer-Feedback:
// eine feine Haarlinie mittig im Glasfeld wird nicht gebraucht, unabhängig
// von der Fensterposition. Der Flügelrahmen (nur bei öffenbaren Flügeln)
// bleibt als einzige zusätzliche Kontur bei „fein" bestehen.
if (operable) {
const sFrom = along(jambStart, jambEnd, clearFrom);
const sTo = along(jambStart, jambEnd, clearTo);
@@ -470,19 +474,6 @@ export function windowSymbol(
add(sFrom, scale(n, gInnerN)),
]);
}
const gInsetU = operable ? fw * 0.6 : 0;
const gFrom = clearFrom + gInsetU;
const gTo = clearTo - gInsetU;
if (gTo - gFrom <= 1e-6) continue;
const gMid = (gOuterN + gInnerN) / 2;
const a = along(jambStart, jambEnd, gFrom);
const b = along(jambStart, jambEnd, gTo);
// Glas als Doppellinie (Isolierverglasung, ~15 mm Abstand) — nur „fein"
// erreicht diesen Punkt (mittel bricht oben früh ab, s. o.).
const half = Math.min(0.0075, bandDepth * 0.18);
for (const off of [gMid - half, gMid + half]) {
glassLines.push([add(a, scale(n, off)), add(b, scale(n, off))]);
}
}
return { frame, glassLines, mullionLines, sashFrames, sashOpeningLines: [], meetingMarks };
}
+3 -3
View File
@@ -191,15 +191,15 @@ describe("generatePlan — Verglasung glazingPanes (Item 2)", () => {
const glassLineCount = (p: Project, detail: "grob" | "mittel" | "fein" = "mittel") =>
linesOfClass(p, "window-glass", detail).length;
it("glazingPanes beeinflusst die 2D-Glaslinienzahl NICHT mehr — SIA-Detailgrad entscheidet (mittel zeigt noch KEINE Glaslinie, SIA fig. 37; Doppellinie/IV erst bei 'fein', unabhängig von der Scheibenzahl)", () => {
it("glazingPanes beeinflusst die 2D-Glaslinienzahl NICHT mehr — typisierte Fenster zeigen GAR KEINE Glaslinie im Grundriss (Nutzer-Feedback: keine Haarlinie mittig im Feld, unabhängig von Detailgrad/Fensterposition)", () => {
const wt3: WindowType = { ...baseWindowType, id: "wt3", glazingPanes: 3 };
const wt1: WindowType = { ...baseWindowType, id: "wt1", glazingPanes: 1 };
const p3 = project({ ...baseWindow, typeId: "wt3" }, [wt3]);
const p1 = project({ ...baseWindow, typeId: "wt1" }, [wt1]);
expect(glassLineCount(p3, "mittel")).toBe(0);
expect(glassLineCount(p1, "mittel")).toBe(0);
expect(glassLineCount(p3, "fein")).toBe(2);
expect(glassLineCount(p1, "fein")).toBe(2);
expect(glassLineCount(p3, "fein")).toBe(0);
expect(glassLineCount(p1, "fein")).toBe(0);
});
it("ohne typeId bleibt die alte Detailgrad-Regel (grob/mittel=1, fein=2) unverändert — Regression", () => {