feat(rebar): 주철근 기본간격·끝단 여유를 입력과 연동, CP04 홀수 개수 경고

- widthLayout이 코핑 배근 입력(mainSpacing, mainEndGap)을 받는다. 결과에 spacing 필드 추가
- 3D 주철근 위치의 125 하드코딩 제거 (철근표와 3D가 같은 간격을 씀)
- CP04: 주철근 개수 n+3이 홀수면 cycle-1·cycle-2 분할 불가 경고 (적용은 막지 않음)
- P1 기본값(125 · 80)에서는 결과와 경고 없음 (테스트로 확인)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-10-26 15:51:26 +09:00
1 parent d2c5f90092
commit 1e6b8db7e9
4 files changed
+44 -12

No files matched your search

+5 -1
View File
@@ -152,8 +152,12 @@ export function rebarSummary(
rows.push({ member: 'bearing', name: 'S2', size: 'H19', count: blk.S2, length: barLength(1200, model.blockRebar), note: `블럭 배치 분리, 블럭당 8본 · 묻힘 ${range(emb2)} (블럭 상면 − 50)` });
// Coping (코핑철근.md §5–§8)
const width = widthLayout(B);
const width = widthLayout(B, model.copingRebar);
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.
if (width.count % 2 !== 0) {
warnings.push({ code: 'CP04', message: `주철근 개수 ${width.count}(n+3)은 홀수라 cycle-1·cycle-2를 나눌 수 없습니다 (기본간격 ${width.spacing}, 끝단 여유 ${model.copingRebar.mainEndGap}). 기본간격을 확인하세요.`, target: 'coping' });
}
// C1–C3 and C4–C6 are the same three top rows (row 1, 2, 3), one set per cycle.
for (const [name, k] of [['C1', 1], ['C2', 2], ['C3', 3], ['C4', 1], ['C5', 2], ['C6', 3]] as const) {
rows.push({ member: 'coping', name, size: 'H29', count: perRow, length: topBarLength(L, k), note: '상면, 이음 무시' });