feat(rebar,view): 받침 기준 — project-wide choice between Excel z (default) and drawing EL.X, with per-bearing drawing input on ②

The project has one basis: 엑셀 z (default) or 도면 EL.X. On ②, the bearing card lists EL.X, h1 and h2 for each bearing
(per pier), with a button to fill the reference values. With the drawing basis the model takes the drawing EL.X as the
bearing height; the coping tops stay within the 5 mm tolerance, the front block is 164 mm and the back 139 mm (excluding the
pad). The check compares EL.X − h1 − h2 with the Excel-basis coping top. The basis and the drawing values are saved in the
project file (optional fields). Changes regenerate every pier at once.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-10-23 14:25:44 +09:00
1 parent 802a1eab97
commit e4e141c801
4 files changed
+197 -12

No files matched your search

+41
View File
@@ -1,3 +1,6 @@
import type { PierInput } from './types';
import type { PierModel } from './geometry';
/**
* 교량받침 reference tables from the P1 상세도 (도면값, 읽기 전용, 2026-10-23). They are not used in the model:
* the model keeps the imported values (Q16). EL.X is the drawing's bearing level; E = h1 + h2 + h3 + h4.
@@ -101,3 +104,41 @@ export function applyBearingRules(row: BearingRefRow, rules: BearingRules): { E:
const { T1, T2 } = solplateTs(rules.T, L, sp.s);
return { E: row.h1 + rules.h2 + rules.h3 + row.h4, L, W: row.B + rules.margin, T1, T2 };
}
/** 받침 기준 (Q16, 승인 2026-10-23): 'excel' = 엑셀 z (기본), 'drawing' = 도면 EL.X. Project-wide. */
export type BearingBasis = 'excel' | 'drawing';
/** One bearing's drawing values entered on ② (mm for h1, h2; m for EL.X). */
export interface DrawingBearing {
no: number;
elx: number;
h1: number;
h2: number;
}
/** Tolerance for the coping top check against the drawing (승인 2026-10-23: 5 mm). */
export const DRAWING_TOL_MM = 5;
/** The input with each bearing's z replaced by the drawing EL.X, for bearings that have a drawing value. */
export function withDrawingBasis(input: PierInput, drawing: DrawingBearing[]): PierInput {
const byNo = new Map(drawing.map((d) => [d.no, d]));
return {
...input,
bearings: input.bearings.map((b) => {
const d = byNo.get(b.no);
return d ? { ...b, z: d.elx } : b;
}),
};
}
/** Coping top implied by each drawing row (EL.X − h1 − h2) against the model's coping top; differences in mm. */
export function drawingCopingCheck(model: PierModel, drawing: DrawingBearing[]): { no: number; diffMm: number; ok: boolean }[] {
const front = model.blocks.filter((b) => b.row === '전열');
const back = model.blocks.filter((b) => b.row === '후열');
return drawing.map((d) => {
const implied = d.elx - (d.h1 + d.h2) / 1000;
const modelTop = d.no <= 5 ? model.segments[d.no - 1]?.top : back[d.no - 6]?.bottom;
const diffMm = modelTop === undefined ? NaN : Math.round((modelTop - implied) * 1000 * 10) / 10;
return { no: d.no, diffMm, ok: Number.isFinite(diffMm) && Math.abs(diffMm) <= DRAWING_TOL_MM };
});
}
+4
View File
@@ -31,6 +31,10 @@ export interface ProjectFile {
history: { version: string; note: string; at: string }[];
/** ③ 공통 설정 (fck · fy). Absent in older files: the defaults are used. */
common?: Material;
/** 받침 기준 (project-wide): 'excel' (default) or 'drawing'. Absent = 'excel'. */
bearingBasis?: 'excel' | 'drawing';
/** 도면 받침 값 per pier name (EL.X in m, h1 and h2 in mm). */
bearingDrawing?: Record<string, { no: number; elx: number; h1: number; h2: number }[]>;
/** ② 부재별 fck (MPa). Absent in older files: every member uses the 공통 fck. */
fckByMember?: FckByMember;
}