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:
@@ -419,12 +419,12 @@ export function resolveHatch(
|
||||
* Kollabiert die Vordergrund-Farbkette (Muster-/Schraffurlinienfarbe) eines
|
||||
* Bauteils zu einem einzelnen Wert für {@link resolveHatch}. AUFLÖSUNGSREIHENFOLGE
|
||||
* (By-Layer/By-Object, siehe `docs`/Attribut-Panel):
|
||||
* (Attribut-Override `override`) ?? (`source==="layer"` ⇒ `category.color`) ??
|
||||
* (Attribut-Override `override`) ?? (`source!=="object"` ⇒ `category.color`) ??
|
||||
* (`Component.foreground`) ?? `undefined`.
|
||||
* `source` fehlt/`"object"` ⇒ „Nach Bauteil" (heutiges Verhalten, unverändert).
|
||||
* `undefined` als Endergebnis heißt „Nach System" — die Kette läuft dann in
|
||||
* resolveHatch auf den HatchStyle.color-Backward-Compat-Fallback weiter
|
||||
* (Sample-Verhalten: kein Element setzt `override`/`source`, also identisch).
|
||||
* `source` fehlt/`"layer"` ⇒ „Nach Ebene" (DEFAULT — ein neu erzeugtes Element
|
||||
* ohne explizites Source-Feld folgt der Ebene, nicht dem Bauteil; „Nach
|
||||
* Bauteil" muss aktiv gewählt werden). Nur ein EXPLIZITES `"object"` fällt auf
|
||||
* die Bauteil-Kette zurück.
|
||||
*/
|
||||
export function resolveForeground(
|
||||
comp: Component,
|
||||
@@ -433,14 +433,14 @@ export function resolveForeground(
|
||||
source?: AttributeSource,
|
||||
): string | undefined {
|
||||
if (override != null) return override;
|
||||
if (source === "layer") return category?.color ?? comp.foreground;
|
||||
if (source !== "object") return category?.color ?? comp.foreground;
|
||||
return comp.foreground;
|
||||
}
|
||||
|
||||
/**
|
||||
* Kollabiert die Hintergrund-/Füllfarbkette (Poché-Override) eines Bauteils zu
|
||||
* einem einzelnen Wert, exakt analog zu {@link resolveForeground}:
|
||||
* (Attribut-Override `override`) ?? (`source==="layer"` ⇒ `category.color`) ??
|
||||
* (Attribut-Override `override`) ?? (`source!=="object"` ⇒ `category.color`) ??
|
||||
* (`Component.background`) ?? `undefined`.
|
||||
* `undefined` als Endergebnis heißt „kein Override gesetzt" — Aufrufer fallen
|
||||
* dann auf ihren eigenen Default zurück (bei Wand/Decke die neutrale SIA-
|
||||
@@ -455,7 +455,7 @@ export function resolveBackground(
|
||||
source?: AttributeSource,
|
||||
): string | undefined {
|
||||
if (override != null) return override;
|
||||
if (source === "layer") return category?.color ?? comp.background;
|
||||
if (source !== "object") return category?.color ?? comp.background;
|
||||
return comp.background;
|
||||
}
|
||||
|
||||
@@ -463,10 +463,10 @@ export function resolveBackground(
|
||||
* Kollabiert die Schraffur-Referenz (Hatch Manager) eines Elements zu einer
|
||||
* einzelnen `hatchId` für {@link resolveHatch} — By-Layer/By-Object, analog zu
|
||||
* {@link resolveForeground}:
|
||||
* (Attribut-Override `override`) ?? (`source==="layer"` ⇒ `category.hatch`) ??
|
||||
* (Attribut-Override `override`) ?? (`source!=="object"` ⇒ `category.hatch`) ??
|
||||
* `fallback` (Bauteil-Schraffur, z. B. `Component.hatchId`/`viewHatchId`, oder
|
||||
* `undefined` bei Drawing2D ohne Bauteil-Bezug).
|
||||
* `source` fehlt/`"object"` ⇒ „Nach Bauteil" (heutiges Verhalten, unverändert).
|
||||
* `source` fehlt/`"layer"` ⇒ „Nach Ebene" (DEFAULT, s. {@link resolveForeground}).
|
||||
* Ergebnis kann `undefined` sein — der Aufrufer fällt dann auf `NO_HATCH` zurück.
|
||||
*/
|
||||
export function resolveHatchId(
|
||||
@@ -476,17 +476,17 @@ export function resolveHatchId(
|
||||
fallback?: string,
|
||||
): string | undefined {
|
||||
if (override != null) return override;
|
||||
if (source === "layer") return category?.hatch ?? fallback;
|
||||
if (source !== "object") return category?.hatch ?? fallback;
|
||||
return fallback;
|
||||
}
|
||||
|
||||
/**
|
||||
* Kollabiert die Strichstärke-Kette (mm Papier) eines Elements, By-Layer/By-
|
||||
* Object, analog zu {@link resolveHatchId}:
|
||||
* (Attribut-Override `override`) ?? (`source==="layer"` ⇒ `category.lw`) ??
|
||||
* (Attribut-Override `override`) ?? (`source!=="object"` ⇒ `category.lw`) ??
|
||||
* `fallback` (bisherige Bauteil-/LineStyle-/Kategorie-Default-Kette des
|
||||
* Aufrufers — heutiges Verhalten).
|
||||
* `source` fehlt/`"object"` ⇒ „Nach Bauteil" (heutiges Verhalten, unverändert).
|
||||
* `source` fehlt/`"layer"` ⇒ „Nach Ebene" (DEFAULT, s. {@link resolveForeground}).
|
||||
*/
|
||||
export function resolveStrokeWeight(
|
||||
override: number | undefined,
|
||||
@@ -495,7 +495,7 @@ export function resolveStrokeWeight(
|
||||
fallback: number,
|
||||
): number {
|
||||
if (override != null) return override;
|
||||
if (source === "layer") return category?.lw ?? fallback;
|
||||
if (source !== "object") return category?.lw ?? fallback;
|
||||
return fallback;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user