Vordergrund wirkt jetzt wirklich auf die Schraffurfarbe (war seit

2026-07-04 hart auf Tinte gezwungen)

Nutzer-Report: "Vordergrund funktioniert bei mir jetzt nicht, es ist
und bleibt schwarz, idk y. Hintergrund geht." Ursache gefunden:
resolveHatch() (plan/generatePlan/shared.ts) zwang `color` schon immer
fest auf HATCH_INK, mit explizitem Code-Kommentar "Nutzer-Vorgabe
2026-07-04" -- eine frühere, bewusste Entscheidung, dass Schnitt- UND
Ansichtsschraffur IMMER dieselbe dunkle Tinte zeigen, unabhängig vom
aufgelösten Vordergrund. Der `_foreground`-Parameter wurde entgegen-
genommen, aber nie verwendet (Unterstrich-Präfix als Markierung).
Rückfrage gestellt (Entscheidung von 2026-07-04 aufheben oder als
gewollt so belassen?) -- Nutzer bestätigt: aufheben.

Fix: `color: foreground ?? HATCH_INK` -- ein aufgelöster Vordergrund
gewinnt, fehlt er (der heutige Normalfall, da Component.foreground bei
den meisten Bauteilen nie gesetzt ist), bleibt es exakt beim bisherigen
Verhalten. Betrifft ALLE Aufrufer von resolveHatch (Wand, Decke, Stütze,
Drawing2D, Grundriss UND Schnitt) einheitlich, da sie den Vordergrund
schon vorher korrekt auflösten und durchreichten -- nur eben verworfen
wurde.

+2 Tests in structures.column.test.ts (Default bleibt Tinte, expliziter
Vordergrund-Override schlägt jetzt durch). tsc/vitest 940/940 grün.
This commit is contained in:
2026-08-22 01:20:29 +02:00
parent a917e4149a
commit 8ab1e5194f
3 changed files with 26 additions and 14 deletions
+3 -2
View File
@@ -121,8 +121,9 @@ export function resolveWallSectionStyle(project: Project, wall: Wall): SectionCu
wallAngleDeg, wallAngleDeg,
resolveForeground(best, wall.foreground, category, wall.foregroundSource), resolveForeground(best, wall.foreground, category, wall.foregroundSource),
); );
// Poché-Hintergrund neutral (Papier) statt Bauteil-Albedo; Vollmuster → Tinte. // Poché-Hintergrund neutral (Papier) statt Bauteil-Albedo; Vollmuster → Tinte
// `hatch.color` ist bereits über {@link resolveHatch} auf HATCH_INK gezwungen. // (unabhängig von `hatch.color`, das jetzt den aufgelösten Vordergrund tragen
// kann, s. {@link resolveHatch}).
const solid = hatch.pattern === "solid"; const solid = hatch.pattern === "solid";
return { return {
fill: solid ? HATCH_INK : HATCH_PAPER, fill: solid ? HATCH_INK : HATCH_PAPER,
+11 -12
View File
@@ -369,20 +369,20 @@ export type Primitive =
* {@link HatchRender} auf. Der Linienstil der Musterlinien wird, falls gesetzt, * {@link HatchRender} auf. Der Linienstil der Musterlinien wird, falls gesetzt,
* aus dem Line Manager nachgeschlagen; sonst gilt ein dünner Default. * aus dem Line Manager nachgeschlagen; sonst gilt ein dünner Default.
* *
* VORDERGRUND (Muster-/Schraffurlinienfarbe bzw. Vollfüllung): AKTUELL fest auf * VORDERGRUND (Muster-/Schraffurlinienfarbe bzw. Vollfüllung): der über
* {@link HATCH_INK} gezwungen (Nutzer-Vorgabe 2026-07-04) — Schnitt- WIE * {@link resolveForeground} aufgelöste Vordergrund gewinnt, wenn gesetzt (Nach
* Oberflächen-/Ansichtsschraffur zeigen dieselbe dunkle Tinte, unabhängig von * Ebene/Nach Bauteil/eigener Wert); OHNE aufgelösten Wert bleibt es bei der
* Material-/Bauteilfarbe, HatchStyle.color oder einem By-Layer/By-Object- * neutralen Tinte {@link HATCH_INK} (bisheriges Verhalten — 2026-07-04 war die
* Vordergrund-Override. `_foreground` bleibt Teil der Signatur — alle Aufrufer * Vordergrund-Kette hier noch fest auf HATCH_INK gezwungen, unabhängig vom
* reichen weiterhin den über {@link resolveForeground} aufgelösten Bauteil- * Ergebnis; auf Nutzer-Wunsch wieder aufgehoben, da „Vordergrund" im Attribut-
* Vordergrund durch (z. B. für eine spätere Wiederherstellung der materialtreuen * Panel sonst wirkungslos bliebe — betrifft nur Elemente mit tatsächlich
* Schraffur) —, fließt aber bewusst nicht mehr in `color` ein. * gesetztem Vordergrund, unverändertes Verhalten für alle anderen).
*/ */
export function resolveHatch( export function resolveHatch(
project: Project, project: Project,
hatchId: string, hatchId: string,
wallAngleDeg?: number, wallAngleDeg?: number,
_foreground?: string, foreground?: string,
): HatchRender { ): HatchRender {
const h = getHatch(project, hatchId); const h = getHatch(project, hatchId);
const ls = h.lineStyleId ? getLineStyle(project, h.lineStyleId) : null; const ls = h.lineStyleId ? getLineStyle(project, h.lineStyleId) : null;
@@ -399,9 +399,8 @@ export function resolveHatch(
pattern: h.pattern, pattern: h.pattern,
scale: h.scale, scale: h.scale,
angle, angle,
// Fest auf die Monochrom-Tinte gezwungen (siehe JSDoc oben) — weder // Aufgelöster Vordergrund gewinnt (s. JSDoc oben), sonst neutrale Tinte.
// `_foreground` noch `HatchStyle.color` (Material-/Bauteilfarbe) fließen ein. color: foreground ?? HATCH_INK,
color: HATCH_INK,
lineWeight: ls?.weight ?? 0.13, lineWeight: ls?.weight ?? 0.13,
dash: ls?.dash ?? null, dash: ls?.dash ?? null,
kind: h.kind, kind: h.kind,
@@ -116,4 +116,16 @@ describe("addColumnPoche — Attribut-Override greift", () => {
); );
expect(polygonOf(out).hatch.pattern).toBe("none"); expect(polygonOf(out).hatch.pattern).toBe("none");
}); });
it("ohne gesetzten Vordergrund: Schraffurfarbe bleibt die neutrale Tinte (Default unverändert)", () => {
const out: Primitive[] = [];
addColumnPoche(out, project(), column(), false, 0.35, category);
expect(polygonOf(out).hatch.color).toBe("#0f0f0f");
});
it("mit explizitem foreground-Override: die Schraffurfarbe wird die Override-Farbe (vorher wirkungslos)", () => {
const out: Primitive[] = [];
addColumnPoche(out, project(), column({ foreground: "#00ff88" }), false, 0.35, category);
expect(polygonOf(out).hatch.color).toBe("#00ff88");
});
}); });