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.
This commit is contained in:
2026-07-03 21:07:11 +02:00
parent b028fc6b31
commit 4d721a62f7
2 changed files with 30 additions and 16 deletions
+11 -7
View File
@@ -283,8 +283,8 @@ export const sampleProject: Project = {
}, },
], ],
// Räume (SIA-416-Flächen) — ein Beispielraum im EG (lichte Innenkontur des // 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²). // 5×4-m-Umrisses, Aussenwände Typ „aw" 0.345 m dick → Innenmaß 4.655×3.655 m
// Kategorie „45 Räume", SIA-Blatt HNF (Hauptnutzfläche). // ≈ 17.01 m²). Kategorie „45 Räume", SIA-Blatt HNF (Hauptnutzfläche).
rooms: [ rooms: [
{ {
id: "R1", id: "R1",
@@ -293,13 +293,17 @@ export const sampleProject: Project = {
categoryCode: "60", categoryCode: "60",
siaCategory: "HNF", siaCategory: "HNF",
name: "Wohnen", 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: [ boundary: [
{ x: 0.1, y: 0.1 }, { x: 0.1725, y: 0.1725 },
{ x: 4.9, y: 0.1 }, { x: 4.8275, y: 0.1725 },
{ x: 4.9, y: 3.9 }, { x: 4.8275, y: 3.8275 },
{ x: 0.1, y: 3.9 }, { x: 0.1725, y: 3.8275 },
], ],
color: "#5a7a9a", color: "#6b7280",
stampAnchor: { x: 2.5, y: 2.0 }, stampAnchor: { x: 2.5, y: 2.0 },
}, },
], ],
+19 -9
View File
@@ -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). */ /** Basis-Schriftgrösse des Raum-Stempels in Punkt (pt). */
const ROOM_STAMP_PT = 10; 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 * Raum (SIA-416-Fläche) im Grundriss: eine (unsichtbare, nur klickbare) Füll-
* dem lichten Umriss + eine dünne Umrisslinie (beide `roomId`-getaggt für die * fläche über dem lichten Umriss + eine dünne neutrale Umrisslinie (beide
* Auswahl) + ein Raum-Stempel (Text) am Anker (Centroid oder `stampAnchor`) mit * `roomId`-getaggt für die Auswahl) + ein Raum-Stempel (Text) am Anker
* Name, Fläche „24.30 m²" und SIA-Kürzel. Der Stempel entfällt beim Detailgrad * (Centroid oder `stampAnchor`) mit Name, Fläche „24.30 m²" und SIA-Kürzel.
* „grob"; Fläche/Umfang/Schwerpunkt werden aus `boundary` abgeleitet (nie * Keine Farbwäsche — Plandarstellung schwarz/grau, Farbe bleibt späteren
* gespeichert). Wird UNTER der Wand-Poché gezeichnet. * 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( function addRoomArea(
out: Primitive[], out: Primitive[],
@@ -1270,7 +1279,8 @@ function addRoomArea(
const res = evaluateRoom(pts, room.siaCategory); const res = evaluateRoom(pts, room.siaCategory);
const stroke = room.color; 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({ out.push({
kind: "polygon", kind: "polygon",
pts, pts,