From 3fe94fa0e12921da69917015e435e894616bdfcd Mon Sep 17 00:00:00 2001 From: ypshim Date: Mon, 26 Oct 2026 18:12:59 +0900 Subject: [PATCH] =?UTF-8?q?feat(rebar):=20=ED=99=95=EB=8C=80=EA=B8=B0?= =?UTF-8?q?=EC=B4=88=20=EB=8B=A8=EB=A9=B4=20=EC=B5=9C=EC=99=B8=EC=B8=A1=20?= =?UTF-8?q?=EC=97=B4=EC=97=90=20B1=E2=80=93B4=20=EC=97=B0=EC=9E=A5?= =?UTF-8?q?=EC=84=A0=EA=B3=BC=20=EC=B8=A1=EB=A9=B4=20=ED=94=BC=EB=B3=B5=20?= =?UTF-8?q?=EB=8B=A4=EB=A6=AC=EC=84=A0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 최외측 두 열에 B1·B2·B3·B4 점을 모두 표시 (빠진 점은 'ext'로 추가, 표 개수 불변) - 상단(B1)과 하단(B2·B4) 연장선을 측면 피복 c_s까지 이음 - 측면 피복선에 B2 다리선을 하면 1단에서 B1 높이까지 그림 - 테스트: 다리선 2개, 연장 표시 존재, 기존 개수 테스트 유지 Co-Authored-By: Claude Haiku 5.5 --- src/view/footing-section-svg.ts | 18 ++++++++++++++++++ tests/footing-section-svg.test.ts | 5 +++++ 2 files changed, 23 insertions(+) diff --git a/src/view/footing-section-svg.ts b/src/view/footing-section-svg.ts index f041cdf..1bc772e 100644 --- a/src/view/footing-section-svg.ts +++ b/src/view/footing-section-svg.ts @@ -87,6 +87,24 @@ export function footingSectionSvg(model: PierModel): string { } }); + // Outermost columns (승인 2026-10-26, 추천): B1·B2·B3·B4 all sit in the first and last grid column (확대기초철근 (1).md §3, §5). + // The missing ones are drawn as 'ext' points (they do not change the table counts). Their top (B1) and bottom (B2·B4) runs extend + // to the side cover c_s, and a leg line at the cover runs from the 하면 1단 (B2) up to the B1 height. + const xSideL = x(-W / 2 + fs.cSide); + const xSideR = x(W / 2 - fs.cSide); + const last = xs.length - 1; + for (const i of [0, last]) { + const drawnHere = i % 2 === 1 ? ['B1', 'B2', 'B3'] : ['B4']; + const xx = x(xs[i]); + for (const [name, zz] of [['B1', z.B1], ['B2', z.B24], ['B3', z.B3], ['B4', z.B24]] as const) { + if (!drawnHere.includes(name)) parts.push(dot('ext', name, xx, y(zz), COLOR.b14)); + } + const xSide = i === 0 ? xSideL : xSideR; + parts.push(line('ext', 'B1', xx, xSide, y(z.B1), COLOR.b14, 1)); + parts.push(line('ext', 'B2', xx, xSide, y(z.B24), COLOR.b14, 1)); + parts.push(vline('leg', 'B2', xSide, y(z.B1), y(z.B24), COLOR.b14)); + } + // B9: one purple vertical line per row along W (the rows of b9Bars). const b9 = b9Bars(L, W, [], 2000, fs); for (const n of [...new Set(b9.bars.map((b) => b.n))]) parts.push(vline('b9', 'B9', x(n), y(z.B24), y(z.B5), COLOR.b9)); diff --git a/tests/footing-section-svg.test.ts b/tests/footing-section-svg.test.ts index b3c1e3a..69071c6 100644 --- a/tests/footing-section-svg.test.ts +++ b/tests/footing-section-svg.test.ts @@ -66,4 +66,9 @@ describe('확대기초 교각축 직각 단면 (폭 W) (승인 2026-10-26, 추 expect(svg).toContain('class="column"'); expect(svg.split('class="pile"').length - 1).toBeGreaterThan(0); }); + + it('최외측 열: B1–B4 연장선과 측면 피복 다리선 (승인 2026-10-26)', () => { + expect(svg.split('class="leg"').length - 1).toBe(2); + expect(svg.split('class="ext"').length - 1).toBeGreaterThan(0); + }); });