feat(rebar): 단면·폐합 section with the top-row and side-row chains and bar-group bubbles

- Top row (C1–C8) spacing along the 교축 from chainDims, between the coping's
  two long edges (±B/2).
- Side rows (C12·C13) along the EL, from the coping top EL down to the lowest
  side bar.
- One bubble per bar group cut at the station, with a leader to its bars.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-10-26 15:05:37 +09:00
1 parent 41c1ecd340
commit d5bf02e36b
3 files changed
+77 -19

No files matched your search

+6 -5
View File
@@ -34,11 +34,12 @@ describe('코핑 배근 정면 · 단면 (승인 2026-10-26)', () => {
});
describe('단면 · 폐합 글자 겹침 (승인 2026-10-26)', () => {
it('writes each bar name once, and each spot once', () => {
const svg = copingSectionSvg(scene.records, 6);
const labels = (svg.match(/<text /g) ?? []).length;
const names = new Set((svg.match(/font-size="120"[^>]*>(C\d+)</g) ?? []).map((s) => s.replace(/.*>/, '')));
expect(labels).toBe(names.size);
it('writes each bubble label once', () => {
const svg = copingSectionSvg(scene.records, 6, model.copingRefTop, model.copingB * 1000);
// A bubble is drawn for each group that is cut at this station, and only once.
for (const label of ['C1–6', 'C12·13', 'C10', 'C7·8', 'C14', 'C16']) {
expect(svg.split(`>${label}<`).length - 1).toBe(1);
}
});
});