From 222e2b2ae396897891a7e0eb0e67ca1792091c0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Wed, 11 Mar 2026 16:33:00 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20[drawing]=20=E2=91=A0=20=EB=A7=88?= =?UTF-8?q?=EA=B0=90=EC=9E=AC=20=EC=88=98=ED=8F=89=EB=A9=B4=20=EB=B0=A9?= =?UTF-8?q?=ED=96=A5=20=EB=B0=98=EC=A0=84=20=E2=80=94=20=EB=B2=BD=EC=AA=BD?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 수평면: 백월→개구부(우측) 에서 립→벽(좌측) 방향으로 반전 - 측면탭: 백월 좌측에서 립 끝(우측)으로 이동 - 랩+3단꺾임: 개구부쪽에서 벽쪽으로 이동, 접힘 방향 반전 - ①랩 라벨, ① 원숫자, 개구부 텍스트 위치 업데이트 --- .../rd/fire-shutter-drawing/index.blade.php | 61 +++++++++---------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/resources/views/rd/fire-shutter-drawing/index.blade.php b/resources/views/rd/fire-shutter-drawing/index.blade.php index 4bcc6a65..fbb4e7ae 100644 --- a/resources/views/rd/fire-shutter-drawing/index.blade.php +++ b/resources/views/rd/fire-shutter-drawing/index.blade.php @@ -770,7 +770,7 @@ function renderGrCross() { const lipEndX = swEndX + bLip; const by = pad; // 본체 상단 Y - const svgW = Math.max(lipEndX, bx + m1c) + pad + 160; + const svgW = lipEndX + pad + 160; const svgH = bOuterW + pad * 2 + 100; // ── 색상 정의 (부재별 명확 구분) ── @@ -837,44 +837,41 @@ function renderGrCross() { ``, ].join('\n'); - // ── ① 마감재 SUS 1.2T × 2장 (② 바깥을 감싸는 외피, 절곡: 10-11-110-30-15-15-15, 상하 대칭) ── - // ① 수평면 시작점 = ②백월 바깥 (①이 ②를 감싸므로 ② 좌측 바깥에서 시작) - const wallRight = pad + wallW; // 방화벽 우측면 X - const trimL1 = bx - t1; // ① 수평면 시작 = ② 백월 바깥 (①두께만큼 좌측) - const m1HEnd = trimL1 + m1c; // 수평면 우측 끝 X - const trimR = m1HEnd + t1; // 치수선용 우측 끝 (① 우측 끝) - const trimX2 = trimR; // 치수선용 + // ── ① 마감재 SUS 1.2T × 2장 (② 바깥을 감싸는 외피, 절곡: 코킹립10-측면탭11-수평면110-랩30-3단꺾임15×3, 상하 대칭) ── + // 수평면이 립(개구부) 영역에서 벽쪽(좌측)으로 펼쳐지는 구조 + // 측면탭(우측/립쪽) → 수평면(좌측으로 110mm) → 랩+3단꺾임(좌측/벽쪽) + const trimR1 = lipEndX; // ① 수평면 우측 끝 (② 립 끝) + const trimL1 = trimR1 - m1c; // ① 수평면 좌측 끝 (벽 방향, 110mm) + const trimX2 = trimR1; // 치수선용 우측 끝 // ①는 ② 바깥을 감싸는 구조 (겹침 없음) const tTop = by - t1; // 상단 ① 수평면 Y (② 상면 바깥) const tBot = by + bOuterW; // 하단 ① 수평면 Y (② 하면 바깥) - // 개구부쪽 3단 꺾임 좌표 (상단 기준) - const wrapX = m1HEnd - t1; // 랩 시작 X - const wrap1Y = tTop + t1 + m1d; // 랩 끝 Y - const step1X = wrapX - m1e; // 1단 끝 X - const step2Y = wrap1Y - m1f; // 2단 끝 Y - const step3X = step1X - m1g; // 3단 끝 X + // 벽쪽 랩+3단꺾임 좌표 (상단 기준) + const wrapX = trimL1; // 랩 X = 수평면 좌측 끝 + const wrap1Y = tTop + t1 + m1d; // 랩 하단 Y + const step2Y = wrap1Y - m1f; // 2단 상단 Y const trim1Svg = [ // ══════ 상단 ① 마감재 (② 상면 바깥을 감싸기) ══════ - // 측면탭: ② 백월 좌측을 따라 아래로 (② 내부 방향) - ``, - // 수평면: ② 상면 위를 덮음 (좌→우 110mm) + // 측면탭: ② 립 바깥에서 아래로 (개구부쪽, 우측) + ``, + // 수평면: 립 영역에서 벽 방향으로 110mm (우→좌) ``, - // 랩: 개구부쪽 아래로 30mm + // 랩: 벽쪽 끝에서 아래로 30mm ``, - // 3단 꺾임 - ``, - ``, - ``, + // 3단 꺾임 (벽쪽에서 우측/② 중심 방향으로 접힘) + ``, + ``, + ``, // ══════ 하단 ① 마감재 (② 하면 바깥을 감싸기, 거울상) ══════ - ``, + ``, ``, ``, - ``, - ``, - ``, + ``, + ``, + ``, ].join('\n'); // ── 연기차단재 (현재 비활성 — 위치 재조정 후 활성화 예정) ── @@ -906,8 +903,8 @@ function renderGrCross() { dimLines += `${g.width} mm`; // ② 플랜지 26mm (②의 립 끝 기준 라벨) dimLines += `②FL${g.flange}`; - // ① 랩 30mm (① 마감재 랩 위치 라벨) - dimLines += `①랩${m1d/sc}`; + // ① 랩 30mm (① 마감재 랩 위치 라벨, 벽쪽) + dimLines += `①랩${m1d/sc}`; // 슬롯 개구 (우측 중앙) dimLines += `슬롯${bSlot/sc}`; // 립 깊이 @@ -915,9 +912,9 @@ function renderGrCross() { // 두께 (하단, 120mm 치수선 아래) dimLines += `①t=${g.trimThick||1.2}(SUS) ②t=${g.thickness}(EGI)`; // 부재 번호 라벨 (참조 도면 기준 배치) - // ① 마감재: 우측 랩/플랜지 영역 (상단, 하단 각 1개) - dimLines += ``; - dimLines += ``; + // ① 마감재: 수평면 중앙 (상단, 하단 각 1개) + dimLines += ``; + dimLines += ``; // ② 가이드레일: 채널 내부 중앙 dimLines += ``; // ③ C형: 몸체(45mm) 중심 @@ -952,7 +949,7 @@ function renderGrCross() { ${g.showDim ? `슬랫 t=${g.slatThick}` : ''} - →개구부 + →개구부 ${dimLines} GUIDE RAIL — 스크린형 (①마감재 ②가이드레일 ③C형 ④D형) `;