v0.4.10: wandhoogtes gekoppeld, middenpunt (nok), binnenspots langs naadwanden
- WallModel: optioneel middenpunt (heightMid, topLine), bovenregels in verstek; stijlen, openingen, beplating, doek, latwerk, BOM, 2D en PDF volgen de knik - wand-editor: schakelaar "Middenpunt (nok)" + nokhoogte, links/rechts = goothoogte - UnitModel.syncWallHeights: tegenoverliggende wand gespiegeld, haakse wanden vlak op de hoekhoogtes; wallPieces met nok per stuk - LightingModel.computeIndoor: raster vanaf binnenzijde eigen naadwanddeel Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
9bd7faeaa6
commit
9126588df7
@@ -256,13 +256,23 @@ window.LightingModel = (() => {
|
||||
const T = {};
|
||||
u.walls.forEach(w => { T[w.side] = w.removed ? 0 : w.thickness; });
|
||||
const r = u.rect, off = s.indoorOffset;
|
||||
// Naadwanddelen van deze unit staan binnen de rect tegen de naad: het
|
||||
// raster begint dan vanaf hun binnenzijde (net als bij een buitenwand).
|
||||
const own = interior.filter(iw => !iw.seamUnit || iw.seamUnit === u.id);
|
||||
own.filter(iw => iw.seamUnit).forEach(iw => {
|
||||
const p = iw.place, horiz = Math.abs(Math.sin(p.rotY)) < 0.5;
|
||||
const [side, d] = horiz
|
||||
? (Math.abs(p.cz - r.z0) < Math.abs(p.cz - r.z1) ? ['voor', p.cz - r.z0] : ['achter', r.z1 - p.cz])
|
||||
: (Math.abs(p.cx - r.x0) < Math.abs(p.cx - r.x1) ? ['links', p.cx - r.x0] : ['rechts', r.x1 - p.cx]);
|
||||
T[side] = Math.max(T[side] || 0, d + p.thickness / 2);
|
||||
});
|
||||
const xs = gridPositions(r.x0 + (T.links || 0) + off, r.x1 - (T.rechts || 0) - off, s.indoorMin, s.indoorMax);
|
||||
const zs = gridPositions(r.z0 + (T.voor || 0) + off, r.z1 - (T.achter || 0) - off, s.indoorMin, s.indoorMax);
|
||||
xs.forEach(x => zs.forEach(z => {
|
||||
const tooClose = interior.some(iw => {
|
||||
const tooClose = own.some(iw => {
|
||||
const half = iw.place.width / 2, c = Math.cos(iw.place.rotY), sn = Math.sin(iw.place.rotY);
|
||||
const a = { x: iw.place.cx - half * c, z: iw.place.cz + half * sn }, b = { x: iw.place.cx + half * c, z: iw.place.cz - half * sn };
|
||||
return distToSegment({ x, z }, a, b) < iw.place.thickness / 2 + off;
|
||||
return distToSegment({ x, z }, a, b) < iw.place.thickness / 2 + off - 1;
|
||||
});
|
||||
if (!tooClose) out.push({ unitId: u.id, x, z, y: u.roof.base, floorY: u.layout.floorTop });
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user