diff --git a/resources/views/rd/fire-shutter-drawing/index.blade.php b/resources/views/rd/fire-shutter-drawing/index.blade.php index d4f435bf..c47716a1 100644 --- a/resources/views/rd/fire-shutter-drawing/index.blade.php +++ b/resources/views/rd/fire-shutter-drawing/index.blade.php @@ -1058,12 +1058,33 @@ function fs3dBuild() { meshes.shaft.position.set(0, shaftY, 0); scene.add(meshes.shaft); - // === MOTOR (outside bracket, connected via 복주머니) === - const motorGeo = new THREE.BoxGeometry(150, 100, 120); + // === MOTOR (브라켓 위에 3개 다리로 안착, 샤프트 방향으로 위치) === + meshes.motor = new THREE.Group(); const motorMat = new THREE.MeshStandardMaterial({ color: 0x2563eb, metalness: 0.4, roughness: 0.4 }); - meshes.motor = new THREE.Mesh(motorGeo, motorMat); - const motorXPos = motorDir * (W1 / 2 + 80); // 브라켓 바깥에 위치 - meshes.motor.position.set(motorXPos, shaftY, 0); + const legMat = new THREE.MeshStandardMaterial({ color: 0x374151, metalness: 0.5, roughness: 0.4 }); + + // Motor body (원통형) + const motorLen = 200; // 모터 길이 (X방향, 샤프트 방향) + const motorR = 55; // 모터 반지름 + const motorBodyGeo = new THREE.CylinderGeometry(motorR, motorR, motorLen, 24); + motorBodyGeo.rotateZ(Math.PI / 2); + const motorBody = new THREE.Mesh(motorBodyGeo, motorMat); + // 브라켓 안쪽면에서 샤프트 방향으로 모터 배치 + const motorCenterX = motorDir * (W1 / 2 - bkW - motorLen / 2); + motorBody.position.set(motorCenterX, 0, 0); + meshes.motor.add(motorBody); + + // Motor mounting legs (3개 — 브라켓 위에 안착) + const legW = 8, legH = 40, legD = 20; + const legGeo = new THREE.BoxGeometry(legW, legH, legD); + const legOffsets = [-motorLen * 0.35, 0, motorLen * 0.35]; // 모터 길이 방향 3등분 + legOffsets.forEach(dx => { + const leg = new THREE.Mesh(legGeo, legMat); + leg.position.set(motorCenterX + motorDir * dx, -motorR - legH / 2, 0); + meshes.motor.add(leg); + }); + + meshes.motor.position.set(0, shaftY, 0); scene.add(meshes.motor); // === GUIDE RAILS (ExtrudeGeometry) ===