fix: [rd] 샤프트 길이 축소 + 양쪽 환봉 노출
- 샤프트 관: W1-400mm (양쪽 환봉 200mm씩 노출) - 환봉: ø30, 200mm 밖으로 보임 (전체 300mm 중 100mm는 플랜지 내부) - 모터측에도 환봉 추가 - 플랜지 위치를 샤프트 끝 바깥으로 수정 - slat roll 길이도 샤프트에 맞춤
This commit is contained in:
@@ -1059,9 +1059,19 @@ function fs3dBuild() {
|
||||
const motorBkD = 18; // 두께 (X방향, 철판)
|
||||
const shaftFromInner = 90; // 브라켓 내면에서 샤프트 중심까지 거리 (도면 기준)
|
||||
|
||||
// 주축: 양쪽 브라켓 외면까지 (돌출 없음)
|
||||
const mainShaftLen = W1;
|
||||
const msCenterX = 0;
|
||||
// 환봉/플랜지 치수
|
||||
const stubPinR = 15; // 환봉 반지름 (ø30)
|
||||
const stubPinTotal = 300; // 환봉 전체 길이
|
||||
const stubPinVisible = 200; // 밖에서 보이는 길이 (플랜지 밖)
|
||||
const stubPinInside = stubPinTotal - stubPinVisible; // 플랜지 안쪽 (100mm)
|
||||
const shaftR = b.shaftDia / 2;
|
||||
const flangeR = shaftR * 1.4; // 플랜지 외경
|
||||
const flangeThick = 10; // 플랜지 두께
|
||||
const flangeMat = new THREE.MeshStandardMaterial({ color: 0x78716c, metalness: 0.5, roughness: 0.35 });
|
||||
const stubPinMat = new THREE.MeshStandardMaterial({ color: 0x9ca3af, metalness: 0.7, roughness: 0.25 });
|
||||
|
||||
// 샤프트 관 길이: 양쪽 환봉 노출분만큼 축소
|
||||
const mainShaftLen = W1 - stubPinVisible * 2;
|
||||
|
||||
// --- Non-motor side Bracket (180×180mm, 두께 18mm) ---
|
||||
const bkGeo = new THREE.BoxGeometry(bkThick, bkH, bkD);
|
||||
@@ -1070,40 +1080,37 @@ function fs3dBuild() {
|
||||
bkMesh.position.set(bkCenterX, 0, 0);
|
||||
meshes.shaft.add(bkMesh);
|
||||
|
||||
// 비모터측: 환봉 (stub pin, 브라켓 중앙에서 샤프트쪽으로 돌출)
|
||||
const stubPinR = 15; // 환봉 반지름 (ø30)
|
||||
const stubPinLen = 50; // 환봉 길이
|
||||
const stubPinGeo = new THREE.CylinderGeometry(stubPinR, stubPinR, stubPinLen, 16);
|
||||
// 비모터측 환봉 (브라켓에서 안쪽으로 200mm 돌출)
|
||||
const stubPinGeo = new THREE.CylinderGeometry(stubPinR, stubPinR, stubPinVisible, 16);
|
||||
stubPinGeo.rotateZ(Math.PI / 2);
|
||||
const stubPin = new THREE.Mesh(stubPinGeo, shaftMat);
|
||||
// 브라켓 내면에서 안쪽(센터방향)으로 돌출
|
||||
const stubPin = new THREE.Mesh(stubPinGeo, stubPinMat);
|
||||
const bkInnerFaceX = nonMotorSide * (W1 / 2 - bkThick);
|
||||
stubPin.position.set(bkInnerFaceX - nonMotorSide * stubPinLen / 2, 0, 0);
|
||||
stubPin.position.set(bkInnerFaceX - nonMotorSide * stubPinVisible / 2, 0, 0);
|
||||
meshes.shaft.add(stubPin);
|
||||
|
||||
// --- Main Shaft (원형관, 양쪽 플랜지 사이) ---
|
||||
const shaftR = b.shaftDia / 2;
|
||||
const flangeR = shaftR * 1.4; // 플랜지 외경 (샤프트보다 40% 큼)
|
||||
const flangeThick = 8; // 플랜지 두께
|
||||
const flangeMat = new THREE.MeshStandardMaterial({ color: 0x78716c, metalness: 0.5, roughness: 0.35 });
|
||||
// 모터측 환봉 (모터측 브라켓에서 안쪽으로 200mm 돌출)
|
||||
const stubPinMT = new THREE.Mesh(stubPinGeo.clone(), stubPinMat);
|
||||
const mtBkInnerFaceX = motorDir * (W1 / 2 - motorBkD);
|
||||
stubPinMT.position.set(mtBkInnerFaceX - motorDir * stubPinVisible / 2, 0, 0);
|
||||
meshes.shaft.add(stubPinMT);
|
||||
|
||||
// 샤프트 관 (양쪽 플랜지 안쪽까지)
|
||||
// --- 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(msCenterX, 0, 0);
|
||||
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);
|
||||
flangeNM.position.set(nonMotorSide * (mainShaftLen / 2 + flangeThick / 2), 0, 0);
|
||||
meshes.shaft.add(flangeNM);
|
||||
|
||||
// 모터측 플랜지 (샤프트 끝에 용접)
|
||||
const flangeMT = new THREE.Mesh(flangeGeo.clone(), flangeMat);
|
||||
flangeMT.position.set(motorDir * (mainShaftLen / 2 - flangeThick / 2), 0, 0);
|
||||
flangeMT.position.set(motorDir * (mainShaftLen / 2 + flangeThick / 2), 0, 0);
|
||||
meshes.shaft.add(flangeMT);
|
||||
|
||||
meshes.shaft.position.set(0, shaftY, 0);
|
||||
@@ -1329,7 +1336,7 @@ function fs3dBuild() {
|
||||
const shaftR = b.shaftDia / 2;
|
||||
const rollThick = Math.max(Math.sqrt(rolledH * wrapThick / Math.PI), 8);
|
||||
const rollOuterR = shaftR + rollThick;
|
||||
const rollLen = W - 30;
|
||||
const rollLen = W - 30 - stubPinVisible * 2; // 샤프트 관 길이에 맞춤
|
||||
|
||||
// 하나의 Mesh로 표현 (접시 모양 방지)
|
||||
const rollGeo = new THREE.CylinderGeometry(rollOuterR, rollOuterR, rollLen, 48, 1, false);
|
||||
|
||||
Reference in New Issue
Block a user