- 사용자 도면(2026-11-04): 받침 ① 위치에서 받침 ① 교좌면부터 흉벽 상단까지 연직 거리. 모든 교대 기본값 3326 (QA-4 가정 2500 대체) - 입력 이름 "벽체 높이 · 받침 ① 기준 연직", ② 정면도에 받침 ① 기준선과 H_w 치수 - ③ 흉벽 철근표 대표 단면 = 받침 ① 위치 (P1–P3는 그 단면에서 정확히 계산) - 테스트: 흉벽 상단 IP1 48.006 / IP3 47.661 등 + 0.826 반영, 교대흉벽철근.md §11 재현은 2500을 넣어 유지, 3326 기본 확인 (P1 3945) Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
30 lines
1.8 KiB
TypeScript
30 lines
1.8 KiB
TypeScript
// 교대 A1 받침 ① 위치의 높이 후보들 (흉벽 상단 · 교좌면 · 받침 z · 저판 상면 · 기초 하단)을 JSON으로 저장한다.
|
|
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
import { fileURLToPath } from 'node:url';
|
|
import * as XLSX from 'xlsx';
|
|
import { it } from 'vitest';
|
|
import { buildAbut } from '../../src/core/abut/geometry';
|
|
import { parseAbutments, toAbutInput } from '../../src/core/abut/parse';
|
|
import { buildMembers } from '../../src/core/abut/members';
|
|
|
|
it('dump 받침 ① 높이 후보', () => {
|
|
const out = process.env.DUMP_OUT ?? fileURLToPath(new URL('./out', import.meta.url));
|
|
mkdirSync(out, { recursive: true });
|
|
const xlsx = fileURLToPath(new URL('../../../../RAG/운곡교P1입력.xlsx', import.meta.url));
|
|
const rec = parseAbutments(XLSX.read(readFileSync(xlsx), { type: 'buffer' })).abutments[0];
|
|
const model = buildAbut(toAbutInput(rec));
|
|
const m = buildMembers(model, { bottomEl: rec.foundationBottomEl, pileLengthMm: rec.pileLengthMm });
|
|
const b1 = model.bearings[0];
|
|
const L = model.length;
|
|
const topAt = (s: number) => m.parapetTopStartEl + ((m.parapetTopEndEl - m.parapetTopStartEl) * s) / L;
|
|
const r = {
|
|
L, bearings: model.bearings.map((b) => ({ no: b.no, s: b.s, z: b.z, seatEl: b.seatEl, block: b.blockHeightMm })),
|
|
b1s: b1.s, top_b1: topAt(b1.s), seat_b1: b1.seatEl, z_b1: b1.z,
|
|
footingTop: m.footingTopEl, footingBottom: m.footingBottomEl,
|
|
parapetHeight: m.shape.parapetHeightM, bracketH: m.shape.bracketHeightM,
|
|
top_minus_seat: topAt(b1.s) - b1.seatEl, top_minus_z: topAt(b1.s) - b1.z, top_minus_footingTop: topAt(b1.s) - m.footingTopEl,
|
|
seat_minus_footingTop: b1.seatEl - m.footingTopEl, top_minus_footingBottom: topAt(b1.s) - (m.footingBottomEl ?? NaN),
|
|
};
|
|
writeFileSync(out + '/bearing1.json', JSON.stringify(r, null, 1));
|
|
});
|