feat(rebar): 격자 실간격을 교각축(B1–B4·B9)과 교각축 직각(B5–B8·B11·B12)으로 나눠 입력

- footing-settings: s → sAxis(교각축) · sPerp(교각축 직각), 범위는 동일 (100–150)
- grid·gridPositions가 방향 키를 받음. B1–B4 grid는 sAxis, B5–B8 grid는 sPerp, B9 행·열은 sAxis, B11·B12는 sPerp
- 철근표 간격·실간격과 근거가 방향별 값을 씀 (B12는 교각축 직각 값, 승인 2026-10-26)
- 3D 확대기초 그림의 위치도 방향별 값을 씀
- 패널 입력 두 칸으로 분리

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-10-26 17:10:31 +09:00
1 parent c40c58d27f
commit ddd6d55a72
7 files changed
+59 -32

No files matched your search

+17 -3
View File
@@ -20,8 +20,8 @@ describe('확대기초 배근 입력 (승인 2026-10-26, 시안 ③ 확대기초
});
it('the grid spacing s reaches the grid positions and the rebar table', () => {
const m = buildPier({ ...loadP1(), footingRebar: { s: 150 } });
expect(m.footingRebar.s).toBe(150);
const m = buildPier({ ...loadP1(), footingRebar: { sAxis: 150 } });
expect(m.footingRebar.sAxis).toBe(150);
const xs = gridPositions(8000, m.footingRebar);
expect(xs[1] - xs[0]).toBeCloseTo(150, 6);
const b4 = rebarSummary(m).rows.find((r) => r.name === 'B4')!;
@@ -36,7 +36,7 @@ describe('확대기초 배근 입력 (승인 2026-10-26, 시안 ③ 확대기초
const b10 = base.find((r) => r.name === 'B10-1')!;
expect([b10.spacing, b10.basis]).toEqual(['200', 'default']);
const rows = rebarSummary(buildPier({ ...loadP1(), footingRebar: { s: 150 } })).rows;
const rows = rebarSummary(buildPier({ ...loadP1(), footingRebar: { sAxis: 150 } })).rows;
const b2s = rows.find((r) => r.name === 'B2')!;
expect([b2s.spacing, b2s.actual, b2s.basis]).toEqual(['300', '150', 'input']);
const b1s = rows.find((r) => r.name === 'B1')!;
@@ -44,6 +44,20 @@ describe('확대기초 배근 입력 (승인 2026-10-26, 시안 ③ 확대기초
expect(rows.find((r) => r.name === 'B10-1')!.basis).toBe('default');
});
it('교각축 직각 값은 B5–B8·B11·B12에만, 교각축 값은 B1–B4·B9에 적용 (승인 2026-10-26)', () => {
const rows = rebarSummary(buildPier({ ...loadP1(), footingRebar: { sPerp: 150 } })).rows;
const b5 = rows.find((r) => r.name === 'B5')!;
expect([b5.spacing, b5.basis]).toEqual(['300', 'input']);
const b12 = rows.find((r) => r.name === 'B12')!;
expect([b12.spacing, b12.basis]).toEqual(['600 (4s)', 'input']);
expect(rows.find((r) => r.name === 'B1')!.basis).toBe('default');
expect(rows.find((r) => r.name === 'B9')!.basis).toBe('default');
const rowsAxis = rebarSummary(buildPier({ ...loadP1(), footingRebar: { sAxis: 150 } })).rows;
expect(rowsAxis.find((r) => r.name === 'B9')!.spacing).toBe('600 (4s)');
expect(rowsAxis.find((r) => r.name === 'B5')!.basis).toBe('default');
});
it('the 조립 단 배수 n reaches the assembly levels', () => {
const H = 2000;
const base = assemblyJs(H, DEFAULT_FOOTING_REBAR);
+1 -1
View File
@@ -120,7 +120,7 @@ describe('확대기초 배근도 재현 (확대기초철근 (1).md §13)', () =>
});
it('variables: W 8000 with s 150 → 50 grid steps, e 150, B4 26 / B2 25; W 12000 → 92 steps, e 150', () => {
const g = grid(8000, { ...DEFAULT_FOOTING_REBAR, s: 150 });
const g = grid(8000, { ...DEFAULT_FOOTING_REBAR, sAxis: 150 });
expect(g.n).toBe(50);
expect(g.e).toBeCloseTo(150, 6);
expect(grid(12000).n).toBe(92);