fix: [fire-shutter] 연기차단재 1개로 변경 및 슬롯 위치 배치

- 연기차단재: 2개→1개, 사이드월→슬롯 개구부(립 팁 사이) 위치로 이동
- 클립: 사각형→L형 브라켓으로 변경, 사이드월 내면에 부착
- 슬랫 라인을 채널 전체 관통으로 수정
This commit is contained in:
김보곤
2026-03-09 18:52:48 +09:00
parent d58cf44a64
commit acd24ca154

View File

@@ -791,33 +791,40 @@ function renderGrCross() {
// 방화벽 (좌측 = 벽쪽)
const wallX = pad;
// 연기차단재 — 채널 내 상하벽에 부착 (가로 배치)
const sealX = bx + bodyD - lp - t - sealD - 2;
// 연기차단재 — 슬롯 개구부 위치 (립 팁 사이, 1개만)
// 참조 스케치 기준: 상단 립 팁에 부착, 슬롯 안쪽으로 돌출
const slotGapPx = fw - 2 * fl; // 슬롯 갭 (10mm → 40px)
let sealSvg = '';
if (g.showSeal) {
sealSvg += `<rect x="${sealX}" y="${by+t}" width="${sealD}" height="${sealT}" fill="#f97316" opacity="0.7" rx="1"/>`;
sealSvg += `<rect x="${sealX}" y="${by+fw-t-sealT}" width="${sealD}" height="${sealT}" fill="#f97316" opacity="0.7" rx="1"/>`;
const sealW = Math.max(sealT, 4); // 차단재 폭 (세로 방향)
const sealH = lp * 0.7; // 차단재 깊이 (가로 방향, 립 깊이의 70%)
const sealPosX = bx + bodyD - lp + 2; // 립 안쪽 시작점
const sealPosY = by + fl - sealW / 2; // 상단 립 팁 위치
sealSvg += `<rect x="${sealPosX}" y="${sealPosY}" width="${sealH}" height="${sealW}" fill="#f97316" opacity="0.8" rx="2"/>`;
if (g.showDim) {
sealSvg += `<text x="${sealX+sealD/2}" y="${by+t+sealT+10}" fill="#f97316" font-size="8" font-weight="700" text-anchor="middle" font-family="Pretendard">연기차단재</text>`;
sealSvg += `<text x="${sealPosX + sealH + 3}" y="${sealPosY + sealW / 2 + 3}" fill="#f97316" font-size="7" font-weight="700" text-anchor="start" font-family="Pretendard">차단재</text>`;
}
}
// 슬랫 — 채널 중심 수평선
// 슬랫 — 슬롯 통과 수평선 (립 사이)
const slatY = by + fw / 2 - slatT / 2;
const slatX1 = bx + t + 2;
const slatX2 = bx + bodyD - lp - t - 2;
const slatX2 = bx + bodyD - t - 2; // 슬랫은 채널 전체를 관통
// ① 클립 (채널 내부, 사이드월 내면에 부착 — 참조 도면 기준)
// 클립은 개구부 근처 채널 넓은 공간에 L형 브라켓으로 위치
const clipSize = 15 * sc; // 15mm 클립 크기
const clipT = Math.max(t, 3); // 클립 두께
const clipX = bx + bodyD - lp - t - clipSize - 4; // 개구부 근처 (립 안쪽)
const clipY1 = by + t + 4; // 상단 사이드월 내면
const clipY2 = by + fw - t - clipSize - 4; // 단 사이드월 내면
// ① 클립 (채널 내부, 사이드월 내면 — L형 브라켓)
// 참조 도면 기준: 개구부 근처 사이드월에 부착된 작은 브라켓
const clipArmLen = 10 * sc; // 10mm 돌출
const clipLegLen = 15 * sc; // 15mm 사이드월 따라
const clipT = Math.max(t, 2);
const clipX1 = bx + bodyD - lp - t - 2; // 립 내면 근처
// 클립 (사이드월 내면에서 아래로 L형)
const clipY1 = by + t + 2;
// 하단 클립 (사이드월 내면에서 위로 L형)
const clipY2 = by + fw - t - 2;
const clipSvg = `
<rect x="${clipX}" y="${clipY1}" width="${clipSize}" height="${clipSize}" fill="none" stroke="#8b5cf6" stroke-width="${clipT}" opacity="0.5" rx="1"/>
<rect x="${clipX}" y="${clipY2}" width="${clipSize}" height="${clipSize}" fill="none" stroke="#8b5cf6" stroke-width="${clipT}" opacity="0.5" rx="1"/>
${g.showDim ? `<text x="${clipX+clipSize+4}" y="${clipY1+clipSize/2+3}" fill="#8b5cf6" font-size="7" font-weight="700" text-anchor="start" font-family="Pretendard"></text>` : ''}`;
<path d="M${clipX1},${clipY1} L${clipX1},${clipY1+clipLegLen} L${clipX1-clipArmLen},${clipY1+clipLegLen} L${clipX1-clipArmLen},${clipY1+clipLegLen-clipT} L${clipX1-clipT},${clipY1+clipLegLen-clipT} L${clipX1-clipT},${clipY1} Z" fill="#8b5cf6" opacity="0.4"/>
<path d="M${clipX1},${clipY2} L${clipX1},${clipY2-clipLegLen} L${clipX1-clipArmLen},${clipY2-clipLegLen} L${clipX1-clipArmLen},${clipY2-clipLegLen+clipT} L${clipX1-clipT},${clipY2-clipLegLen+clipT} L${clipX1-clipT},${clipY2} Z" fill="#8b5cf6" opacity="0.4"/>
${g.showDim ? `<text x="${clipX1-clipArmLen-2}" y="${clipY1+clipLegLen/2+3}" fill="#8b5cf6" font-size="7" font-weight="700" text-anchor="end" font-family="Pretendard"></text>` : ''}`;
// 치수선
let dimLines = '';