From f793a69d3fff25c9639942c3ef3015274de8fa8f Mon Sep 17 00:00:00 2001 From: ypshim Date: Mon, 26 Oct 2026 18:08:16 +0900 Subject: [PATCH] =?UTF-8?q?fix(rebar):=20=ED=99=95=EB=8C=80=EA=B8=B0?= =?UTF-8?q?=EC=B4=88=20=EB=8B=A8=EB=A9=B4=20B6=20=EB=8B=A4=EB=A6=AC=20?= =?UTF-8?q?=EC=A3=BC=EC=84=9D=EC=9D=84=20=EC=9A=B0=EC=B8=A1=20=EC=97=AC?= =?UTF-8?q?=EB=B0=B1=EC=9C=BC=EB=A1=9C,=20=EA=B2=A9=EC=9E=90=20=EC=B9=98?= =?UTF-8?q?=EC=88=98=20=EA=B8=80=EC=9E=90=EB=A5=BC=20=EC=B9=98=EC=88=98?= =?UTF-8?q?=EC=84=A0=20=EC=9C=84=EB=A1=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - B6 다리 주석 "B6 다리 → B5 / 높이 1723"을 우측 여백에 두고 B6 다리 끝까지 지시선을 그림 - 격자 치수 "61@125=7625"를 치수선 위로 옮겨 하단 지시선과 겹치지 않게 함 Co-Authored-By: Claude Haiku 5.5 --- src/view/footing-section-svg.ts | 9 ++++++--- tests/footing-section-svg.test.ts | 3 ++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/view/footing-section-svg.ts b/src/view/footing-section-svg.ts index 7cae727..f041cdf 100644 --- a/src/view/footing-section-svg.ts +++ b/src/view/footing-section-svg.ts @@ -73,8 +73,6 @@ export function footingSectionSvg(model: PierModel): string { parts.push(line('b5', 'B6', xa, xb, y(z.B68), COLOR.b5, 1.2)); parts.push(line('b5', 'B7', xa, xb, y(z.B7), COLOR.b5, 1.2)); parts.push(line('b5', 'B8', xa, xb, y(z.B68), COLOR.b5, 1.2)); - // B6 leg note: the leg runs from the 하면 1단 up to the B5 height (B6 다리 → B5 높이). - parts.push(text(cx, (y(z.B5) + y(z.B68)) / 2 - 3, `B6 다리 → B5 높이 ${(z.B5 - z.B68).toFixed(0)}`, 'middle', COLOR.b5)); // B1–B4 on the grid along W (교각축, orange points): odd grid positions carry B1, B2 and B3; even carry B4 (as bottomBars). const xs = gridPositions(W, fs, 'sAxis'); @@ -122,7 +120,7 @@ export function footingSectionSvg(model: PierModel): string { parts.push(text(x(W / 2) + 5, yDim + 14, `${fs.cSide}`, 'start', COLOR.dim)); parts.push(text(x(-W / 2 + fs.cSide) + 2, yDim + 14, `${g.e.toFixed(1)}`, 'start', COLOR.dim)); parts.push(text(x(W / 2 - fs.cSide) - 2, yDim + 14, `${g.e.toFixed(1)}`, 'end', COLOR.dim)); - parts.push(text(cx, yDim + 14, `${g.n}@${fs.sAxis}=${g.G}`, 'middle', COLOR.dim)); + parts.push(text(cx, yDim - 6, `${g.n}@${fs.sAxis}=${g.G}`, 'middle', COLOR.dim)); parts.push(text(cx, 20, `교각축 직각 단면 · 폭 ${W.toFixed(0)}`, 'middle', '#1F2937')); const xr = X0 + W_PX + 18; parts.push(``); @@ -130,6 +128,11 @@ export function footingSectionSvg(model: PierModel): string { parts.push(text(xr + 6, y(H) + 12, `${fs.cTop}`, 'start', COLOR.dim)); parts.push(text(xr + 6, (y(H) + y(0)) / 2, `${levels - 1}@${fs.sV}=${(levels - 1) * fs.sV}`, 'start', COLOR.dim)); parts.push(text(xr + 6, y(0) - 4, `${fs.cBottom}`, 'start', COLOR.dim)); + // B6 leg note in the right margin, with a leader to the B6 leg's end at the B6 height (B6 다리 → B5 높이, from the 하면 1단 up to B5). + const yNote = y(H) - 14; + parts.push(``); + parts.push(text(xr + 6, yNote, 'B6 다리 → B5', 'start', COLOR.b5)); + parts.push(text(xr + 6, yNote + 12, `높이 ${(z.B5 - z.B68).toFixed(0)}`, 'start', COLOR.b5)); // Bubbles outside the outline, spread apart, each with a leader to its bar (the leader carries the same data-bar, so it highlights too). const bubble = (name: string, bx: number, by: number, tx: number, ty: number) => { diff --git a/tests/footing-section-svg.test.ts b/tests/footing-section-svg.test.ts index ad417b0..b3c1e3a 100644 --- a/tests/footing-section-svg.test.ts +++ b/tests/footing-section-svg.test.ts @@ -60,7 +60,8 @@ describe('확대기초 교각축 직각 단면 (폭 W) (승인 2026-10-26, 추 }); it('2단계: B6 다리 주석 1723, 범례 5항목, 기둥과 말뚝 맥락 표시, 탭 4개 중 첫 탭만 작동', () => { - expect(svg).toContain('B6 다리 → B5 높이 1723'); + expect(svg).toContain('B6 다리 → B5'); + expect(svg).toContain('높이 1723'); for (const label of ['주철근 (B5–B8)', '직각·보조 (B1–B4)', '전단·띠 (B9)', '측면 수평 (B10-1 · B10-2)', '조립 (B11·B12)']) expect(svg).toContain(label); expect(svg).toContain('class="column"'); expect(svg.split('class="pile"').length - 1).toBeGreaterThan(0);