From 03e17d2a3d5be460f7179519ca91ad00935cc414 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Sun, 8 Mar 2026 22:06:15 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20[rd]=20=EB=AA=A8=ED=84=B0=EC=B8=A1=20?= =?UTF-8?q?=EB=B8=8C=EB=9D=BC=EC=BC=93=20=EC=A0=9C=EA=B1=B0=20=E2=80=94=20?= =?UTF-8?q?=EB=AA=A8=ED=84=B0=EA=B0=80=20=EB=B3=B5=EC=A3=BC=EB=A8=B8?= =?UTF-8?q?=EB=8B=88=EB=A1=9C=20=EC=83=A4=ED=94=84=ED=8A=B8=EC=97=90=20?= =?UTF-8?q?=EC=A7=81=EC=A0=91=20=EA=B2=B0=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 모터측 브라켓 제거 (비모터측에만 브라켓 존재) - 복주머니가 셔터박스 끝에서 직접 시작 - 모터 → 출력축 → 복주머니 → 샤프트 직결 구조 - 주축 길이 재계산 (모터측 브라켓 두께 제외) --- .../rd/fire-shutter-drawing/index.blade.php | 29 ++++++++----------- 1 file changed, 12 insertions(+), 17 deletions(-) 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) 모터 본체 (은색 원통 — 메인 실린더)