From 183c0c1384e2b0decd82b60697235f683bc06a1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Mon, 9 Mar 2026 08:53:41 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20[rd]=20=EB=AA=A8=ED=84=B0=EC=B8=A1=20?= =?UTF-8?q?=ED=81=B0=20=ED=94=8C=EB=9E=9C=EC=A7=80=20=EC=82=AD=EC=A0=9C,?= =?UTF-8?q?=203=EC=9D=B8=EC=B9=98=20=EC=97=B0=EA=B2=B0=EA=B4=80=E2=86=92?= =?UTF-8?q?=EB=B8=8C=EB=9D=BC=EC=BC=93=20=EC=A7=81=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 모터측 플랜지(flangeMT) 삭제 (실제 없는 부품) - 3인치 연결관이 샤프트 끝에서 복주머니까지 직접 연결 - 비모터측 플랜지만 유지 --- .../rd/fire-shutter-drawing/index.blade.php | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/resources/views/rd/fire-shutter-drawing/index.blade.php b/resources/views/rd/fire-shutter-drawing/index.blade.php index 92b5a4f2..e9d728fd 100644 --- a/resources/views/rd/fire-shutter-drawing/index.blade.php +++ b/resources/views/rd/fire-shutter-drawing/index.blade.php @@ -1089,14 +1089,15 @@ function fs3dBuild() { stubPin.position.set(bkInnerFaceX - nonMotorSide * stubPinVisible / 2, 0, 0); meshes.shaft.add(stubPin); - // 모터측: 3인치 연결관 + 복주머니 (브라켓 체결) + // 모터측: 3인치 연결관 + 복주머니 (브라켓 직접 체결) const reducerR = 38; // 3인치 관 반지름 (ø76mm ≈ 3") - const reducerLen = stubPinVisible - 40; // 연결관 길이 (복주머니 공간 제외) - const bokjuR = reducerR + 8; // 복주머니 외경 (연결관보다 약간 큼) + const bokjuR = reducerR + 8; // 복주머니 외경 const bokjuLen = 35; // 복주머니 길이 const bokjuMat = new THREE.MeshStandardMaterial({ color: 0x6b7280, metalness: 0.6, roughness: 0.3 }); const mtBkInnerFaceX = motorDir * (W1 / 2 - motorBkD); + const shaftEndX = motorDir * (mainShaftLen / 2); // 샤프트 관 끝 + // 복주머니 (브라켓 내면에서 바로 안쪽, 브라켓과 직접 결합) const bokjuGeo = new THREE.CylinderGeometry(bokjuR, bokjuR, bokjuLen, 24); bokjuGeo.rotateZ(Math.PI / 2); @@ -1104,33 +1105,30 @@ function fs3dBuild() { bokju.position.set(mtBkInnerFaceX - motorDir * bokjuLen / 2, 0, 0); meshes.shaft.add(bokju); - // 3인치 연결관 (복주머니 ~ 메인 샤프트 플랜지) + // 3인치 연결관 (복주머니 ~ 샤프트 관 끝, 플랜지 없이 직접 용접) + const reducerStartX = mtBkInnerFaceX - motorDir * bokjuLen; + const reducerEndX = shaftEndX; + const reducerLen = Math.abs(reducerStartX - reducerEndX); const reducerGeo = new THREE.CylinderGeometry(reducerR, reducerR, reducerLen, 24); reducerGeo.rotateZ(Math.PI / 2); const reducer = new THREE.Mesh(reducerGeo, stubPinMat); - const reducerStartX = mtBkInnerFaceX - motorDir * bokjuLen; - reducer.position.set(reducerStartX - motorDir * reducerLen / 2, 0, 0); + reducer.position.set((reducerStartX + reducerEndX) / 2, 0, 0); meshes.shaft.add(reducer); - // --- Main Shaft (원형관, 양쪽 플랜지 사이) --- + // --- Main Shaft (원형관) --- const msGeo = new THREE.CylinderGeometry(shaftR, shaftR, mainShaftLen, 32); msGeo.rotateZ(Math.PI / 2); const msMesh = new THREE.Mesh(msGeo, shaftMat); msMesh.position.set(0, 0, 0); meshes.shaft.add(msMesh); - // 비모터측 플랜지 (샤프트 내경에 삽입 용접) + // 비모터측 플랜지만 (샤프트 내경에 삽입 용접) const flangeGeo = new THREE.CylinderGeometry(flangeR, flangeR, flangeThick, 32); flangeGeo.rotateZ(Math.PI / 2); const flangeNM = new THREE.Mesh(flangeGeo, flangeMat); flangeNM.position.set(nonMotorSide * (mainShaftLen / 2 + flangeThick / 2), 0, 0); meshes.shaft.add(flangeNM); - // 모터측 플랜지 (샤프트 내경에 삽입, 3인치 연결관과 용접) - const flangeMT = new THREE.Mesh(flangeGeo.clone(), flangeMat); - flangeMT.position.set(motorDir * (mainShaftLen / 2 + flangeThick / 2), 0, 0); - meshes.shaft.add(flangeMT); - meshes.shaft.position.set(0, shaftY, 0); scene.add(meshes.shaft);