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:
+4
-13
@@ -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 };
|
||||
}
|
||||
|
||||
@@ -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", () => {
|
||||
|
||||
Reference in New Issue
Block a user