Fenster: Flügelstoss-Blöcke separat von Laibungs-Enden steuerbar (sashLine statt frameLine)
windowSymbol trug beide Blocktypen (Laibungs-Enden UND Flügelstoss-Marken) im selben meetingMarks-Array, dadurch übersteuerte frameLine auch die Marke zwischen den Flügeln — Nutzer wollte diese separat regelbar. Aufgeteilt in jambMarks (Laibungs-Enden, zählt zu "Rahmen") und meetingMarks (Flügelstoss, zählt zu "Fenster"/sashLine).
This commit is contained in:
@@ -2304,13 +2304,21 @@ function addOpeningSymbol(
|
||||
}
|
||||
}
|
||||
}
|
||||
// Laibungs-Blöcke an den Öffnungsenden (Blendrahmen-Querschnitt) — Teil des
|
||||
// Blendrahmens, zählt zu "Rahmen".
|
||||
for (const mark of sym.jambMarks) {
|
||||
for (let i = 0; i < mark.length; i++) {
|
||||
out.push({ kind: "line", a: mark[i], b: mark[(i + 1) % mark.length], cls: "window-stulp", weightMm: frameHairline, color: frameColor, greyed, openingId: o.id });
|
||||
}
|
||||
}
|
||||
// Stulp-Mittelquadrat je Flügel-Junction (SIA-Signatur): mittel = EIN Quadrat,
|
||||
// fein = ZWEI anliegende Rechtecke (die beiden Stulp-Stäbe der Flügel) —
|
||||
// bereits tiefenkorrekt (inset-/insetFace-bewusst) in windowSymbol berechnet.
|
||||
// Zählt als "Rahmen" (Laibungs-/Stossblock des Blendrahmens).
|
||||
// Sitzt zwischen den Flügeln, zählt zu "Fenster" (separat vom Blendrahmen
|
||||
// steuerbar — Nutzer-Feedback).
|
||||
for (const mark of sym.meetingMarks) {
|
||||
for (let i = 0; i < mark.length; i++) {
|
||||
out.push({ kind: "line", a: mark[i], b: mark[(i + 1) % mark.length], cls: "window-stulp", weightMm: frameHairline, color: frameColor, greyed, openingId: o.id });
|
||||
out.push({ kind: "line", a: mark[i], b: mark[(i + 1) % mark.length], cls: "window-stulp", weightMm: sashWeight, color: sashColor, greyed, openingId: o.id });
|
||||
}
|
||||
}
|
||||
// Glaslinien (Anzahl je Detailgrad/Verglasung, s. glassCount).
|
||||
|
||||
@@ -341,10 +341,12 @@ describe("generatePlan — Linien-Übersteuerung je Kategorie (Opening.frameLine
|
||||
for (const l of stulp) expect(l.kind === "line" && l.weightMm).toBeCloseTo(0.02, 6);
|
||||
});
|
||||
|
||||
it("frameLine übersteuert Farbe+Stärke der Stulp-/Laibungsblöcke (window-stulp)", () => {
|
||||
it("frameLine übersteuert Farbe+Stärke der Laibungs-Blöcke (window-stulp, einflügliges Fenster ohne Flügelstoss)", () => {
|
||||
// Einflüglig -> nur jambMarks (Laibungs-Enden, "Rahmen"), keine
|
||||
// Flügelstoss-Blöcke -> eindeutig zuordenbar.
|
||||
const p = project(
|
||||
{ ...baseWindow, typeId: "wt1", frameLine: { color: "#ff0000", weight: 0.5 } },
|
||||
[twoSashType],
|
||||
[baseWindowType],
|
||||
);
|
||||
const stulp = linesOfClass(p, "window-stulp", "mittel");
|
||||
expect(stulp.length).toBeGreaterThan(0);
|
||||
@@ -354,7 +356,7 @@ describe("generatePlan — Linien-Übersteuerung je Kategorie (Opening.frameLine
|
||||
}
|
||||
});
|
||||
|
||||
it("sashLine übersteuert Farbe+Stärke des Flügelrahmens (window-sash, fein)", () => {
|
||||
it("sashLine übersteuert Farbe+Stärke des Flügelrahmens (window-sash, fein) UND der Flügelstoss-Blöcke (window-stulp an der Junction) — NICHT die Laibungs-Enden", () => {
|
||||
const p = project(
|
||||
{ ...baseWindow, typeId: "wt1", sashLine: { color: "#00ff00", weight: 0.3 } },
|
||||
[twoSashType],
|
||||
@@ -365,6 +367,16 @@ describe("generatePlan — Linien-Übersteuerung je Kategorie (Opening.frameLine
|
||||
expect(l.kind === "line" && l.color).toBe("#00ff00");
|
||||
expect(l.kind === "line" && l.weightMm).toBeCloseTo(0.3, 6);
|
||||
}
|
||||
// Öffnung 1.2 m breit ab x=1.0 -> Junction bei x=1.6 (Mitte), Laibungs-
|
||||
// Enden bei x≈1.03/2.17 (fw/2 vom Rand). Nur die Junction-Blöcke (Mitte)
|
||||
// reagieren auf sashLine; die Laibungs-Enden bleiben beim Default.
|
||||
const stulp = linesOfClass(p, "window-stulp", "mittel");
|
||||
const junction = stulp.filter((l) => l.kind === "line" && l.a.x > 1.3 && l.a.x < 1.9);
|
||||
const jamb = stulp.filter((l) => l.kind === "line" && (l.a.x < 1.3 || l.a.x > 1.9));
|
||||
expect(junction.length).toBeGreaterThan(0);
|
||||
expect(jamb.length).toBeGreaterThan(0);
|
||||
for (const l of junction) expect(l.kind === "line" && l.color).toBe("#00ff00");
|
||||
for (const l of jamb) expect(l.kind === "line" && l.color).toBe("#1a1a1a");
|
||||
});
|
||||
|
||||
it("sillLineStyle übersteuert Farbe+Stärke der Auf-/Untersicht-Linie (window-sill)", () => {
|
||||
|
||||
Reference in New Issue
Block a user