From a3213859ffbe74b2dabe1ca36f2f0eb46b627aea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Mon, 16 Mar 2026 14:10:55 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20[fire-shutter]=20=EA=B0=80=EC=9D=B4?= =?UTF-8?q?=EB=93=9C=EB=A0=88=EC=9D=BC=20=ED=8F=89=EB=A9=B4=EB=8F=84=20?= =?UTF-8?q?=E2=91=A3=20=EB=B2=BD=EC=97=B0=ED=98=95=EC=9D=B4=20=EB=B3=B8?= =?UTF-8?q?=EC=B2=B4=20=EA=B0=9C=EA=B5=AC=EB=B6=80=EB=A1=9C=20=EC=A7=84?= =?UTF-8?q?=EC=9E=85=ED=95=98=EB=8A=94=20=ED=98=95=ED=83=9C=EB=A1=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 본체(③) 좌측벽을 ① 마감재 좌측에 밀착 배치 - 좌측벽 개구부 생성 (13.5~58.5mm 구간 열림) - ④ 플랜지가 본체 좌측 개구부로 진입하는 구조로 변경 - ③ 본체 라벨 추가 --- .../rd/fire-shutter-drawing/index.blade.php | 78 +++++++++++-------- 1 file changed, 45 insertions(+), 33 deletions(-) diff --git a/resources/views/rd/fire-shutter-drawing/index.blade.php b/resources/views/rd/fire-shutter-drawing/index.blade.php index 77ec83fb..ffee72fa 100644 --- a/resources/views/rd/fire-shutter-drawing/index.blade.php +++ b/resources/views/rd/fire-shutter-drawing/index.blade.php @@ -1057,14 +1057,14 @@ function renderGrCross() { // ====== 철재스라트: 가이드레일 평면도 (130mm × 75mm 결합도) ====== // LEFT = 방화벽(벽쪽), RIGHT = 개구부(실내쪽, 슬랫 통과) - // ① 마감재 SUS 1.2T (빨간색) - ② 바깥을 감싸는 외피, 상하 2장 + // ① 마감재 SUS 1.2T (빨간색) - 바깥을 감싸는 외피, 상하 2장 // 상단: 10←lip + 13↓tab + 120→body + 25↓ + 15← // 하단: 10←lip + 13↑tab + 120→body + 25↑ + 내부스텝(19← + 14↓ + 15←) - // ② 본체 EGI 1.55T (회색) - 메인 C채널, 개구부가 RIGHT - // 외형: 90mm(가로) × 72mm(세로), 좌측벽 72mm, 상/하단 플랜지 90mm + // ③ 본체 EGI 1.55T (회색) - 메인 C채널, 개구부가 RIGHT + // 외형: 90mm(가로) × 72mm(세로), 좌측벽에 개구부(④ 진입용) // 우측 상/하부 립 각 21mm, 내부 계단구조 - // ③ C형 EGI 1.55T (주황색) - ② 내부 좌측 상단에 위치, 30-45-30 ㄷ자(우측열림) - // ④ 벽연형 EGI 1.55T (갈색) - ② 좌측에 위치, 벽과 연결, 30-45-30 ㄷ자(우측열림) + // ④ 벽연형 EGI 1.55T (갈색) - ㄷ자(우측열림), 플랜지가 ③ 좌측 개구부로 진입 + // 벽에 부착, 30-45-30, 세로 중앙 정렬 { const sc = 4; // px per mm (확대하여 철판 비율 현실적) const t = g.thickness * sc; // 1.55mm → 6.2px (EGI) @@ -1121,37 +1121,43 @@ function renderGrCross() { const P = []; // SVG 부재 요소 배열 // ══════════════════════════════════════════ - // ══════════════════════════════════════════ - // ④ C형 보강 EGI 1.55T (갈색, ㄷ자 30-45-30 우측열림) - // 벽 우측면에 부착, 세로 중앙 정렬 - // ══════════════════════════════════════════ - const w4cy = by + (b2h - w4height) / 2; - P.push(``); - P.push(``); - P.push(``); - - // ══════════════════════════════════════════ - // ② 본체 EGI 1.55T (15세그먼트 절곡, 체이닝 좌표) + // ② 본체 EGI 1.55T (절곡 프로파일, 체이닝 좌표) // 프로파일 좌표: (0,0)=좌상단, 90×72mm - // 시작/끝: (0,60), Seg1·Seg15(10←) 립 겹침 + // 좌측벽에 개구부가 있어 ④가 진입하는 구조 // ══════════════════════════════════════════ + // ④ 세로 중앙 정렬 위치 (본체 좌표계 기준) + const w4TopInBody = (72 - 45) / 2; // 13.5mm: ④ 상단 (본체 기준) + const w4BotInBody = w4TopInBody + 45; // 58.5mm: ④ 하단 (본체 기준) { - const ox2 = w4x + w4depth + (10 + 0.75) * sc; // ② 좌측벽 = ④ 끝 + 10mm + 0.75(반두께) + const ox2 = bx; // ② 좌측벽 = ① 마감재 body 좌측 (④가 개구부로 진입) const oy2 = by; // ② 상단 const c = cBody, s = '#94a3b8'; // 프로파일 좌표 → SVG 좌표 변환 function r(x,y,w,h,op) { P.push(``); } - // 벤드포인트 체이닝 (프로파일 좌표 mm 단위) - // B0=(0,60) → Seg1(10→) → (10,60): 립 우측(채널 안쪽) + // ── 좌측벽: ④ 개구부로 인해 상/하 분리 ── + // 좌측벽 상부: (0,0) → (0,13.5) — ④ 위쪽 + r(0, 0, 1.55, w4TopInBody); + // 좌측벽 하부: (0,58.5) → (0,72) — ④ 아래쪽 + r(0, w4BotInBody, 1.55, 72 - w4BotInBody); + // 립: (0,60) → (10,60) — 좌측 립 (하부 벽 구간 내) r(0, 60-0.75, 10, 1.55); - // B0=(0,60) → Seg2(60↑) → (0,0): 좌측벽 상부 - r(0, 0, 1.55, 60); + r(0, 60, 10, 1.55); + + // ── 상단/하단 플랜지 ── // (0,0) → Seg3(90→) → (90,0): 상단 플랜지 r(0, 0, 90, 1.55); + // (90,72) → Seg13(90←) → (0,72): 하단 플랜지 + r(0, 72-1.55, 90, 1.55); + + // ── 우측 립 ── // (90,0) → Seg4(21↓) → (90,21): 상부 립 r(90-1.55, 0, 1.55, 21); + // (90,51) → Seg12(21↓) → (90,72): 하부 립 + r(90-1.55, 51, 1.55, 21); + + // ── 내부 계단 구조 ── // (90,21) → Seg5(15←) → (75,21): 스텝 r(75, 21, 15, 1.55, 1); // (75,21) → Seg6(15↓) → (75,36): 스텝 @@ -1166,16 +1172,20 @@ function r(x,y,w,h,op) { r(12, 21, 1.55, 30, 1); // (12,51) → Seg11(78→) → (90,51): 내부 선반 r(12, 51, 78, 1.55); - // (90,51) → Seg12(21↓) → (90,72): 하부 립 - r(90-1.55, 51, 1.55, 21); - // (90,72) → Seg13(90←) → (0,72): 하단 플랜지 - r(0, 72-1.55, 90, 1.55); - // (0,72) → Seg14(12↑) → (0,60): 좌측벽 하부 - r(0, 60, 1.55, 12); - // (0,60) → Seg15(10→) → (10,60): 끝 립 (Seg1과 겹침) - r(0, 60, 10, 1.55); } + // ══════════════════════════════════════════ + // ④ 벽연형 EGI 1.55T (갈색, ㄷ자 30-45-30 우측열림) + // 벽 우측면에 부착, 플랜지가 본체 좌측 개구부로 진입 + // ══════════════════════════════════════════ + const w4cy = by + w4TopInBody * sc; + // 좌측 벽 (④ 좌벽) + P.push(``); + // 상단 플랜지 — 본체 개구부로 진입 (w4x → w4x + w4depth) + P.push(``); + // 하단 플랜지 — 본체 개구부로 진입 + P.push(``); + // ══════════════════════════════════════════ // ① 마감재 SUS 1.2T (빨간색) — 상단 장 // 경로: 10←lip + 13↓tab + 120→body + 25↓ + 15← @@ -1263,9 +1273,11 @@ function r(x,y,w,h,op) { const lb1x = bx + m1body / 2, lb1y = tTop - 12; labels += ``; labels += ``; - // (② 라벨 — 제거) - // (③ C형 라벨 — 생략) - // ④ C형 보강 라벨 + // ③ 본체 라벨 (본체 내부 상단 중앙) + const lb3x = bx + 45 * sc, lb3y = by + 10 * sc; + labels += ``; + labels += ``; + // ④ 벽연형 라벨 const lb4x = w4x + w4depth / 2, lb4y = w4cy + w4height / 2; labels += ``; labels += ``;