Files
Pier_v1/src/core/rebar/column-settings.ts
T

71 lines
2.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 기둥 배근 입력 (승인 2026-10-26, 시안 ③ 기둥 삽도). The inputs of the 기둥 panel; the names match ColumnInput.
* Defaults are the 기둥철근 (1).md P1 values; the ranges are proposed and pending the design-standard check.
* The 주철근 하단 갈고리 is fixed (no input).
*/
export interface ColumnRebarSettings {
/** K1 중심 피복 c (기둥 면 ~ P1 중심, mm). */
c: number;
/** 띠철근 간격 K3 (일반 구간, mm). */
ctcP3: number;
/** 띠철근 간격 K5 (단부, mm). */
ctcP5: number;
/** 띠철근 간격 K4 (기초 안, mm). */
ctcP4: number;
/** 크로스타이 K6 간격 (단 간격, mm). */
ctcP6: number;
/** 주철근 커플러 간격 (기초 상면부터, mm). */
ctcCoupler: number;
/** P2 커플러를 P1보다 올리는 높이 (mm). */
dzCp2: number;
/** 주철근 원주 등분 수 n_div (P1·P2 공통, 짝수). */
nDiv: number;
}
export const DEFAULT_COLUMN_REBAR: ColumnRebarSettings = {
c: 125,
ctcP3: 300,
ctcP5: 120,
ctcP4: 120,
ctcP6: 1800,
ctcCoupler: 3000,
dzCp2: 150,
nDiv: 46,
};
/** Allowed range per input (inclusive, mm). */
export const COLUMN_REBAR_RANGES: Record<keyof ColumnRebarSettings, [number, number]> = {
c: [100, 150],
ctcP3: [200, 400],
ctcP5: [80, 200],
ctcP4: [80, 200],
ctcP6: [1200, 2400],
ctcCoupler: [2000, 4000],
dzCp2: [0, 300],
nDiv: [40, 50],
};
export interface ColumnSettingsIssue {
code: 'CL01' | 'CL02';
key: keyof ColumnRebarSettings;
message: string;
}
/**
* CL01: a value is not a finite number or is out of range (W). CL02: n_div is odd (the main bars come in pairs around the circle).
*/
export function columnSettingsIssues(s: ColumnRebarSettings): ColumnSettingsIssue[] {
const out: ColumnSettingsIssue[] = [];
for (const key of Object.keys(COLUMN_REBAR_RANGES) as (keyof ColumnRebarSettings)[]) {
const v = s[key];
const [lo, hi] = COLUMN_REBAR_RANGES[key];
if (!Number.isFinite(v) || v < lo || v > hi) {
out.push({ code: 'CL01', key, message: `CL01 ${key} ${v} 범위 밖 (${lo}–${hi})` });
}
}
if (Number.isFinite(s.nDiv) && s.nDiv % 2 !== 0) {
out.push({ code: 'CL02', key: 'nDiv', message: `CL02 주철근 등분 수 ${s.nDiv}는 홀수 (짝수만 허용)` });
}
return out;
}