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,
resolveForeground(best, wall.foreground, category, wall.foregroundSource),
);
// Poché-Hintergrund neutral (Papier) statt Bauteil-Albedo; Vollmuster → Tinte.
// `hatch.color` ist bereits über {@link resolveHatch} auf HATCH_INK gezwungen.
// Poché-Hintergrund neutral (Papier) statt Bauteil-Albedo; Vollmuster → Tinte
// (unabhängig von `hatch.color`, das jetzt den aufgelösten Vordergrund tragen
// kann, s. {@link resolveHatch}).
const solid = hatch.pattern === "solid";
return {
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,
* aus dem Line Manager nachgeschlagen; sonst gilt ein dünner Default.
*
* VORDERGRUND (Muster-/Schraffurlinienfarbe bzw. Vollfüllung): AKTUELL fest auf
* {@link HATCH_INK} gezwungen (Nutzer-Vorgabe 2026-07-04) — Schnitt- WIE
* Oberflächen-/Ansichtsschraffur zeigen dieselbe dunkle Tinte, unabhängig von
* Material-/Bauteilfarbe, HatchStyle.color oder einem By-Layer/By-Object-
* Vordergrund-Override. `_foreground` bleibt Teil der Signatur — alle Aufrufer
* reichen weiterhin den über {@link resolveForeground} aufgelösten Bauteil-
* Vordergrund durch (z. B. für eine spätere Wiederherstellung der materialtreuen
* Schraffur) —, fließt aber bewusst nicht mehr in `color` ein.
* VORDERGRUND (Muster-/Schraffurlinienfarbe bzw. Vollfüllung): der über
* {@link resolveForeground} aufgelöste Vordergrund gewinnt, wenn gesetzt (Nach
* Ebene/Nach Bauteil/eigener Wert); OHNE aufgelösten Wert bleibt es bei der
* neutralen Tinte {@link HATCH_INK} (bisheriges Verhalten — 2026-07-04 war die
* Vordergrund-Kette hier noch fest auf HATCH_INK gezwungen, unabhängig vom
* Ergebnis; auf Nutzer-Wunsch wieder aufgehoben, da „Vordergrund" im Attribut-
* Panel sonst wirkungslos bliebe — betrifft nur Elemente mit tatsächlich
* gesetztem Vordergrund, unverändertes Verhalten für alle anderen).
*/
export function resolveHatch(
project: Project,
hatchId: string,
wallAngleDeg?: number,
_foreground?: string,
foreground?: string,
): HatchRender {
const h = getHatch(project, hatchId);
const ls = h.lineStyleId ? getLineStyle(project, h.lineStyleId) : null;
@@ -399,9 +399,8 @@ export function resolveHatch(
pattern: h.pattern,
scale: h.scale,
angle,
// Fest auf die Monochrom-Tinte gezwungen (siehe JSDoc oben) — weder
// `_foreground` noch `HatchStyle.color` (Material-/Bauteilfarbe) fließen ein.
color: HATCH_INK,
// Aufgelöster Vordergrund gewinnt (s. JSDoc oben), sonst neutrale Tinte.
color: foreground ?? HATCH_INK,
lineWeight: ls?.weight ?? 0.13,
dash: ls?.dash ?? null,
kind: h.kind,
@@ -116,4 +116,16 @@ describe("addColumnPoche — Attribut-Override greift", () => {
);
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");
});
});