feat(abut): 교대 벽체·흉벽 삽도와 수축줄눈·흉벽 Level 입력 추가

- 벽체·흉벽 개략 단면 SVG(src/view/abut-section-svg.ts)를 형상 카드 맨 위에 추가. 치수 글자는 카드 입력값을 mm로 표시하고, 값을 바꾸면 다시 그림
- 형상 입력에 수축줄눈 개수(정수 0 이상)와 흉벽 상단 Level 좌·우(450·995, 계산 미사용·QA-4)를 추가. 기하 계산에는 쓰지 않음
- 테스트 619건 통과, 타입 검사·빌드 통과

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-11-03 14:57:38 +09:00
1 parent 1d31d2f3a9
commit 5af88a511e
7 files changed
+110 -2

No files matched your search

+3
View File
@@ -81,4 +81,7 @@ export const SHAPE_EDIT_FIELDS: { key: keyof AbutShape; label: string }[] = [
{ key: 'footingBackMm', label: '저판 뒷굽 끝 (mm)' },
{ key: 'pileEdgeMm', label: '말뚝 연단 (mm)' },
{ key: 'pileSpacingMm', label: '말뚝 간격 (mm)' },
{ key: 'shrinkJointCount', label: '수축줄눈 개수 (개)' },
{ key: 'parapetLevelLeftMm', label: '흉벽 상단 Level 좌 (mm, 계산 미사용)' },
{ key: 'parapetLevelRightMm', label: '흉벽 상단 Level 우 (mm, 계산 미사용)' },
];
+9
View File
@@ -16,6 +16,11 @@ export interface AbutShape {
footingBackMm: number;
pileEdgeMm: number;
pileSpacingMm: number;
/** 수축줄눈 개수 (개). Shown in the 삽도; not used by the geometry yet. */
shrinkJointCount: number;
/** 흉벽 상단 Level 좌·우 (mm). Not used by the geometry (QA-4, 가정). */
parapetLevelLeftMm: number;
parapetLevelRightMm: number;
}
export const ABUT_SHAPE_DEFAULT: AbutShape = {
@@ -29,6 +34,9 @@ export const ABUT_SHAPE_DEFAULT: AbutShape = {
footingBackMm: -1800,
pileEdgeMm: 650,
pileSpacingMm: 2000,
shrinkJointCount: 1,
parapetLevelLeftMm: 450,
parapetLevelRightMm: 995,
};
/** The same values in m, for the geometry (the model works in m). */
@@ -81,5 +89,6 @@ export function shapeIssues(changes: Partial<AbutShape>): string[] {
const wallBack = v.wallFrontMm - v.wallThicknessMm;
if (!(v.footingFrontMm > v.wallFrontMm)) out.push('저판 앞굽 끝은 벽체 전면보다 앞에 있어야 합니다.');
if (!(v.footingBackMm < wallBack)) out.push('저판 뒷굽 끝은 벽체 배면보다 뒤에 있어야 합니다.');
if (!(Number.isInteger(v.shrinkJointCount) && v.shrinkJointCount >= 0)) out.push('수축줄눈 개수는 0 이상의 정수여야 합니다.');
return out;
}