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); + }); });