Attribut-Panel: Default "Nach Ebene" statt "Nach Bauteil", Wert immer

sichtbar, Bearbeiten schaltet automatisch auf "eigener Wert"

Nutzer-Report: "aktuell zeigt jedes Element standard nach Bauteil. Das
wäre eigentlich 'custom' also eigener Wert. Deshalb es soll nach Ebene
Standard sein bei allen Dingen. Und man sollte immer sehen welche
Stiftdicke oder welche Farbe... und wenn man auf das Farbfeld klickt
und die Farbe ändert dann springt es auf eigener Wert automatisch."

**Default-Umkehr** (plan/generatePlan/shared.ts): resolveForeground/
resolveBackground/resolveHatchId/resolveStrokeWeight prüften bisher
`source === "layer"`, sonst (auch bei fehlendem Source-Feld -- der
Normalfall bei jedem neu erzeugten Element, das nie explizit gesetzt
wird) fiel die Kette auf "Nach Bauteil" zurück. Jetzt `source !==
"object"`: fehlend/"layer" liefert die Kategorie, NUR ein explizites
"object" fällt noch auf das Bauteil zurück. Zentraler Fix in den
Resolver-Funktionen selbst wirkt automatisch überall (Grundriss,
Schnitt, Attribut-Panel-Vorschau) konsistent, nicht nur im Panel.
Rückfrage an den Nutzer zum riskantesten Teil (Hintergrund/Poché hat
eine dokumentierte SIA-neutrale Sonderregel, falls kein Wert gesetzt
ist) -- bestätigt: einheitlich umstellen, "Nach Bauteil" bleibt bei
Wand/Decke als explizite Wahl verfügbar.

**"Nach Bauteil" nur noch bei Wand/Decke** (AttributesPanel.tsx): ein
Drawing2D hat kein eigenes Bauteil (Component) -- die Option wäre dort
bedeutungslos (resolveForeground & Co. fielen auf gar keinen Wert
zurück). Neuer `allowObjectSource`-Schalter blendet die Dropdown-
Option für alle vier Felder bei 2D-Elementen aus.

**Wert immer sichtbar + Auto-Switch auf "eigener Wert"**: das Eingabe-
Element (Farb-Swatch/Zahlenfeld/Schraffur-Dropdown) war bisher nur bei
Quelle "eigener Wert" sichtbar -- jetzt immer, mit dem EFFEKTIVEN Wert
befüllt. Neue Selection-Felder effectiveForeground/effectiveBackground/
effectiveHatchId (selectionInfo.ts, über dieselbe Resolve-Kette wie der
Renderer) liefern dafür den echten Wert statt des oft leeren rohen
Overrides. Editiert man das Feld direkt, greift der bestehende Override-
Setter (setzt z.B. wall.foreground) -- die Quelle springt automatisch
auf "eigener Wert", weil uiSourceOf ausschliesslich davon abhängt, ob
ein Wert gesetzt ist (kein zusätzlicher Umschalt-Schritt nötig). Beim
expliziten Umschalten per Dropdown wird jetzt vom aktuell ANGEZEIGTEN
effektiven Wert gesät statt von sel.color, damit die Farbe dabei nicht
unerwartet springt.

+9 Tests (shared.resolve.test.ts: Default-Umkehr aller vier Resolver,
Override gewinnt immer, Fallback ohne Kategorie). tsc/vitest 934/934
grün.
This commit is contained in:
2026-08-22 00:59:13 +02:00
parent 605e8910d3
commit bfc064796f
5 changed files with 226 additions and 44 deletions
+6 -4
View File
@@ -831,12 +831,14 @@ export interface LayerCategory {
* Quelle eines vererbbaren Attributs (Vordergrund/Hintergrund/Strichstärke/
* Schraffur), wenn KEIN expliziter Wert am Element gesetzt ist:
* • "layer" — „Nach Ebene": die LayerCategory des Elements erzwingt den Wert
* (`color`/`lw`/`hatch`).
* (`color`/`lw`/`hatch`). Das ist auch der DEFAULT, wenn das Source-Feld
* fehlt (`undefined`) — ein frisch erzeugtes Element (Source-Feld nie
* gesetzt) folgt also der Ebene, nicht dem Bauteil.
* • "object" — „Nach Bauteil": erbt vom Bauteil (Component) bzw. dessen
* bisheriger Fallback-Kette. Das ist auch der Default, wenn das Source-Feld
* fehlt (`undefined`) — damit bleibt das heutige Verhalten unverändert.
* bisheriger Fallback-Kette. Muss aktiv im Attribut-Panel gewählt werden
* (nur bei Wand/Decke anwendbar — ein Drawing2D hat kein Bauteil).
* Ein gesetzter expliziter Wert (z. B. `foreground`) gewinnt IMMER, unabhängig
* von der Source (s. Resolve-Reihenfolge in `plan/generatePlan.ts`).
* von der Source (s. Resolve-Reihenfolge in `plan/generatePlan/shared.ts`).
*/
export type AttributeSource = "layer" | "object";