fix: [fire-shutter] 3D 가이드레일 형상 수정 (KSS01 실리카 슬랫형)
- ② C채널 플랜지 끝 10mm 절곡 추가 - ① 마감재 SUS J-hook 프로파일 적용 (절곡: 10-11-110-30-15-15-15) - 기존 잘못된 L자 트림(⑤)과 L브라켓 클립(①) 제거
This commit is contained in:
@@ -1822,50 +1822,75 @@ function createRailGroup() {
|
||||
const wdGeo = new THREE.ExtrudeGeometry(wdShape, railExtrude);
|
||||
grp.add(new THREE.Mesh(wdGeo, railMat));
|
||||
|
||||
// --- ⑤ 벽도마감 (SUS 1.2T): 9-114-34-10 × 2개 ---
|
||||
// 본체 양쪽 사이드를 감싸는 SUS 커버 (L자 프로파일)
|
||||
const trimT = g.trimThick || 1.2;
|
||||
// 하단 트림 (X=0 외면)
|
||||
const bt = new THREE.Shape();
|
||||
bt.moveTo(-trimT, -9); // 전면 립 (9mm 돌출)
|
||||
bt.lineTo(0, -9);
|
||||
bt.lineTo(0, sw); // 사이드 커버 (본체 사이드월까지)
|
||||
bt.lineTo(34, sw); // 벽쪽 플랜지 (34mm 안쪽으로)
|
||||
bt.lineTo(34, sw + trimT);
|
||||
bt.lineTo(-trimT, sw + trimT);
|
||||
bt.lineTo(-trimT, -9);
|
||||
grp.add(new THREE.Mesh(new THREE.ExtrudeGeometry(bt, railExtrude), railSusMat));
|
||||
// 상단 트림 (X=rw 외면)
|
||||
const tt = new THREE.Shape();
|
||||
tt.moveTo(rw + trimT, -9); // 전면 립
|
||||
tt.lineTo(rw, -9);
|
||||
tt.lineTo(rw, sw); // 사이드 커버
|
||||
tt.lineTo(rw - 34, sw); // 벽쪽 플랜지
|
||||
tt.lineTo(rw - 34, sw + trimT);
|
||||
tt.lineTo(rw + trimT, sw + trimT);
|
||||
tt.lineTo(rw + trimT, -9);
|
||||
grp.add(new THREE.Mesh(new THREE.ExtrudeGeometry(tt, railExtrude), railSusMat));
|
||||
|
||||
// --- ① 마감재 (EGI 1.55T) × 2개 ---
|
||||
// 슬랫 가이드 클립: 사이드월 내면에 부착된 L형 브라켓
|
||||
// 참조 도면 기준: 채널 내부 사이드월에서 안쪽으로 돌출
|
||||
[{ x: rt, dir: 1 }, { x: rw - rt, dir: -1 }].forEach(({ x, dir }) => {
|
||||
const clipShape = new THREE.Shape();
|
||||
const cy = lp + rt + 3; // 립 내면에서 약간 안쪽
|
||||
const armLen = 12; // 사이드월에서 안쪽으로 돌출 길이
|
||||
const legLen = 20; // 사이드월 따라 길이
|
||||
// L형 브라켓 (사이드월 내면 → 채널 안쪽으로)
|
||||
clipShape.moveTo(x, cy);
|
||||
clipShape.lineTo(x + dir * armLen, cy);
|
||||
clipShape.lineTo(x + dir * armLen, cy + rt);
|
||||
clipShape.lineTo(x + dir * rt, cy + rt);
|
||||
clipShape.lineTo(x + dir * rt, cy + legLen);
|
||||
clipShape.lineTo(x, cy + legLen);
|
||||
clipShape.lineTo(x, cy);
|
||||
const clipGeo = new THREE.ExtrudeGeometry(clipShape, railExtrude);
|
||||
grp.add(new THREE.Mesh(clipGeo, railMat));
|
||||
// --- ② 플랜지 끝 10mm 절곡 (채널 안쪽으로, 각 플랜지 내측 끝) ---
|
||||
[[fl - rt, fl], [rw - fl, rw - fl + rt]].forEach(([x1, x2]) => {
|
||||
const feLip = new THREE.Shape();
|
||||
feLip.moveTo(x1, 0);
|
||||
feLip.lineTo(x1, lp);
|
||||
feLip.lineTo(x2, lp);
|
||||
feLip.lineTo(x2, 0);
|
||||
feLip.lineTo(x1, 0);
|
||||
grp.add(new THREE.Mesh(new THREE.ExtrudeGeometry(feLip, railExtrude), railMat));
|
||||
});
|
||||
|
||||
// --- ① 마감재 SUS 1.2T × 2장 (절곡: 10-11-110-30-15-15-15, J-hook 상하 대칭) ---
|
||||
const tT = g.trimThick || 1.2;
|
||||
const m1d = 30, m1e = 15, m1f = 15, m1g = 15, m1a = 10, m1b = 11;
|
||||
|
||||
// 하단 트림 (X=0 외면) — cover + J-hook
|
||||
const bt = new THREE.Shape();
|
||||
bt.moveTo(-tT, sw + rt + tT);
|
||||
bt.lineTo(-tT, -lp);
|
||||
bt.lineTo(m1d, -lp);
|
||||
bt.lineTo(m1d, -lp + m1e);
|
||||
bt.lineTo(m1d - m1f, -lp + m1e);
|
||||
bt.lineTo(m1d - m1f, -lp + m1e + m1g);
|
||||
bt.lineTo(m1d - m1f + tT, -lp + m1e + m1g);
|
||||
bt.lineTo(m1d - m1f + tT, -lp + m1e - tT);
|
||||
bt.lineTo(m1d - tT, -lp + m1e - tT);
|
||||
bt.lineTo(m1d - tT, -lp + tT);
|
||||
bt.lineTo(0, -lp + tT);
|
||||
bt.lineTo(0, sw + rt + tT);
|
||||
bt.lineTo(-tT, sw + rt + tT);
|
||||
grp.add(new THREE.Mesh(new THREE.ExtrudeGeometry(bt, railExtrude), railSusMat));
|
||||
// 하단 벽쪽 ㄴ자 (측면탭 11mm + 코킹립 10mm)
|
||||
const btW = new THREE.Shape();
|
||||
btW.moveTo(0, sw + rt);
|
||||
btW.lineTo(m1b + tT, sw + rt);
|
||||
btW.lineTo(m1b + tT, sw + rt + m1a);
|
||||
btW.lineTo(m1b, sw + rt + m1a);
|
||||
btW.lineTo(m1b, sw + rt + tT);
|
||||
btW.lineTo(0, sw + rt + tT);
|
||||
btW.lineTo(0, sw + rt);
|
||||
grp.add(new THREE.Mesh(new THREE.ExtrudeGeometry(btW, railExtrude), railSusMat));
|
||||
|
||||
// 상단 트림 (X=rw 외면) — cover + J-hook (대칭)
|
||||
const tt = new THREE.Shape();
|
||||
tt.moveTo(rw + tT, sw + rt + tT);
|
||||
tt.lineTo(rw + tT, -lp);
|
||||
tt.lineTo(rw - m1d, -lp);
|
||||
tt.lineTo(rw - m1d, -lp + m1e);
|
||||
tt.lineTo(rw - m1d + m1f, -lp + m1e);
|
||||
tt.lineTo(rw - m1d + m1f, -lp + m1e + m1g);
|
||||
tt.lineTo(rw - m1d + m1f - tT, -lp + m1e + m1g);
|
||||
tt.lineTo(rw - m1d + m1f - tT, -lp + m1e - tT);
|
||||
tt.lineTo(rw - m1d + tT, -lp + m1e - tT);
|
||||
tt.lineTo(rw - m1d + tT, -lp + tT);
|
||||
tt.lineTo(rw, -lp + tT);
|
||||
tt.lineTo(rw, sw + rt + tT);
|
||||
tt.lineTo(rw + tT, sw + rt + tT);
|
||||
grp.add(new THREE.Mesh(new THREE.ExtrudeGeometry(tt, railExtrude), railSusMat));
|
||||
// 상단 벽쪽 ㄴ자 (대칭)
|
||||
const ttW = new THREE.Shape();
|
||||
ttW.moveTo(rw, sw + rt);
|
||||
ttW.lineTo(rw - m1b - tT, sw + rt);
|
||||
ttW.lineTo(rw - m1b - tT, sw + rt + m1a);
|
||||
ttW.lineTo(rw - m1b, sw + rt + m1a);
|
||||
ttW.lineTo(rw - m1b, sw + rt + tT);
|
||||
ttW.lineTo(rw, sw + rt + tT);
|
||||
ttW.lineTo(rw, sw + rt);
|
||||
grp.add(new THREE.Mesh(new THREE.ExtrudeGeometry(ttW, railExtrude), railSusMat));
|
||||
|
||||
} else {
|
||||
// ====== 철재슬라트 가이드레일 (기존 C채널) ======
|
||||
const rl = g.lip;
|
||||
|
||||
Reference in New Issue
Block a user