feat: Latest production version with interior scene and glass
Includes room interior with floor, walls, glass you can see through, and all uncommitted production changes that were running live. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -37,11 +37,14 @@ export interface HandleProps {
|
||||
*/
|
||||
function HandleMaterialTextured({ color, finish }: { color: string; finish: string }) {
|
||||
try {
|
||||
const texturePath = {
|
||||
zwart: "/textures/aluwdoors/aluwdoors-configurator-metaalkleur-zwart.jpg",
|
||||
brons: "/textures/aluwdoors/aluwdoors-configurator-metaalkleur-brons.jpg",
|
||||
grijs: "/textures/aluwdoors/aluwdoors-configurator-metaalkleur-antraciet.jpg",
|
||||
}[finish] || "/textures/aluwdoors/aluwdoors-configurator-metaalkleur-zwart.jpg";
|
||||
const texturePath = ({
|
||||
zwart: "/textures/proinn/proinn-metaalkleur-zwart.jpg",
|
||||
brons: "/textures/proinn/proinn-metaalkleur-brons.jpg",
|
||||
grijs: "/textures/proinn/proinn-metaalkleur-antraciet.jpg",
|
||||
goud: "/textures/proinn/proinn-metaalkleur-goud.jpg",
|
||||
beige: "/textures/proinn/proinn-metaalkleur-beige.jpg",
|
||||
ral: "/textures/proinn/proinn-metaalkleur-ral-keuze.jpg",
|
||||
} as Record<string, string>)[finish] || "/textures/proinn/proinn-metaalkleur-zwart.jpg";
|
||||
|
||||
const texture = useTexture(texturePath);
|
||||
texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
|
||||
@@ -83,7 +86,14 @@ function PowderCoatMaterial({ color, finish }: { color: string; finish: string }
|
||||
}
|
||||
|
||||
function getColor(finish: string): string {
|
||||
return { zwart: "#1a1a1a", brons: "#8B6F47", grijs: "#525252" }[finish] || "#1a1a1a";
|
||||
return ({
|
||||
zwart: "#1a1a1a",
|
||||
brons: "#8B6F47",
|
||||
grijs: "#525252",
|
||||
goud: "#B8860B",
|
||||
beige: "#C8B88A",
|
||||
ral: "#4A6741",
|
||||
} as Record<string, string>)[finish] || "#1a1a1a";
|
||||
}
|
||||
|
||||
// ============================================
|
||||
@@ -122,14 +132,16 @@ function MountStandoff({
|
||||
/**
|
||||
* U-Greep: Proper U-shaped bar handle with two standoff mounts.
|
||||
* The grip sits 40mm off the door face, connected by two cylindrical pootjes.
|
||||
* Mounted on the right stile (vertical frame profile).
|
||||
*/
|
||||
export function UGreep({ finish, doorHeight }: HandleProps) {
|
||||
export function UGreep({ finish, doorWidth, doorHeight, stileWidth }: HandleProps) {
|
||||
const color = getColor(finish);
|
||||
const gripLength = Math.min(doorHeight * 0.25, 0.6); // Max 60cm, proportional
|
||||
const mountSpacing = gripLength - GRIP_BAR_SIZE; // Distance between mount centers
|
||||
const xPos = doorWidth / 2 - stileWidth / 2; // Center of right stile
|
||||
|
||||
return (
|
||||
<group position={[0, 0, 0]}>
|
||||
<group position={[xPos, 0, 0]}>
|
||||
{/* Top mount standoff */}
|
||||
<MountStandoff
|
||||
position={[0, mountSpacing / 2, MOUNT_CENTER_Z]}
|
||||
@@ -163,16 +175,18 @@ export function UGreep({ finish, doorHeight }: HandleProps) {
|
||||
* Beugelgreep: Vertical bar handle (round) with mounting blocks.
|
||||
* Two rectangular mounting blocks press against the door face,
|
||||
* with a round bar connecting them.
|
||||
* Mounted on the right stile (vertical frame profile).
|
||||
*/
|
||||
export function Beugelgreep({ finish, doorHeight }: HandleProps) {
|
||||
export function Beugelgreep({ finish, doorWidth, doorHeight, stileWidth }: HandleProps) {
|
||||
const color = getColor(finish);
|
||||
const gripLength = Math.min(doorHeight * 0.35, 0.8); // Max 80cm
|
||||
const barDiameter = 0.025; // 25mm
|
||||
const mountBlockSize: [number, number, number] = [0.04, 0.05, MOUNT_LENGTH];
|
||||
const mountSpacing = gripLength * 0.85;
|
||||
const xPos = doorWidth / 2 - stileWidth / 2; // Center of right stile
|
||||
|
||||
return (
|
||||
<group position={[0, 0, 0]}>
|
||||
<group position={[xPos, 0, 0]}>
|
||||
{/* Top mounting block (sits on door face, extends outward) */}
|
||||
<RoundedBox
|
||||
args={mountBlockSize}
|
||||
@@ -229,8 +243,8 @@ export function Hoekgreep({ finish, doorWidth, stileWidth }: HandleProps) {
|
||||
const barThickness = 0.02;
|
||||
const barWidth = 0.03;
|
||||
|
||||
// Position near right stile
|
||||
const xPos = doorWidth / 2 - stileWidth - 0.12;
|
||||
// Position on right stile center
|
||||
const xPos = doorWidth / 2 - stileWidth / 2;
|
||||
|
||||
return (
|
||||
<group position={[xPos, 0, 0]}>
|
||||
@@ -289,7 +303,8 @@ export function Hoekgreep({ finish, doorWidth, stileWidth }: HandleProps) {
|
||||
export function Maangreep({ finish, doorWidth, stileWidth }: HandleProps) {
|
||||
const color = getColor(finish);
|
||||
const curveRadius = 0.08;
|
||||
const xPos = doorWidth / 2 - stileWidth - 0.12;
|
||||
// Position on right stile center
|
||||
const xPos = doorWidth / 2 - stileWidth / 2;
|
||||
|
||||
return (
|
||||
<group position={[xPos, 0, 0]}>
|
||||
@@ -338,7 +353,8 @@ export function Maangreep({ finish, doorWidth, stileWidth }: HandleProps) {
|
||||
*/
|
||||
export function Ovaalgreep({ finish, doorWidth, stileWidth }: HandleProps) {
|
||||
const color = getColor(finish);
|
||||
const xPos = doorWidth / 2 - stileWidth - 0.12;
|
||||
// Position on right stile center
|
||||
const xPos = doorWidth / 2 - stileWidth / 2;
|
||||
|
||||
const shape = new THREE.Shape();
|
||||
const rx = 0.06;
|
||||
@@ -391,7 +407,8 @@ export function Ovaalgreep({ finish, doorWidth, stileWidth }: HandleProps) {
|
||||
export function Klink({ finish, doorWidth, stileWidth }: HandleProps) {
|
||||
const color = getColor(finish);
|
||||
const leverLength = 0.12;
|
||||
const xPos = doorWidth / 2 - stileWidth - 0.1;
|
||||
// Position on right stile center
|
||||
const xPos = doorWidth / 2 - stileWidth / 2;
|
||||
|
||||
return (
|
||||
<group position={[xPos, 0, 0]}>
|
||||
|
||||
Reference in New Issue
Block a user