feat(rebar): 확대기초 단면 최외측 열에 B1–B4 연장선과 측면 피복 다리선 추가

- 최외측 두 열에 B1·B2·B3·B4 점을 모두 표시 (빠진 점은 'ext'로 추가, 표 개수 불변)
- 상단(B1)과 하단(B2·B4) 연장선을 측면 피복 c_s까지 이음
- 측면 피복선에 B2 다리선을 하면 1단에서 B1 높이까지 그림
- 테스트: 다리선 2개, 연장 표시 존재, 기존 개수 테스트 유지

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-10-26 18:12:59 +09:00
1 parent f793a69d3f
commit 3fe94fa0e1
2 files changed
+23

No files matched your search

+18
View File
@@ -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));
+5
View File
@@ -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);
});
});