Bauteile: Fenster-Anschlag-Striche (Laibung, fein) analog zur Tür, mit Tests
This commit is contained in:
@@ -147,3 +147,20 @@ describe("generatePlan — Tür-Typ wandoeffnung (Item 6)", () => {
|
|||||||
expect(arcCount(def)).toBe(1);
|
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);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -1833,6 +1833,30 @@ function addOpeningSymbol(
|
|||||||
openingId: o.id,
|
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.
|
// 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
|
// Nur bei Fenstern mit Brüstungshöhe > 0. Entspricht der Sill-Linie in
|
||||||
// `_make_oeffnung_preview` und dem Brüstungs-Plansymbol im Rhino-Plugin.
|
// `_make_oeffnung_preview` und dem Brüstungs-Plansymbol im Rhino-Plugin.
|
||||||
|
|||||||
Reference in New Issue
Block a user