feat(rebar): B11·B12 수평간격을 배수 k 입력으로 (기본 k = 8, 방향은 문서 기준)

- 간격 = k·s: B11은 L 방향 격자(교각축 직각 s), B12는 W 방향 격자(교각축 s). 기본 k = 8 (1000 mm, s = 125)
- 개수는 격자 k칸마다, 조립 단 엇갈림 2칸 유지. 3D 철근도 같은 간격
- 기본 k = 8이므로 P1 기본값의 B11·B12 개수가 60 / 47 → 30 / 24로 바뀜 (k = 4이면 문서값 60 / 47을 재현, 테스트로 확인)
- 패널에 k 두 칸, 규칙 표시에 B11·B12 간격 (k·s)
- FT02를 n·kB11·kB12 정수 검사로 확장

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-10-26 17:34:51 +09:00
1 parent 48e6811600
commit 0588ffe3f4
9 files changed
+54 -39

No files matched your search

+3 -3
View File
@@ -471,7 +471,7 @@ export function buildRebar3D(m: PierModel, common: Material = DEFAULT_MATERIAL,
}
// B11 (across W, spread along L) and B12 (along L, spread across W) at the assembly levels, 4s apart, 2s stagger per level.
const xsL = gridPositions(Lf * 1000, fs, 'sPerp');
const ysW = gridPositions(Wf * 1000, fs, 'sPerp');
const ysW = gridPositions(Wf * 1000, fs, 'sAxis');
const dAsm = assemblyEndOffset();
const nAsm = Wf / 2 - mm(d1 + dAsm);
const sAsm = Lf / 2 - mm(d2 + dAsm);
@@ -479,11 +479,11 @@ export function buildRebar3D(m: PierModel, common: Material = DEFAULT_MATERIAL,
const zA = bottom + mm(fs.cBottom + jA * fs.sV);
const zB = zA + dB10;
const i0 = k % 2 === 0 ? 0 : 2;
for (let iL = i0; iL < xsL.length; iL += 4) {
for (let iL = i0; iL < xsL.length; iL += fs.kB11) {
const x = f.s + mm(xsL[iL]);
polyline('B11', [[x, zA - hookAsm, -nAsm], [x, zA, -nAsm], [x, zA, nAsm], [x, zA - hookAsm, nAsm]], NOMINAL_DIAMETER.S16);
}
for (let iW = i0; iW < ysW.length; iW += 4) {
for (let iW = i0; iW < ysW.length; iW += fs.kB12) {
const n = mm(ysW[iW]);
polyline('B12', [[f.s - sAsm, zB - hookAsm, n], [f.s - sAsm, zB, n], [f.s + sAsm, zB, n], [f.s + sAsm, zB - hookAsm, n]], NOMINAL_DIAMETER.S16);
}