fix(rebar): 꺾인 다주형 코핑의 철근표를 다주형 규칙으로 낸다
꺾인 코핑이면 기둥 수와 관계없이 T형(기둥 1개) 코핑 행을 내어 산외교 P11(3주형)의 전단철근 등 수량이 틀렸다. 기둥이 1개일 때만 T형 행, 2개 이상이면 꺾여도 다주형 행(편 좌표 계산)을 쓴다. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0b3087e752
commit
51209cccf9
2 files changed
+17
-2
No files matched your search
@@ -237,7 +237,8 @@ export function rebarSummary(
|
|||||||
// Coping (코핑철근.md §5–§8)
|
// Coping (코핑철근.md §5–§8)
|
||||||
const colS = model.columns.map((c) => c.s * 1000);
|
const colS = model.columns.map((c) => c.s * 1000);
|
||||||
const nCol = Math.max(1, colS.length);
|
const nCol = Math.max(1, colS.length);
|
||||||
if (nCol <= 1 || model.kink !== null) {
|
// A bent multi-column coping keeps the multi-column rules (2026-11-10); only one column uses the T형 rows.
|
||||||
|
if (nCol <= 1) {
|
||||||
const width = widthLayout(B, model.copingRebar);
|
const width = widthLayout(B, model.copingRebar);
|
||||||
const perRow = width.count / 2; // cycle split, 12 per row
|
const perRow = width.count / 2; // cycle split, 12 per row
|
||||||
// CP04 (승인 2026-10-26): the cycle split needs an even count (n + 3), so n must be odd. Warning only; the input is kept.
|
// CP04 (승인 2026-10-26): the cycle split needs an even count (n + 3), so n must be odd. Warning only; the input is kept.
|
||||||
@@ -400,7 +401,7 @@ export function rebarSummary(
|
|||||||
} else {
|
} else {
|
||||||
warnings.push({ code: 'RB-F00', message: '현장타설말뚝은 확대기초가 없어 확대기초 철근을 만들지 않습니다.', target: 'footing' });
|
warnings.push({ code: 'RB-F00', message: '현장타설말뚝은 확대기초가 없어 확대기초 철근을 만들지 않습니다.', target: 'footing' });
|
||||||
}
|
}
|
||||||
if (nCol > 1 && model.kink === null) {
|
if (nCol > 1) {
|
||||||
const info = multicolCopingInfo(model, mCoping);
|
const info = multicolCopingInfo(model, mCoping);
|
||||||
const grouped = new Map<string, typeof info.bars>();
|
const grouped = new Map<string, typeof info.bars>();
|
||||||
for (const b of info.bars) {
|
for (const b of info.bars) {
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ import * as XLSX from 'xlsx';
|
|||||||
import { parseWorkbook } from '../src/core/parseWorkbook';
|
import { parseWorkbook } from '../src/core/parseWorkbook';
|
||||||
import { buildPier, DIM, defaultLevelWidthMm } from '../src/core/geometry';
|
import { buildPier, DIM, defaultLevelWidthMm } from '../src/core/geometry';
|
||||||
import type { PierInput } from '../src/core/types';
|
import type { PierInput } from '../src/core/types';
|
||||||
|
import { rebarSummary } from '../src/core/rebar/summary';
|
||||||
|
import { multicolCopingInfo } from '../src/core/rebar/multicol-coping';
|
||||||
|
|
||||||
// 산외교 P11 (샘플01) with the coping bent 8.767° at IP4 (2026-11-10 검토): back ⑥ g 11.64, ⑦ g 18.49, kink g 15.14.
|
// 산외교 P11 (샘플01) with the coping bent 8.767° at IP4 (2026-11-10 검토): back ⑥ g 11.64, ⑦ g 18.49, kink g 15.14.
|
||||||
const SAMPLE = fileURLToPath(new URL('../project_data/01_엑셀/샘플01_산외교_교각입력데이터.xlsx', import.meta.url));
|
const SAMPLE = fileURLToPath(new URL('../project_data/01_엑셀/샘플01_산외교_교각입력데이터.xlsx', import.meta.url));
|
||||||
@@ -131,3 +133,15 @@ describe('받침 번호가 축 반대 방향인 교각 (2026-11-10)', () => {
|
|||||||
expect(b.segments.map((s) => s.s0)).toEqual(a.segments.map((s) => s.s0));
|
expect(b.segments.map((s) => s.s0)).toEqual(a.segments.map((s) => s.s0));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('꺾인 다주형 코핑의 철근표 (A, 2026-11-10)', () => {
|
||||||
|
it('uses the multi-column rows, not the one-column T형 rows', () => {
|
||||||
|
const m = buildPier(p11());
|
||||||
|
const rows = rebarSummary(m).rows.filter((r) => r.member === 'coping');
|
||||||
|
const info = multicolCopingInfo(m);
|
||||||
|
for (const name of ['C9', 'C10', 'C11', 'C1', 'C7']) {
|
||||||
|
expect(rows.find((r) => r.name === name)!.count, name).toBe(info.bars.filter((b) => b.name === name).length);
|
||||||
|
}
|
||||||
|
expect(rows.every((r) => r.note.includes('다주형'))).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in new issue
Block a user