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:
co-authored by
Claude Opus 5.5
parent
94a5215f82
commit
7d91416004
+21
-5
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user