feat(rebar): B10-1 최하단 단 삭제, 하면 1단 B2·B4가 모서리에서 대체
- B10-1 최하단(z = c_b)은 하면 1단 B2·B4와 같은 높이에서 모서리 간섭이 있어 삭제 (승인 2026-10-26) - B10-1: 18 → 16본 (8단 × 2면), 길이는 그대로. B1–B4 개수·길이 불변, 새 철근 없음 - 표, 3D, 단면 그림이 같은 규칙을 씀 - 테스트 기대값 갱신 (B10-1 16) Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
3fe94fa0e1
commit
8860fb8231
6 files changed
+13
-10
No files matched your search
@@ -119,7 +119,8 @@ export function sideBars(L: number, W: number, H: number, f: FootingRebarSetting
|
||||
const levels = b10Levels(H, f);
|
||||
const hook = hookLength('main90', d('S19'));
|
||||
return [
|
||||
{ name: 'B10-1', size: 'S19', count: levels * 2, length: L - 2 * depth2 + 2 * hook },
|
||||
// B10-1 lowest level (z = c_b) is removed: the 하면 1단 B2·B4 take its place at the corner (승인 2026-10-26).
|
||||
{ name: 'B10-1', size: 'S19', count: (levels - 1) * 2, length: L - 2 * depth2 + 2 * hook },
|
||||
{ name: 'B10-2', size: 'S19', count: levels * 2, length: W - 2 * depth1 + 2 * hook },
|
||||
];
|
||||
}
|
||||
|
||||
@@ -109,10 +109,11 @@ export function footingSectionSvg(model: PierModel): string {
|
||||
const b9 = b9Bars(L, W, [], 2000, fs);
|
||||
for (const n of [...new Set(b9.bars.map((b) => b.n))]) parts.push(vline('b9', 'B9', x(n), y(z.B24), y(z.B5), COLOR.b9));
|
||||
|
||||
// B10-1: green points at both W faces, one per level (9 levels), at the side depth of the table.
|
||||
// B10-1: green points at both W faces, one per level above the lowest (8 of 9 levels), at the side depth of the table.
|
||||
const levels = b10Levels(H, fs);
|
||||
const dB1 = sideDepth(NOMINAL_DIAMETER.S29, NOMINAL_DIAMETER.S19, fs);
|
||||
for (let j = 0; j < levels; j++) {
|
||||
// The lowest level is removed (승인 2026-10-26): the 하면 1단 B2·B4 take its place at the corner.
|
||||
for (let j = 1; j < levels; j++) {
|
||||
const zj = fs.cBottom + j * fs.sV;
|
||||
parts.push(dot('b10', 'B10-1', x(-W / 2 + dB1), y(zj), COLOR.b10, 2.2));
|
||||
parts.push(dot('b10', 'B10-1', x(W / 2 - dB1), y(zj), COLOR.b10, 2.2));
|
||||
|
||||
+2
-1
@@ -466,7 +466,8 @@ export function buildRebar3D(m: PierModel, common: Material = DEFAULT_MATERIAL,
|
||||
// B10-1: along s at the W faces, 19.1 above B10-2; its ends turn inward along n.
|
||||
const np = sg * nEdge;
|
||||
const zb = zj + dB10;
|
||||
polyline('B10-1', [[f.s - sEdge, zb, np - sg * hookB10], [f.s - sEdge, zb, np], [f.s + sEdge, zb, np], [f.s + sEdge, zb, np - sg * hookB10]], NOMINAL_DIAMETER.S19);
|
||||
// The lowest B10-1 level is removed (승인 2026-10-26): the 하면 1단 B2·B4 take its place at the corner.
|
||||
if (j > 0) polyline('B10-1', [[f.s - sEdge, zb, np - sg * hookB10], [f.s - sEdge, zb, np], [f.s + sEdge, zb, np], [f.s + sEdge, zb, np - sg * hookB10]], NOMINAL_DIAMETER.S19);
|
||||
}
|
||||
}
|
||||
// B11 (across W, spread along L) and B12 (along L, spread across W) at the assembly levels, 4s apart, 2s stagger per level.
|
||||
|
||||
@@ -51,9 +51,9 @@ describe('확대기초 철근 (확대기초철근 (1).md, plan C5)', () => {
|
||||
expect(bars.find((b) => b.name === 'B6')!.length).toBeCloseTo(11396, 0);
|
||||
});
|
||||
|
||||
it('B10-1 18 bars ≈ 10748, B10-2 18 bars ≈ 8494', () => {
|
||||
it('B10-1 16 bars ≈ 10748 (lowest level removed), B10-2 18 bars ≈ 8494', () => {
|
||||
const [b101, b102] = sideBars(L, W, H);
|
||||
expect(b101.count).toBe(18);
|
||||
expect(b101.count).toBe(16);
|
||||
expect(b101.length).toBeCloseTo(10748, 0);
|
||||
expect(b102.count).toBe(18);
|
||||
expect(b102.length).toBeCloseTo(8494, 0);
|
||||
|
||||
@@ -35,10 +35,10 @@ describe('③ 철근표 요약 (P1)', () => {
|
||||
expect(count('P6')).toBe(32);
|
||||
});
|
||||
|
||||
it('footing: B1–B4 31 each, B5–B8 40 each, B10-1 18, B10-2 18, B11 30, B12 24 (k = 8)', () => {
|
||||
it('footing: B1–B4 31 each, B5–B8 40 each, B10-1 16, B10-2 18, B11 30, B12 24 (k = 8)', () => {
|
||||
for (const n of ['B1', 'B2', 'B3', 'B4']) expect(count(n)).toBe(31);
|
||||
for (const n of ['B5', 'B6', 'B7', 'B8']) expect(count(n)).toBe(40);
|
||||
expect(count('B10-1')).toBe(18);
|
||||
expect(count('B10-1')).toBe(16);
|
||||
expect(count('B10-2')).toBe(18);
|
||||
expect(count('B11')).toBe(30);
|
||||
expect(count('B12')).toBe(24);
|
||||
|
||||
@@ -108,8 +108,8 @@ describe('확대기초 B9 · B10 · B11 · B12 in 3D (확대기초철근 (1).md
|
||||
expect(rb.byName.get('B9')!.length).toBe(306 * 3);
|
||||
});
|
||||
|
||||
it('B10-1 / B10-2: 18 each (9 levels × 2 faces); B11 30, B12 24 at k = 8 — one tube per bar (bends rounded, 수정 2026-10-23)', () => {
|
||||
expect(rb.byName.get('B10-1')!.length).toBe(18);
|
||||
it('B10-1: 16 (8 levels × 2 faces, lowest removed); B10-2: 18 (9 levels × 2 faces); B11 30, B12 24 at k = 8 — one tube per bar (bends rounded, 수정 2026-10-23)', () => {
|
||||
expect(rb.byName.get('B10-1')!.length).toBe(16);
|
||||
expect(rb.byName.get('B10-2')!.length).toBe(18);
|
||||
expect(rb.byName.get('B11')!.length).toBe(30);
|
||||
expect(rb.byName.get('B12')!.length).toBe(24);
|
||||
|
||||
Reference in new issue
Block a user