diff --git a/src/plan/generatePlan.openings.test.ts b/src/plan/generatePlan.openings.test.ts index 0536fa8..052edd0 100644 --- a/src/plan/generatePlan.openings.test.ts +++ b/src/plan/generatePlan.openings.test.ts @@ -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); + }); +}); diff --git a/src/plan/generatePlan.ts b/src/plan/generatePlan.ts index 05c9730..83ec943 100644 --- a/src/plan/generatePlan.ts +++ b/src/plan/generatePlan.ts @@ -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.