Bauteile: Fenster-Anschlag-Striche (Laibung, fein) analog zur Tür, mit Tests

This commit is contained in:
2026-07-05 21:42:40 +02:00
parent 5b60136a19
commit 8d688b982e
2 changed files with 41 additions and 0 deletions
+17
View File
@@ -147,3 +147,20 @@ describe("generatePlan — Tür-Typ wandoeffnung (Item 6)", () => {
expect(arcCount(def)).toBe(1);
});
});
/** Zählt Fenster-Anschlag-/Laibungsstriche (cls "window-frame") im Plan. */
function windowRevealCount(p: Project, detail: "grob" | "mittel" | "fein") {
return generatePlan(p, "eg", visible, undefined, detail).primitives.filter(
(pr) => pr.kind === "line" && pr.cls === "window-frame",
).length;
}
describe("generatePlan — Fenster Anschlag-Striche (Item 8)", () => {
it("erzeugt bei 'fein' zwei Laibungsstriche (je Pfosten einen)", () => {
expect(windowRevealCount(projectWithOpening({ ...baseWindow }), "fein")).toBe(2);
});
it("erzeugt bei 'mittel' KEINE (nur im Detailgrad fein)", () => {
expect(windowRevealCount(projectWithOpening({ ...baseWindow }), "mittel")).toBe(0);
});
});
+24
View File
@@ -1833,6 +1833,30 @@ function addOpeningSymbol(
openingId: o.id,
});
}
// fein: Anschlag-/Laibungsstriche an beiden Pfosten (kurz quer zur Wand) —
// analog zur Tür, damit Fenster im Detailplan gleich „fertig" wirken (bisher
// hatten nur Türen sie). Haarlinie, 6 cm Andeutung je Seite.
if (detail === "fein") {
const jambs = openingJambs(wall, o);
const dir = sub(wall.end, wall.start);
const len = Math.hypot(dir.x, dir.y);
if (jambs && len > 1e-9) {
const n = { x: -dir.y / len, y: dir.x / len };
const reveal = 0.06;
for (const jamb of [jambs.jambStart, jambs.jambEnd]) {
out.push({
kind: "line",
a: add(jamb, scale(n, reveal)),
b: add(jamb, scale(n, -reveal)),
cls: "window-frame",
weightMm: SYMBOL_HAIRLINE_MM,
color: o.color ?? POCHE_STROKE,
greyed,
openingId: o.id,
});
}
}
}
// Brüstungslinie (gepunktet) — zeigt die Brüstung im Grundriss auf der Wandachse.
// Nur bei Fenstern mit Brüstungshöhe > 0. Entspricht der Sill-Linie in
// `_make_oeffnung_preview` und dem Brüstungs-Plansymbol im Rhino-Plugin.