feat(view,rebar): column diameter D as a free input on ② (1200–3000 mm, 50 mm steps), with three checks

D is an input on the column card (default 2000 mm). The 3D column, the piles of a cast-in pier and the column rebar follow it;
n_div stays 46. Three checks run on each regenerate and appear in 알림: D below the Level width (2100), D + 2c within the
coping width, and the 주철근 arc spacing ≥ max(1.5·d_b, 40). Spec §5.2 records the rule (approved 2026-10-23).

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-10-23 15:50:52 +09:00
1 parent a6b92ae341
commit 65c53f2b5d
7 files changed
+80 -4

No files matched your search

+30
View File
@@ -0,0 +1,30 @@
/**
* 기둥 직경 D (승인 2026-10-23): free input 1200–3000 mm in 50 mm steps. Checks, all in mm:
* - D < Level 폭 (the column meets the Level zone);
* - D + 2·c ≤ 코핑 폭 B (c = 125, 기둥철근.md: 기둥 면 ~ P1 중심 피복);
* - the arc spacing of the 주철근 (2π·r1 / n_div, n_div = 46 kept) ≥ max(1.5·d_b, 40), with d_b = 32 (S32).
* Pure: gives the messages for the 알림 list.
*/
import type { PierModel } from './geometry';
export const COLUMN_D_RANGE = { min: 1200, max: 3000, step: 50 } as const;
export const COLUMN_COVER_MM = 125;
const N_DIV = 46;
const DB_MAIN = 31.8;
export function columnDiameterIssues(dMm: number, model: PierModel): string[] {
const out: string[] = [];
if (!Number.isFinite(dMm) || dMm < COLUMN_D_RANGE.min || dMm > COLUMN_D_RANGE.max || Math.round(dMm) % COLUMN_D_RANGE.step !== 0) {
out.push(`기둥 직경은 ${COLUMN_D_RANGE.min}~${COLUMN_D_RANGE.max} mm, ${COLUMN_D_RANGE.step} mm 단위여야 합니다.`);
return out;
}
const levelW = model.copingGeom.levelWidth;
if (dMm >= levelW) out.push(`기둥 직경 ${dMm} mm가 Level 폭 ${levelW} mm 이상입니다.`);
const copingW = model.copingB * 1000;
if (dMm + 2 * COLUMN_COVER_MM > copingW) out.push(`기둥 직경 ${dMm} mm와 피복이 코핑 폭 ${copingW} mm를 넘습니다.`);
const r1 = dMm / 2 - COLUMN_COVER_MM;
const arc = (2 * Math.PI * r1) / N_DIV;
const minArc = Math.max(1.5 * DB_MAIN, 40);
if (arc < minArc) out.push(`주철근 순간격 ${arc.toFixed(1)} mm가 최소 ${minArc.toFixed(1)} mm보다 작습니다.`);
return out;
}