feat(rebar): 현장타설 말뚝 · 다주형 코핑 형상과 철근 계산

- 현장타설 기둥·말뚝 형상(cast-in-place-shape)과 주철근·횡철근·커플러 계산(rebar/cast-in-place, cast-layout)
- 다주형 코핑 철근(multicol-coping), 기둥 높이 · 양단부 연장
- 철근표 요약 · 재료 수량 · 3D 뷰 연결과 삽도(cast-rebar-svg)
- 검사 기준 갱신과 회귀 테스트, 검증 스크립트 보관

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-11-06 13:15:01 +09:00
1 parent 3922b330d5
commit 2e0bfb6fc8
29 files changed
+1750 -71

No files matched your search

+8 -8
View File
@@ -10,18 +10,18 @@ const three = buildPier({ ...loadP1(), type: '3주형', columnCount: 3, copingLe
const count = (rows: ReturnType<typeof rebarSummary>['rows'], name: string) => rows.find((r) => r.name === name)!.count;
describe('다주형 철근 (2주형·3주형, 코핑철근.md §9)', () => {
it('2주형: C10 2 × 9 = 18; C9 and C11 3 each outside; 18 between (추천안, Q-K2)', () => {
it('2주형: H22 @300, six physical pieces per position', () => {
const rows = rebarSummary(two).rows;
expect(count(rows, 'C10')).toBe(18);
expect(count(rows, 'C9')).toBe(3);
expect(count(rows, 'C11')).toBe(3);
expect(count(rows, 'C9·C11 사이')).toBe(18);
expect(count(rows, 'C10')).toBe(18 * 6);
expect(count(rows, 'C9')).toBe(3 * 6);
expect(count(rows, 'C11')).toBe(3 * 6);
expect(count(rows, 'C9·C11 사이')).toBe(15 * 6);
});
it('3주형: C10 3 × 9 = 27; two gaps of 3 between', () => {
it('3주형: C10 27 positions and two gaps of three, each with six physical pieces', () => {
const rows = rebarSummary(three).rows;
expect(count(rows, 'C10')).toBe(27);
expect(count(rows, 'C9·C11 사이')).toBe(6);
expect(count(rows, 'C10')).toBe(27 * 6);
expect(count(rows, 'C9·C11 사이')).toBe(6 * 6);
});
it('column bars repeat per column: P1 230 × 2 and 230 × 3', () => {