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

+4 -4
View File
@@ -1,4 +1,4 @@
import { hookLength, NOMINAL_DIAMETER, spliceLength } from './common';
import { DEFAULT_MATERIAL, hookLength, Material, NOMINAL_DIAMETER, spliceLength } from './common';
/**
* C1–C8 상·하면 주철근 (plan C3 continued). Source: RAG/코핑철근.md §5, 2026-10-22 최종 정리.
@@ -69,11 +69,11 @@ export function topBarLength(L: number, k: number): number {
/**
* Bottom bar C7·C8 (spliced at the column centre, 하면 겹침이음). Each piece:
* path/2 + l_s/2 + l_h, with path = 2·slope + Level and l_s = 1.3·l_d for H29 (nominal 28.6, fck 27, fy 400).
* path/2 + l_s/2 + l_h, with path = 2·slope + Level and l_s = 1.3·l_d for H29 (nominal 28.6, with the material inputs).
*/
export function bottomPiece(fck = 27): { path: number; ls: number; piece: number } {
export function bottomPiece(m: Material = DEFAULT_MATERIAL): { path: number; ls: number; piece: number } {
const path = 2 * MAIN.slopeEach + MAIN.level;
const ls = spliceLength(NOMINAL_DIAMETER.H29, 400, fck);
const ls = spliceLength(NOMINAL_DIAMETER.H29, m.fyH, m.fck);
const lh = hookLength('main90', NOMINAL_DIAMETER.H29);
return { path, ls, piece: path / 2 + ls / 2 + lh };
}