Stütze (Column) bekommt dasselbe By-Layer/By-Object-Attributsystem wie
Wand/Decke Nutzer-Wunsch: "generell sollten alle BIM Teile also 3D die weiteren Attribute haben." Untersucht: Dach/Treppe/Raum/Öffnung haben HEUTE keine Poché-Füllung/Schraffur im Grundriss (reine Linien-/Symbol- Darstellung, bei Raum sogar bewusst so entschieden -- "keine Farbwäsche im Plan"); das Attribut-System dort anzuschliessen würde neue Poché-/Schraffur-Fähigkeiten erfordern, die es dort noch gar nicht gibt. Stütze dagegen hat bereits eine Poché UND nutzte bereits dieselben Resolver wie Wand/Decke (nur mit fest verdrahtetem override=source=undefined) -- Nutzer-Entscheidung nach Rückfrage: nur Stütze jetzt fertig verdrahten, der Rest bleibt vorerst unverändert. model/types.ts: Column bekommt dieselben acht Felder wie Wall (foreground/background/hatchId/strokeWeight × je einer *Source). plan/generatePlan/structures.ts (addColumnPoche): resolveHatchId/ resolveForeground lesen jetzt column.hatchId/column.hatchSource bzw. column.foreground/column.foregroundSource statt hartcodiertem undefined; neuer resolveBackground-Aufruf lässt einen expliziten Hintergrund-Override vor die neutrale SIA-Poché (Tinte/Papier je nach Schraffur-Muster) treten -- exakt das addWallPoche-Muster (bgOverride ?? neutrale Poché). plan/generatePlan.ts: die Strichstärke der Stütze lief bisher IMMER mit hartcodiertem override=source=undefined durch resolveStrokeWeight -- liest jetzt column.strokeWeight/column.strokeWeightSource. state/selectionInfo.ts (columnSelection): effectiveForeground/ effectiveBackground/effectiveHatchId analog wallSelection (Bauteil- Repräsentant ist hier `column.componentId` statt der äussersten Schicht); weightMm war bisher hart auf WALL_FALLBACK_MM gesetzt, läuft jetzt korrekt durch resolveStrokeWeight. panels/AttributesPanel.tsx: weightEditable/fillEditable/pocheEditable um `sel.kind === "column"` erweitert -- Stütze zeigt jetzt dieselben vier Attribut-Zeilen mit vollem 3-Quellen-Dropdown (Nach Ebene/Nach Bauteil/eigener Wert) wie Wand/Decke. +4 Tests (structures.column.test.ts: Default bleibt Bauteil-Schraffur, Hintergrund-Override greift, hatchSource "layer" nutzt die Kategorie- Schraffur, expliziter hatchId-Override gewinnt). tsc/vitest 938/938 grün.
This commit is contained in:
@@ -43,7 +43,12 @@ import type {
|
||||
WallReferenceLine,
|
||||
} from "../model/types";
|
||||
import { localToLv95 } from "../io/lv95";
|
||||
import { resolveForeground, resolveBackground, resolveHatchId } from "../plan/generatePlan/shared";
|
||||
import {
|
||||
resolveForeground,
|
||||
resolveBackground,
|
||||
resolveHatchId,
|
||||
resolveStrokeWeight,
|
||||
} from "../plan/generatePlan/shared";
|
||||
import { columnVerticalExtent } from "../model/wall";
|
||||
import { columnFootprint } from "../geometry/column";
|
||||
import { evaluateRoom, polygonArea } from "../geometry/roomArea";
|
||||
@@ -985,13 +990,42 @@ function columnSelection(project: Project, col: Column): Selection {
|
||||
zBottom,
|
||||
zTop,
|
||||
};
|
||||
// Effektive Vordergrund-/Hintergrund-/Schraffur-/Strichstärke-Vorschau — s.
|
||||
// Kommentar in wallSelection (dieselbe Kette, das zugewiesene Bauteil als
|
||||
// Repräsentant statt der äussersten Schicht, da Column nur EIN componentId
|
||||
// trägt statt eines geschichteten Aufbaus).
|
||||
// `getComponent` wirft bei unbekannter ID (z. B. gelöschtes Bauteil) — die
|
||||
// Panel-Vorschau soll dabei nicht abstürzen (analog dem try/catch in
|
||||
// structures.ts addColumnPoche), einfach auf "kein Bauteil" zurückfallen.
|
||||
const comp = col.componentId
|
||||
? project.components.find((c) => c.id === col.componentId)
|
||||
: undefined;
|
||||
const effectiveForeground = comp
|
||||
? resolveForeground(comp, col.foreground, category, col.foregroundSource)
|
||||
: col.foreground;
|
||||
const effectiveBackground = comp
|
||||
? resolveBackground(comp, col.background, category, col.backgroundSource)
|
||||
: col.background;
|
||||
const effectiveHatchId = resolveHatchId(col.hatchId, col.hatchSource, category, comp?.hatchId);
|
||||
const weightMm = resolveStrokeWeight(col.strokeWeight, col.strokeWeightSource, category, WALL_FALLBACK_MM);
|
||||
return {
|
||||
kind: "column",
|
||||
id: col.id,
|
||||
categoryCode: col.categoryCode,
|
||||
floorId: col.floorId,
|
||||
color: col.color ?? category?.color ?? COLUMN_COLOR,
|
||||
weightMm: WALL_FALLBACK_MM,
|
||||
weightMm,
|
||||
fillHatchId: col.hatchId,
|
||||
foreground: col.foreground,
|
||||
background: col.background,
|
||||
foregroundSource: col.foregroundSource,
|
||||
backgroundSource: col.backgroundSource,
|
||||
effectiveForeground,
|
||||
effectiveBackground,
|
||||
effectiveHatchId,
|
||||
strokeWeightOverride: col.strokeWeight,
|
||||
strokeWeightSource: col.strokeWeightSource,
|
||||
hatchSource: col.hatchSource,
|
||||
bbox: { minX, minY, maxX, maxY },
|
||||
column: info,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user