fix: [rd] 모터측 브라켓 제거 — 모터가 복주머니로 샤프트에 직접 결합

- 모터측 브라켓 제거 (비모터측에만 브라켓 존재)
- 복주머니가 셔터박스 끝에서 직접 시작
- 모터 → 출력축 → 복주머니 → 샤프트 직결 구조
- 주축 길이 재계산 (모터측 브라켓 두께 제외)
This commit is contained in:
김보곤
2026-03-08 22:06:15 +09:00
parent 9da1823750
commit 03e17d2a3d

View File

@@ -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) 모터 본체 (은색 원통 — 메인 실린더)