fix: [fire-shutter] 연기차단재 1개로 변경 및 슬롯 위치 배치
- 연기차단재: 2개→1개, 사이드월→슬롯 개구부(립 팁 사이) 위치로 이동 - 클립: 사각형→L형 브라켓으로 변경, 사이드월 내면에 부착 - 슬랫 라인을 채널 전체 관통으로 수정
This commit is contained in:
@@ -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 = '';
|
||||
|
||||
Reference in New Issue
Block a user