diff --git a/resources/views/rd/fire-shutter-drawing/index.blade.php b/resources/views/rd/fire-shutter-drawing/index.blade.php index 7986191c..2579282f 100644 --- a/resources/views/rd/fire-shutter-drawing/index.blade.php +++ b/resources/views/rd/fire-shutter-drawing/index.blade.php @@ -1059,22 +1059,17 @@ function fs3dBuild() { // 환봉 길이 = bracket inner → shaft end gap const roundBarLen = 60; - // 주축 길이 = 양쪽 환봉/복주머니 사이 (전체 폭 - bracket*2 - 환봉 - 복주머니) - const mainShaftLen = W1 - bkW * 2 - roundBarLen - couplingLen; + const nonMotorSide = -motorDir; // 모터 반대쪽 + // 주축 길이 = 비모터측(bracket+환봉) + 모터측(복주머니) 제외 + const mainShaftLen = W1 - bkW - roundBarLen - couplingLen; - // --- Left Bracket --- - const bkGeoL = new THREE.BoxGeometry(bkW, bkH, bkD); - const bkMeshL = new THREE.Mesh(bkGeoL, bracketMat); - bkMeshL.position.set(-W1 / 2 + bkW / 2, 0, 0); - meshes.shaft.add(bkMeshL); - - // --- Right Bracket --- - const bkMeshR = new THREE.Mesh(bkGeoL.clone(), bracketMat); - bkMeshR.position.set(W1 / 2 - bkW / 2, 0, 0); - meshes.shaft.add(bkMeshR); + // --- Non-motor side Bracket (모터 반대쪽만 브라켓 존재) --- + const bkGeo = new THREE.BoxGeometry(bkW, bkH, bkD); + const bkMesh = new THREE.Mesh(bkGeo, bracketMat); + bkMesh.position.set(nonMotorSide * (W1 / 2 - bkW / 2), 0, 0); + meshes.shaft.add(bkMesh); // --- Non-motor side: 환봉 (round bar, thin cylinder) --- - const nonMotorSide = -motorDir; // 모터 반대쪽 const rbGeo = new THREE.CylinderGeometry(roundBarDia / 2, roundBarDia / 2, roundBarLen, 16); rbGeo.rotateZ(Math.PI / 2); const rbMesh = new THREE.Mesh(rbGeo, shaftMat); @@ -1098,15 +1093,15 @@ function fs3dBuild() { cpGeo.rotateZ(Math.PI / 2); const cpMat = new THREE.MeshStandardMaterial({ color: 0x78716c, metalness: 0.7, roughness: 0.2 }); const cpMesh = new THREE.Mesh(cpGeo, cpMat); - const cpCenterX = motorDir * (W1 / 2 - bkW - couplingLen / 2); + const cpCenterX = motorDir * (W1 / 2 - couplingLen / 2); cpMesh.position.set(cpCenterX, 0, 0); meshes.shaft.add(cpMesh); - // 플랜지 링 (모터측 결합면) + // 플랜지 링 (모터 출력축과의 결합면) const flangeGeo = new THREE.CylinderGeometry(couplingDia / 2 + 10, couplingDia / 2 + 10, 6, 24); flangeGeo.rotateZ(Math.PI / 2); const flangeMat = new THREE.MeshStandardMaterial({ color: 0x57534e, metalness: 0.8, roughness: 0.2 }); const flange = new THREE.Mesh(flangeGeo, flangeMat); - flange.position.set(motorDir * (W1 / 2 - bkW - 3), 0, 0); + flange.position.set(motorDir * (W1 / 2 - 3), 0, 0); meshes.shaft.add(flange); meshes.shaft.position.set(0, shaftY, 0); @@ -1123,7 +1118,7 @@ function fs3dBuild() { const motorBodyLen = motorR * 2.5; // 본체 길이 const gearBoxLen = motorR * 1.2; // 기어박스 길이 const totalMotorLen = motorBodyLen + gearBoxLen; - const motorStartX = motorDir * (W1 / 2 - bkW - couplingLen); // 복주머니 끝 + const motorStartX = motorDir * (W1 / 2 - couplingLen); // 복주머니 끝 (모터측 브라켓 없음) const motorMidX = motorStartX - motorDir * totalMotorLen / 2; // 모터 전체 중심 // 1) 모터 본체 (은색 원통 — 메인 실린더)