feat(shape): 다주형 코핑 하면을 오목형으로 (Level D+200 · 오목 500 · 헌치 1500)
spec §3·§4.4(2026-11-06 개정)와 3주형형상배근.md §2.2(2주형 DWG 실측)를 따른다. - 기둥 사이 하면: Level 끝에서 헌치 수평 1500 동안 500 올라가 평탄, 다음 기둥 앞에서 내려옴 (이전 Level + 300, 헌치 300 × 300 대체) - 다주형 Level 폭 기본값 = D + 200 (입력값이 있으면 입력 우선). T형은 2100 유지 - 오목 평탄부가 없으면 RB-M01 오류 - 3주형 테스트는 오목형이 성립하는 20 m 코핑으로 바꿈 (P1 길이 12 m는 RB-M01) - 2주형 DWG 치수(L 24200, D 3000) 하면 꺾임점 테스트 추가 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
42316104df
commit
370bd3d7cd
8 files changed
+79
-34
No files matched your search
@@ -7,10 +7,13 @@ import { castRebarLayout } from '../src/core/rebar/cast-layout';
|
||||
import { buildRebar3D } from '../src/view/rebar3d';
|
||||
import { loadP1 } from './helpers';
|
||||
|
||||
// 3주형 on the P1 sheet needs a longer coping: with L 12.166 m the columns are 3650 apart and leave no flat 오목 part (RB-M01).
|
||||
const lengthFor = (columnCount: number) => (columnCount === 3 ? { copingLengthMm: 20000 } : {});
|
||||
|
||||
describe('multi-column drawing corrections', () => {
|
||||
it('excludes C5/C6 from the multi-column coping bars (대안A: the 1106 전용 삽도 has no C5/C6)', () => {
|
||||
for (const [type, columnCount] of [['2주형', 2], ['3주형', 3]] as const) {
|
||||
const model = buildPier({ ...loadP1(), type, columnCount, foundationType: '말뚝기초', groundEl: 30, pileLengthMm: 24000 });
|
||||
const model = buildPier({ ...loadP1(), ...lengthFor(columnCount), type, columnCount, foundationType: '말뚝기초', groundEl: 30, pileLengthMm: 24000 });
|
||||
const names = new Set(multicolCopingBars(model).map(b => b.name));
|
||||
expect(names.has('C5')).toBe(false);
|
||||
expect(names.has('C6')).toBe(false);
|
||||
@@ -20,7 +23,7 @@ describe('multi-column drawing corrections', () => {
|
||||
for (const [type, columnCount] of [['2주형', 2], ['3주형', 3]] as const) {
|
||||
for (const foundationType of ['말뚝기초', '현장타설말뚝'] as const) {
|
||||
it(`${type} ${foundationType}: every coping path stays inside the concrete lower boundary`, () => {
|
||||
const model = buildPier({ ...loadP1(), type, columnCount, foundationType, groundEl: 30, pileLengthMm: 24000 });
|
||||
const model = buildPier({ ...loadP1(), ...lengthFor(columnCount), type, columnCount, foundationType, groundEl: 30, pileLengthMm: 24000 });
|
||||
const bars = multicolCopingBars(model);
|
||||
expect(bars.length).toBeGreaterThan(100);
|
||||
const polygon = model.copingParts[0].profile;
|
||||
@@ -54,7 +57,7 @@ describe('multi-column drawing corrections', () => {
|
||||
}, 15000);
|
||||
}
|
||||
it(`${type}: physical column pieces and local confinement height agree`, () => {
|
||||
const model = buildPier({ ...loadP1(), type, columnCount });
|
||||
const model = buildPier({ ...loadP1(), ...lengthFor(columnCount), type, columnCount });
|
||||
const rows = rebarSummary(model).rows;
|
||||
for (const name of ['P1', 'P2']) {
|
||||
const row = rows.find(r => r.name === name)!;
|
||||
@@ -83,7 +86,7 @@ describe('multi-column drawing corrections', () => {
|
||||
expect(detail.p5.every(z => z >= 0 && z <= detail.zTopT)).toBe(true);
|
||||
});
|
||||
it('cast upper dense zone includes the coping half-height and clips at ground', () => {
|
||||
const model = buildPier({ ...loadP1(), type: '3주형', columnCount: 3, foundationType: '현장타설말뚝', groundEl: 40,
|
||||
const model = buildPier({ ...loadP1(), copingLengthMm: 20000, type: '3주형', columnCount: 3, foundationType: '현장타설말뚝', groundEl: 40,
|
||||
pileLengthMm: 24000, castInPlaceRebar: { column: { endZoneLengthMm: 3000 } } });
|
||||
const layout = castRebarLayout(model);
|
||||
for (let i = 0; i < 3; i++) {
|
||||
|
||||
Reference in new issue
Block a user