feat: Wall mounting system with Sparingsmaat logic and reveal surfaces

Phase 1 (Logic): Add Dutch mounting constants to door-models.ts
- STELRUIMTE=10mm (tolerance), HANGNAAD=3mm (gap per side)
- WALL_THICKNESS=150mm (standard interior wall)
- calculateMountingDimensions() derives frame/leaf from sparingsmaat

Phase 2 (Visual): Replace LivingRoom with WallContainer in scene.tsx
- 4-box wall construction with precise rectangular hole
- Hole = doorLeafWidth + STELRUIMTE (visible 5mm gap per side)
- Door sits INSIDE the wall, not in front of it

Phase 3 (Detail): Reveal surfaces and door-type positioning
- Plaster/stucco material on reveal edges (inner hole surfaces)
- Taats: door centered in wall depth (pivot at center)
- Scharnier/Paneel: offset toward front face
- Dedicated fill light illuminating reveal depth
- Baseboard (plint) on both sides of opening

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Ubuntu
2026-02-14 01:23:18 +00:00
parent fbc9fefeea
commit 748a5814e7
2 changed files with 298 additions and 160 deletions

View File

@@ -39,6 +39,39 @@ export const RAIL_HEIGHT_ROBUST = 40; // mm - Standard robust rails (same as pro
*/
export const TAATS_PIVOT_OFFSET = 60; // mm - Pivot axis offset from wall for Taats doors
/**
* Wall Mounting Dimensions (Sparingsmaat / Deurmaat)
* Dutch building standard: Sparingsmaat = rough wall opening
*/
export const STELRUIMTE = 10; // mm - Total tolerance between wall and frame (5mm per side)
export const HANGNAAD = 3; // mm - Gap between frame and door leaf per side
export const WALL_THICKNESS = 150; // mm - Standard interior wall thickness
/**
* Calculate mounting dimensions from Sparingsmaat (wall opening).
*
* Sparingsmaat (input) -> Frame -> Door Leaf
* Frame = Sparingsmaat - STELRUIMTE (10mm tolerance)
* DoorLeaf = Frame - 2*PROFILE_WIDTH - 2*HANGNAAD (6mm gap)
*/
export function calculateMountingDimensions(sparingsmaatWidth: number, sparingsmaatHeight: number) {
const frameOuterWidth = sparingsmaatWidth - STELRUIMTE;
const frameOuterHeight = sparingsmaatHeight - STELRUIMTE / 2; // 5mm top tolerance only
const doorLeafWidth = frameOuterWidth - (2 * HANGNAAD);
const doorLeafHeight = frameOuterHeight - (2 * HANGNAAD);
return {
sparingsmaatWidth,
sparingsmaatHeight,
frameOuterWidth,
frameOuterHeight,
doorLeafWidth,
doorLeafHeight,
stelruimtePerSide: STELRUIMTE / 2, // 5mm gap visible on each side
hangnaadPerSide: HANGNAAD, // 3mm gap between frame and leaf
};
}
// ============================================
// PHYSICAL PART TYPES
// ============================================