v0.4.14: schuin dak met loodrechte kopse kanten, import met naadwanden, weergave Vloerplan

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Machiel
2026-09-30 17:24:38 +02:00
co-authored by Claude Opus 5.5
parent 94a5215f82
commit 7d91416004
5 changed files with 55 additions and 13 deletions
+21 -5
View File
@@ -247,17 +247,33 @@ window.RoofModel = (() => {
}
// 3D van het dak van één unit (meters, gecentreerd op de dakrechthoek,
// Y = 0 op het loopvlak): per dakvlak build3D, gekanteld om de onderkant
// van het plafond zodat die precies op de daklijn van de wanden ligt.
// Y = 0 op het loopvlak): per dakvlak build3D, zo vervormd dat de
// onderkant van het plafond precies op de daklijn van de wanden ligt.
// Geen kanteling maar een afschuiving (lokaal +Z = oplopende as):
// plan = z·cos θ, Y = y/cos θ + z·sin θ
// De onderkant ligt dan op de helling, de dikte haaks op de helling blijft
// gelijk (verticaal = dikte/cos θ, zoals vThick), de lengte langs de
// helling ook (balklengtes), en de kopse kanten staan loodrecht (zoals een
// loodrechte zaagsnede aan sporen). Bij kantelen zouden de kopse kanten
// haaks op de helling staan en ligt de bovenkant aan de hoge kant
// dikte·sin θ terug van de dakrand.
function buildUnit3D(unitRoof, opts) {
const toM = 0.001;
const group = new THREE.Group();
unitRoof.planes.forEach(pl => {
const g = new THREE.Group();
g.add(build3D(pl.data.calcData, pl.data.resolvedOpenings, opts));
g.position.set(pl.cx * toM, pl.y * toM, pl.cz * toM);
// Eerst kantelen om lokaal X (lokaal +Z = oplopende as), dan draaien.
g.rotation.set(-pl.theta, pl.yaw, 0, 'YXZ');
g.rotation.set(0, pl.yaw, 0);
const shear = new THREE.Group();
const c = Math.cos(pl.theta), sn = Math.sin(pl.theta);
shear.matrixAutoUpdate = false;
shear.matrix.set(
1, 0, 0, 0,
0, 1 / c, sn, 0,
0, 0, c, 0,
0, 0, 0, 1);
shear.add(build3D(pl.data.calcData, pl.data.resolvedOpenings, opts));
g.add(shear);
group.add(g);
});
return group;