Improve drawing export and foundation quantity views

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
CopilotandCopilot committed 2026-11-06 15:35:56 +09:00
1 parent a0ec74b09b
commit d22c5008f0
72 files changed
+24346 -12

No files matched your search

+19
View File
@@ -1,3 +1,4 @@
import { foundationNotes } from './foundation-notes';
import { describe, it, expect } from 'vitest';
import { readFileSync, readdirSync, mkdirSync, writeFileSync } from 'node:fs';
import { resolve } from 'node:path';
@@ -114,6 +115,17 @@ describe('실제 모델 → 일반도',()=>{
expect(JSON.stringify(model)).toBe(before);
});
it('기초 좌표와 말뚝 주석은 모델 실좌표·실제 길이를 사용한다',()=>{
const m=buildPier(input),f=m.footings[0],bounds={minX:-10000,maxX:10000,minY:0,maxY:5000};
const notes=foundationNotes(m,input,'footing',bounds,100);
const corner=localPoint(m,f.k,f.s-f.length/2,f.top,-f.width/2);
expect(notes.some(e=>e.kind==='text'&&e.text===`X(N) ${(-corner.z+m.pivot.n).toFixed(3)}`)).toBe(true);
expect(notes.some(e=>e.kind==='text'&&e.text===`Y(E) ${(corner.x+m.pivot.e).toFixed(3)}`)).toBe(true);
expect(notes.filter(e=>e.kind==='text')).toHaveLength(m.footings.length*8);
const pileNotes=foundationNotes(m,input,'front',bounds,100);
expect(pileNotes.some(e=>e.kind==='text'&&e.text.startsWith('L=')&&e.text.endsWith(' m'))).toBe(true);
});
it('참고 치수표 항목은 모델의 받침 제원·실제 높이를 사용하고 미확인 값을 만들지 않는다',()=>{
const m=buildPier(input),rows=bearingSchedule(m);
expect(rows).toHaveLength(m.blocks.length);expect(rows[0].A).toBeNull();expect(rows[0].T1).toBeNull();
@@ -200,6 +212,13 @@ describe('실제 모델 → 일반도',()=>{
it('전체 치수는 외측 레인에 배치하고 출력 문자 크기와 실제 점유 범위를 검증한다',()=>{
const doc=generateDrawing(buildPier(input),input,project,DEFAULT_SETTINGS),front=doc.views[0];
const info=doc.views.find(v=>v.id==='iso')!.entities.filter(e=>e.kind==='text'&&e.source.member==='iso-info');
expect(info.some(e=>e.kind==='text'&&e.text==='지반고')).toBe(true);
expect(info.some(e=>e.kind==='text'&&e.text===`EL. ${input.groundEl.toFixed(3)}`)).toBe(true);
expect(info.some(e=>e.kind==='text'&&e.text==='말뚝 하단')).toBe(true);
const iso=doc.views.find(v=>v.id==='iso')!;
expect(iso.entities.some(e=>e.kind==='dimension'&&e.label?.startsWith('H='))).toBe(true);
expect(iso.entities.some(e=>e.kind==='line'&&e.source.member==='iso-info')).toBe(true);
expect(doc.quality?.geometryUnchanged).toBe(true);expect(doc.quality?.after).toBe(0);expect(doc.quality!.minimumTextMm).toBeGreaterThanOrEqual(2.5);
const vertical=front.entities.filter((e):e is Extract<typeof e,{kind:'dimension'}>=>e.kind==='dimension'&&e.axis==='y');
const overall=vertical.reduce((a,b)=>a.value>b.value?a:b);