feat(abut): 벽체 배근 입력 저장 · 교대 벽체 등 fck(35)

- AbutRecord.rebar.wall (바꾼 값만), applyWallRebar, 프로젝트 파일 검증
- 교대 벽체 · 흉벽 · 날개벽 · 접속슬래브 fck(abutBody, 기본 35)를 ② 벽체·흉벽 카드에서 입력. 저판 fck 행과 같은 함수

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-11-04 16:22:15 +09:00
1 parent 1da8dd74e2
commit 66e7d4d90d
7 files changed
+59 -20

No files matched your search

+4 -1
View File
@@ -68,7 +68,7 @@ export function parseProject(text: string): ProjectFile {
if (!Array.isArray(obj.piers)) throw new Error('piers 목록이 없습니다.');
if (obj.fckByMember !== undefined) {
for (const [member, value] of Object.entries(obj.fckByMember)) {
if (!['column', 'coping', 'footing', 'abutFooting'].includes(member) || typeof value !== 'number' || !(value > 0)) {
if (!['column', 'coping', 'footing', 'abutFooting', 'abutBody'].includes(member) || typeof value !== 'number' || !(value > 0)) {
throw new Error(`부재별 fck 값이 맞지 않습니다 (${member}: ${String(value)}).`);
}
}
@@ -168,6 +168,9 @@ export function checkStoredAbutments(list: unknown): void {
const ok = key === 'dir' ? x === 'skew' || x === 'perp' : finite(x);
if (!ok) throw new Error(`${who}: 저판 배근 값 ${key}이(가) 맞지 않습니다.`);
}
for (const [key, v] of Object.entries(a.rebar.wall ?? {})) {
if (!finite(v)) throw new Error(`${who}: 벽체 배근 값 ${key}이(가) 맞지 않습니다.`);
}
}
if (a.wingsLinked !== undefined && typeof a.wingsLinked !== 'boolean') throw new Error(`${who}: 좌우 같게 값이 맞지 않습니다.`);
if (a.wings !== undefined) {