feat(core,view): ③ 공통 설정 — fck and fy as inputs (spec §6.2)

- Material {fck, fyH, fyS}, defaults 27 / 400 / 500 as assumed values (I02).
  The rebar calculations take the material: the C7/C8 splice, the P2 development
  length, the P3 lap, and the B2 split use it instead of fixed numbers.
- ③ screen: 공통 설정 inputs with a note that the defaults are assumed (I02).
- Project file stores the material as an optional field; older files open with
  the defaults.
- Tests: fck 27 → 35 shortens the laps by √(27/35); the C7 piece follows fck;
  a non-default fy drops I02; the file round trip.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-10-22 12:06:11 +09:00
1 parent 64d415f891
commit 9ba7b55eab
11 files changed
+123 -16

No files matched your search

+5 -5
View File
@@ -1,4 +1,4 @@
import { developmentLength, hookLength, NOMINAL_DIAMETER, spliceLength } from './common';
import { DEFAULT_MATERIAL, developmentLength, hookLength, Material, NOMINAL_DIAMETER, spliceLength } from './common';
import { layers } from './footing';
/**
@@ -90,12 +90,12 @@ const dH19 = NOMINAL_DIAMETER.H19;
const dH16 = NOMINAL_DIAMETER.H16;
const round = (v: number, d = 1) => Math.round(v * 10 ** d) / 10 ** d;
export function columnRebar(x: ColumnInput = COLUMN_P1) {
export function columnRebar(x: ColumnInput = COLUMN_P1, m: Material = DEFAULT_MATERIAL) {
// P1 and P2 main bars (기둥철근.md §3)
const r1 = x.D / 2 - x.c;
const r2 = r1 - dS32;
const zTop1 = x.Hc + x.hcop - x.eP1;
const lD2 = developmentLength(dS32, 500, 27);
const lD2 = developmentLength(dS32, m.fyS, m.fck);
const zTop2 = x.Hc + lD2;
const couplerLevels = Array.from({ length: Math.max(0, Math.floor(zTop1 / x.ctcCoupler) - 1) }, (_, i) => (i + 1) * x.ctcCoupler);
const couplersP1 = couplerLevels.length;
@@ -128,8 +128,8 @@ export function columnRebar(x: ColumnInput = COLUMN_P1) {
const p6Hook = hookLength('tie90', dH16);
const p6Length = p6Straight + 2 * p6Hook;
// P3 lap: Q-C6 is open; recommended = 1.3·l_d of H19 (fck 27, fy 400).
const lapP3 = spliceLength(dH19, 400, 27);
// P3 lap: Q-C6 is open; recommended = 1.3·l_d of H19 with the material inputs.
const lapP3 = spliceLength(dH19, m.fyH, m.fck);
const p3Length = 2 * Math.PI * tieRadius + lapP3;
const p5Length = 2 * Math.PI * tieRadius;