From 856774da33d3e67ec7c343c7b7789a7a39bc4e46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Fri, 13 Mar 2026 21:41:14 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20[fire-shutter]=20=EC=85=94=ED=84=B0?= =?UTF-8?q?=EB=B0=95=EC=8A=A4=20=EC=B8=A1=EB=A9=B4=EB=8F=84=EB=A5=BC=20?= =?UTF-8?q?=EC=8B=A4=EC=A0=9C=20=EC=A0=88=EA=B3=A1=20=EA=B5=AC=EC=A1=B0?= =?UTF-8?q?=EB=A1=9C=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 단순 사각형 → L자형 실제 판재 구조 (후면/상판/전면/하판 4개 판) - 절곡도 기준 플랜지 접합부 표시 (20mm, 50mm, 15mm, 13mm, 17mm) - 전면판 높이(240mm)와 후면판 높이(380mm) 차이 반영 - 가이드레일 진입부 표시 (레일70, 100mm 올라옴) - 슬랫 출구 개방 영역 표시 - 치수선: 깊이, 전체높이, 전면높이, 하판폭, 레일폭 --- .../rd/fire-shutter-drawing/index.blade.php | 123 ++++++++++++++---- 1 file changed, 99 insertions(+), 24 deletions(-) diff --git a/resources/views/rd/fire-shutter-drawing/index.blade.php b/resources/views/rd/fire-shutter-drawing/index.blade.php index 985f4295..cf0bf42b 100644 --- a/resources/views/rd/fire-shutter-drawing/index.blade.php +++ b/resources/views/rd/fire-shutter-drawing/index.blade.php @@ -1218,26 +1218,73 @@ function renderSbFront() { function renderSbSide() { const b = S.sb; - const sc = Math.min(500 / b.depth, 600 / b.height); - const sd = b.depth * sc, sh = b.height * sc; + const p = PRODUCTS[S.productType]; + const D = b.depth, H = b.height; + const fH = p.sb.frontH; // 전면 높이 (screen:240, steel:410) + const sc = Math.min(480 / D, 520 / H); const pad = 80; - const svgW = sd + pad * 2 + 100, svgH = sh + pad * 2 + 60; - const ox = pad + 50, oy = pad; - const shaftR = (b.shaftDia / 2) * sc; - const shaftCx = ox + sd / 2; - const shaftCy = oy + sh * 0.45; - const rollR = shaftR + 20 * sc; + const sD = D*sc, sH = H*sc, sfH = fH*sc; + const svgW = sD + pad*2 + 150, svgH = sH + pad*2 + 100; + const ox = pad + 65, oy = pad + 30; + const vt = Math.max(5, (b.thickness||1.6)*sc*3); // 판 두께 (표시용 확대) + const bpW = Math.min(fH, D-50)*sc; // 하판 폭 (≒ frontH, 절곡도 기준 240mm) + const railW = (S.productType==='screen' ? 70 : 120)*sc; + const railUp = 100*sc; + const shaftR = (b.shaftDia/2)*sc; + // 샤프트: 상판~하판 사이 공간 중앙에 배치 + const shaftCx = ox + sD*0.48; + const shaftCy = oy + sfH*0.5; + const rollR = shaftR + 20*sc; + const pf='#4b5563', ps='#6b7280', ff='#374151'; + + // 절곡 치수 (절곡도 기준) + const f20=20*sc, f50=50*sc, f55=55*sc, f15=15*sc, f13=13*sc, f17=17*sc; const svg = ` - 셔터박스 측면 단면도 (Side Cross-Section) - - - + 셔터박스 측면 단면도 (Side Cross-Section) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 레일 ${Math.round(railW/sc)} + ↑ 100mm 진입 + + ${b.showShaft ? ` ` : ''} - ${b.showSlatRoll ? ` ${Array.from({length:5},(_,i) => { @@ -1245,19 +1292,47 @@ function renderSbSide() { return r < rollR ? `` : ''; }).join('')} ` : ''} - ${b.showMotor ? ` - - M + + M ` : ''} - - - - - ↓ 슬랫 - - 깊이 ${b.depth} mm - ${b.height} mm + + + + ↓ 슬랫 + + 개방 + + + + + + + 깊이 ${D} mm + + + + + ${H} mm + + + + + ${fH} mm + + + + + 하판 ${Math.round(bpW/sc)} mm + + + + + ${Math.round(railW/sc)} mm + + + 벽측 (후면) + 개구부 (전면) `; displaySvg(svg);