Schnitt: materialspezifische SIA-Schraffuren wiederhergestellt

de7a26b lieferte projectToModel3d pro SCHICHT eine eigene Voll-Box; der
Schnitt bekam damit segments*layers Cut-Polygone, waehrend
wallSegmentOwners weiter nur oeffnungsbasiert segmentiert -> Index-
Versatz, falscher Owner, splitWallLayers zerteilte bereits einschichtige
Baender erneut -> einheitliches Diagonal-Muster statt SIA-Muster.

Fix: Model3dOptions { layeredWalls } an projectToModel3d (Default true,
3D-Viewer unveraendert); computeSection ruft mit layeredWalls:false ->
eine Voll-Box pro Wand, Owner-Mapping wieder 1:1, splitWallLayers
erzeugt die per-Material-Baender (Daemmung-Haarlinien, Backstein-
Diagonale, Beton-Kreuz) wie im Grundriss. 216 Tests gruen.
This commit is contained in:
2026-07-04 14:44:36 +02:00
parent 5ed3549c66
commit 6c473558ef
2 changed files with 40 additions and 11 deletions
+10 -4
View File
@@ -5,9 +5,11 @@
// 1. Aus einer Zeichnungsebene (DrawingLevel, kind "section"/"elevation") wird
// eine Schnittebene abgeleitet — die Grundriss-Schnittlinie `linePoints`
// plus `directionSign` (Blickrichtung).
// 2. Das Projekt wird über `projectToModel3d` (dieselbe Wand-/Decken-Zerlegung
// wie der 3D-Viewport) zu Wänden + Decken geflacht und als JSON an
// `cut_section_json` gereicht.
// 2. Das Projekt wird über `projectToModel3d({ layeredWalls: false })` zu
// Wänden + Decken geflacht und als JSON an `cut_section_json` gereicht —
// pro Wand EINE Voll-Box (der 3D-Viewport bekommt dagegen je Materiallage
// eine Box). So bleiben die Cut-Polygone 1:1 zu `wallSegmentOwners`, und
// die per-Material-Schnitt-Schraffur macht `splitWallLayers` TS-seitig.
// 3. Das zurückgegebene `SectionOutput` (Cut-Polygone + sichtbare/verdeckte
// Kanten, alles in (u, v)-Metern) wird in `generateSectionPlan`
// (generatePlan.ts) zu Plan-Primitiven übersetzt.
@@ -624,7 +626,11 @@ export async function computeSection(
"render3d-WASM ohne cut_section_json — pkg3d neu bauen (npm run build:engine3d)",
);
}
const modelJson = JSON.stringify(projectToModel3d(project));
// Schnitt-Eingabe: EINE Voll-Box pro Wand (layeredWalls:false), damit die
// Cut-Polygone 1:1 zu `wallSegmentOwners` (Öffnungs-Segmentierung) liegen und
// `splitWallLayers` die materialspezifischen Schnitt-Bänder korrekt aus dem
// EINEN Wandrechteck erzeugt. Der 3D-Viewer bekommt weiter per-Schicht-Boxen.
const modelJson = JSON.stringify(projectToModel3d(project, { layeredWalls: false }));
const json = mod.cut_section_json(
modelJson,
plane.point[0],