feat(rebar): 확대기초 배근 입력 8개 (피복 3·여유·격자 s·s_v·e_top·n), FT01·FT02 검사
- core/rebar/footing-settings.ts: 입력 정의, 기본값(확대기초철근 (1).md), 범위(제안), 검사 (FT01 범위, FT02 n 정수) - 확대기초 계산 함수가 설정을 인자로 받음 (기본값 = 기존 값, 기존 호출은 그대로) - 3D 확대기초 그림의 125·100 하드코딩 제거, 철근표·3D·기둥 층 높이가 같은 설정을 씀 - 패널: 상면·측면·하면 피복을 칸 분리, s_v와 e_top 분리. 고정 규칙(k=2, Δ₂=100, 전단 4s·엇갈림 2s, cycle 교대)과 B2·B6 디리는 읽기 전용으로 표시 - 기본값에서 P1 결과 불변 (기존 테스트 통과) Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
550b508e7a
commit
5a20a18185
11 files changed
+281
-96
No files matched your search
@@ -2,6 +2,7 @@ import type { PierModel } from '../geometry';
|
||||
import { barLength, bearingBlockRebar, DEFAULT_BLOCK_REBAR, totals } from './bearing-block';
|
||||
import { DEFAULT_COPING_REBAR } from './coping-settings';
|
||||
import { DEFAULT_COLUMN_REBAR } from './column-settings';
|
||||
import type { FootingRebarSettings } from './footing-settings';
|
||||
import { bottomPiece, topBarLength, widthLayout, topSplicePieces } from './coping-main';
|
||||
import { shearBars, shearBarsMulti, copingSideBars, SIDE_HOOK_LEG, c14Bars, c14Length, stairBars, stepDevLength, undersideAt, shearULength, capLength, PIECES_PER_POSITION } from './coping';
|
||||
import { sideRowLevels } from '../coping-geom';
|
||||
@@ -105,13 +106,13 @@ interface FootingBar {
|
||||
}
|
||||
|
||||
/** The footing bars of one footing (B1–B12 and B9), with the notes used in the 철근표. */
|
||||
function footingBarList(Lf: number, Wf: number, Hf: number, columnX: number[]): FootingBar[] {
|
||||
function footingBarList(Lf: number, Wf: number, Hf: number, columnX: number[], f: FootingRebarSettings): FootingBar[] {
|
||||
const out: FootingBar[] = [];
|
||||
for (const b of bottomBars(Lf, Wf, Hf)) out.push({ ...b, note: '교각축' });
|
||||
for (const b of crossBars(Lf, Wf, Hf)) out.push({ ...b, note: '교각축 직각' });
|
||||
for (const b of sideBars(Lf, Wf, Hf)) out.push({ ...b, note: '측면 수평' });
|
||||
for (const b of assemblyBars(Lf, Wf, Hf)) out.push({ ...b, note: '조립 수평' });
|
||||
const b9 = shearB9(Lf, Wf, Hf, columnX);
|
||||
for (const b of bottomBars(Lf, Wf, Hf, f)) out.push({ ...b, note: '교각축' });
|
||||
for (const b of crossBars(Lf, Wf, Hf, f)) out.push({ ...b, note: '교각축 직각' });
|
||||
for (const b of sideBars(Lf, Wf, Hf, f)) out.push({ ...b, note: '측면 수평' });
|
||||
for (const b of assemblyBars(Lf, Wf, Hf, f)) out.push({ ...b, note: '조립 수평' });
|
||||
const b9 = shearB9(Lf, Wf, Hf, columnX, 2000, f);
|
||||
out.push({ name: 'B9', size: 'H16', count: b9.count, length: b9.length, note: `전단 @500 엇갈림, ${b9.rows}행, 기둥 구역 제외 (위치·갈고리는 Q-B18·B19 규칙 적용)` });
|
||||
return out;
|
||||
}
|
||||
@@ -287,7 +288,7 @@ export function rebarSummary(
|
||||
for (const f of model.footings) {
|
||||
// Columns on this footing, as x mm from the footing centre (for the B9 column-zone rule).
|
||||
const columnX = model.columns.filter((c) => Math.abs(c.s - f.s) <= f.length / 2).map((c) => (c.s - f.s) * 1000);
|
||||
for (const b of footingBarList(f.length * 1000, f.width * 1000, (f.top - f.bottom) * 1000, columnX)) {
|
||||
for (const b of footingBarList(f.length * 1000, f.width * 1000, (f.top - f.bottom) * 1000, columnX, model.footingRebar)) {
|
||||
const cur = agg.get(b.name);
|
||||
if (cur) {
|
||||
cur.count += b.count;
|
||||
|
||||
Reference in new issue
Block a user