From 7bcf69c16c93f1126a090e1f0cfa5021367cb346 Mon Sep 17 00:00:00 2001 From: Karim Date: Fri, 3 Jul 2026 21:07:11 +0200 Subject: [PATCH] Raeume: Umriss auf die Wand-Innenflaeche + neutral statt farbig - Sample-Raum R1: boundary auf die echte Innenkante der Aussenwaende (Achse +/- halbe Wanddicke 0.1725 bei Wandtyp aw 0.345 m) statt 0.1-Inset - der Umriss lag bisher ~7 cm im Wandkoerper. - Raumfarbe #5a7a9a -> neutrales Grau #6b7280 (Umriss + Stempel). - ROOM_FILL_ALPHA 33 -> 00: keine transluzente Farbfuellung mehr (Plandarstellung schwarz/grau); das Polygon bleibt fuer die Auswahl erhalten (Hit-Test laeuft ueber pointInPolygon, nicht ueber die Fuellung). Offen: automatische Ableitung der Raum-Boundary aus den Wand-Innenflaechen fuer spaeter gezeichnete Raeume. --- src/model/sampleProject.ts | 18 +++++++++++------- src/plan/generatePlan.ts | 28 +++++++++++++++++++--------- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/src/model/sampleProject.ts b/src/model/sampleProject.ts index fbc6685..c406532 100644 --- a/src/model/sampleProject.ts +++ b/src/model/sampleProject.ts @@ -283,8 +283,8 @@ export const sampleProject: Project = { }, ], // Räume (SIA-416-Flächen) — ein Beispielraum im EG (lichte Innenkontur des - // 5×4-m-Umrisses, Aussenwände 0.2 m → Innenmaß 4.8×3.8 m ≈ 18.24 m²). - // Kategorie „45 Räume", SIA-Blatt HNF (Hauptnutzfläche). + // 5×4-m-Umrisses, Aussenwände Typ „aw" 0.345 m dick → Innenmaß 4.655×3.655 m + // ≈ 17.01 m²). Kategorie „45 Räume", SIA-Blatt HNF (Hauptnutzfläche). rooms: [ { id: "R1", @@ -293,13 +293,17 @@ export const sampleProject: Project = { categoryCode: "60", siaCategory: "HNF", name: "Wohnen", + // Lichte Innenkontur = Wandachse ± halbe Wanddicke (Typ „aw": Putz aussen + // 0.02 + Dämmung 0.16 + Backstein 0.15 + Putz innen 0.015 = 0.345 m Gesamt- + // dicke → 0.1725 m je Seite). Der Raumumriss liegt damit exakt auf der + // Innenfläche der Wand, nicht in der Wand-Poché. boundary: [ - { x: 0.1, y: 0.1 }, - { x: 4.9, y: 0.1 }, - { x: 4.9, y: 3.9 }, - { x: 0.1, y: 3.9 }, + { x: 0.1725, y: 0.1725 }, + { x: 4.8275, y: 0.1725 }, + { x: 4.8275, y: 3.8275 }, + { x: 0.1725, y: 3.8275 }, ], - color: "#5a7a9a", + color: "#6b7280", stampAnchor: { x: 2.5, y: 2.0 }, }, ], diff --git a/src/plan/generatePlan.ts b/src/plan/generatePlan.ts index 36c1a10..7160a11 100644 --- a/src/plan/generatePlan.ts +++ b/src/plan/generatePlan.ts @@ -1241,8 +1241,15 @@ function addCeilingPoche( }); } -/** Deckkraft (0..255) der transluzenten Raum-Füllung → 2-stelliges Hex-Suffix. */ -const ROOM_FILL_ALPHA = "33"; // ~20 % Deckkraft +/** + * Deckkraft (0..255) der Raum-Füllung → 2-stelliges Hex-Suffix. Transluzente + * Farbfüllung entfällt — Plandarstellung schwarz/grau; Farbe bleibt späteren + * Schema-Ebenen vorbehalten. Alpha 0 = unsichtbar; das Polygon bleibt als + * `roomId`-Primitiv erhalten (Auswahl per Punkt-in-Polygon in PlanView, NICHT + * über die native Pointer-Trefferfläche der Füllung — die volle Fläche bleibt + * damit trotz Alpha 0 klickbar). + */ +const ROOM_FILL_ALPHA = "00"; /** Basis-Schriftgrösse des Raum-Stempels in Punkt (pt). */ const ROOM_STAMP_PT = 10; @@ -1252,12 +1259,14 @@ function withAlpha(color: string, alphaHex: string): string { } /** - * Raum (SIA-416-Fläche) im Grundriss: eine transluzente farbige Füllfläche über - * dem lichten Umriss + eine dünne Umrisslinie (beide `roomId`-getaggt für die - * Auswahl) + ein Raum-Stempel (Text) am Anker (Centroid oder `stampAnchor`) mit - * Name, Fläche „24.30 m²" und SIA-Kürzel. Der Stempel entfällt beim Detailgrad - * „grob"; Fläche/Umfang/Schwerpunkt werden aus `boundary` abgeleitet (nie - * gespeichert). Wird UNTER der Wand-Poché gezeichnet. + * Raum (SIA-416-Fläche) im Grundriss: eine (unsichtbare, nur klickbare) Füll- + * fläche über dem lichten Umriss + eine dünne neutrale Umrisslinie (beide + * `roomId`-getaggt für die Auswahl) + ein Raum-Stempel (Text) am Anker + * (Centroid oder `stampAnchor`) mit Name, Fläche „24.30 m²" und SIA-Kürzel. + * Keine Farbwäsche — Plandarstellung schwarz/grau, Farbe bleibt späteren + * Schema-Ebenen vorbehalten. Der Stempel entfällt beim Detailgrad „grob"; + * Fläche/Umfang/Schwerpunkt werden aus `boundary` abgeleitet (nie gespeichert). + * Wird UNTER der Wand-Poché gezeichnet. */ function addRoomArea( out: Primitive[], @@ -1270,7 +1279,8 @@ function addRoomArea( const res = evaluateRoom(pts, room.siaCategory); const stroke = room.color; - // Transluzente Farbfüllung. + // Unsichtbare Füllfläche (Alpha 0): keine Farbwäsche im Plan, das Polygon + // bleibt aber als `roomId`-Primitiv für die Punkt-in-Polygon-Auswahl erhalten. out.push({ kind: "polygon", pts,