feat(rebar): 현장타설 말뚝 · 다주형 코핑 형상과 철근 계산

- 현장타설 기둥·말뚝 형상(cast-in-place-shape)과 주철근·횡철근·커플러 계산(rebar/cast-in-place, cast-layout)
- 다주형 코핑 철근(multicol-coping), 기둥 높이 · 양단부 연장
- 철근표 요약 · 재료 수량 · 3D 뷰 연결과 삽도(cast-rebar-svg)
- 검사 기준 갱신과 회귀 테스트, 검증 스크립트 보관

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-11-06 13:15:01 +09:00
1 parent 3922b330d5
commit 2e0bfb6fc8
29 files changed
+1750 -71

No files matched your search

+6
View File
@@ -4,6 +4,8 @@ import type { PierInput } from './types';
import type { AbutRecord } from './abut/parse';
import { abutNameError } from './abut/name';
import { normalizeBearingAzimuths } from './coordinate-frame';
import { castSettingsIssues } from './rebar/cast-in-place';
import { castShapeIssues } from './cast-in-place-shape';
/** Project file schema (spec §8). Bump only with a migration. */
export const SCHEMA_VERSION = 1;
@@ -95,6 +97,10 @@ export function parseProject(text: string): ProjectFile {
}
}
for (const values of [p.input, p.defaults, p.draft]) {
const shapeIssues = castShapeIssues(values?.castInPlaceShape);
if (shapeIssues.length) throw new Error(`교각 ${input.name}: ${shapeIssues.join(' · ')}`);
const castIssues = castSettingsIssues(values?.castInPlaceRebar);
if (castIssues.length) throw new Error(`교각 ${input.name}: 현장타설 배근 · ${castIssues.join(' · ')}`);
if (values?.bearingAzimuthFrame !== undefined && values.bearingAzimuthFrame !== 'model-xy') {
throw new Error(`교각 ${input.name}: 받침 방위각 좌표계 표기가 맞지 않습니다.`);
}