From c40c58d27feaf43c4c392109151034f25b38866b Mon Sep 17 00:00:00 2001 From: ypshim Date: Mon, 26 Oct 2026 17:01:14 +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=EC=B2=A0=EA=B7=BC=ED=91=9C=20=EA=B0=84=EA=B2=A9?= =?UTF-8?q?=C2=B7=EC=8B=A4=EA=B0=84=EA=B2=A9=EC=9D=84=20=EA=B2=A9=EC=9E=90?= =?UTF-8?q?=20=EC=8B=A4=EA=B0=84=EA=B2=A9=20s=EC=99=80=20s=5Fv=EC=97=90=20?= =?UTF-8?q?=EC=97=B0=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - B1–B8: 간격 2s, 실간격 s (cycle 2·4·6·8), 실간격 2s (B1·B3·B5·B7) - B9: 간격 4s, 실간격 2s (엇갈림) · B11·B12: 간격 4s - B10-1·B10-2: 간격·실간격 = s_v - 근거: s 또는 s_v가 기본값과 다르면 '입력', 같으면 '기본값' Co-Authored-By: Claude Haiku 5.5 --- src/core/rebar/summary.ts | 13 ++++++++++++- tests/footing-rebar-settings.test.ts | 15 +++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/core/rebar/summary.ts b/src/core/rebar/summary.ts index a0f52ee..89f802a 100644 --- a/src/core/rebar/summary.ts +++ b/src/core/rebar/summary.ts @@ -2,7 +2,7 @@ import type { PierModel } from '../geometry'; import { barLength, bearingBlockRebar, DEFAULT_BLOCK_REBAR, totals } from './bearing-block'; import { DEFAULT_COPING_REBAR } from './coping-settings'; import { DEFAULT_COLUMN_REBAR } from './column-settings'; -import type { FootingRebarSettings } from './footing-settings'; +import { DEFAULT_FOOTING_REBAR, type FootingRebarSettings } from './footing-settings'; import { bottomPiece, topBarLength, widthLayout, topSplicePieces } from './coping-main'; import { shearBars, shearBarsMulti, copingSideBars, SIDE_HOOK_LEG, c14Bars, c14Length, stairBars, stepDevLength, undersideAt, shearULength, capLength, PIECES_PER_POSITION } from './coping'; import { sideRowLevels } from '../coping-geom'; @@ -160,6 +160,17 @@ export function linkedSpacing(name: string, model: PierModel): Pick { + const base = rebarSummary(buildPier(loadP1())).rows; + const b2 = base.find((r) => r.name === 'B2')!; + expect([b2.spacing, b2.actual, b2.basis]).toEqual(['250', '125', 'default']); + 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 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')!; + expect([b1s.spacing, b1s.actual]).toEqual(['300', '300']); + expect(rows.find((r) => r.name === 'B10-1')!.basis).toBe('default'); + }); + it('the 조립 단 배수 n reaches the assembly levels', () => { const H = 2000; const base = assemblyJs(H, DEFAULT_FOOTING_REBAR);