공용 파일(main.ts·index.html·style.css)에서 서로 얽혀 있어 한 커밋으로 묶음. - 지반: ① 형상 프로젝트 지반모델 관리창(생성·JSON 불러오기·교각별 비교·선택 적용), 프로젝트 JSON 내장 groundModel 추출, 교대 8행 통합 적용·공통지형 중복격자 제외 - 재료표·수량: 상단 ⑤ 메뉴·배근 바로가기, 결과 교각/탭 기억, 수량 워크북·정합 보정 - 랜딩: 옥성교 6교각 히어로 이미지·투영 강조점·좌→우 광선·지형 라운드/도로 연결 - 검증 스크립트(verify-project-ground/ground-abutments/okseong-user-files/quantity-*/landing-hero 등) 정본: DOC/04_실행/실행_*_2026-11-09_v0.1.00.md Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
교각 일반도 자동작성
2026-11-04 기준 양식 보강: REFERENCE_PARITY.md. 도곽 BLOCK/38개 ATTRIB, 점 치수, 원본 절단 기호, 말뚝 중심 및 제원 지시선, 도곽 개별 CAD 색상 보존을 추가했다.
현재 프로젝트에서 생성된 PierModel을 읽어 정면·측면·두부보 평면·기초 평면·기둥 A-A 단면을 벡터 도면으로 작성한다. 화면 캡처나 별도 교각 모델은 사용하지 않는다. 현재 단계는 기존 형상 기반의 검토용 일반도이며 최종 납품 도면의 모든 상세 표현을 완성한 단계는 아니다.
품질 개선 및 실제 DWG 출력
최신 변경과 검증 범위는 QUALITY_REPORT.md를 참고한다. 실제 문자·치수 점유 영역 기반 자동 배치, 치수 레인, 간섭 검사 패널, DWG 2000 변환 및 재읽기 검증을 추가했다. 개선 전후/원본 비교와 검증된 DWG는 output/quality-review/에 있다. 생성 표/일반 문자는 최소 2.5mm, 치수 2.8mm, EL 2.6mm이며 원본 도곽/NOTE 문자는 별도 설정을 유지한다. 이번 외부 변경은 DWG 서버 경로를 등록하는 vite.config.ts에 한정한다.
첨부 DWG 도곽·노트·키플랜·등각도 반영 (2026-11-03)
첨부된 Downloads DWG와 폴더의 참고 DWG는 SHA-256이 동일함을 확인했다. 첨부가 CAD에서 열려 있어 읽기 공유 모드로 해시를 확인했으며 원본은 변경하지 않았다. 원본의 CXBLKA1 도곽 블록을 분해해 로고·경계·표제란의 실제 벡터 261개, 편집 가능한 ATTRIB 38개, NOTE 원문 21줄을 추출했다. 곡선은 0.05mm(A1 기준) 오차로 폴리라인화했고 로고의 해치 내부 구멍과 회색 표제란도 보존했다. 실제 데이터는 reference-template.ts, 재추출 도구는 extract_template.py이다.
원본의 841×594 기준 배치 체계를 A1/A2/A3에 맞춰 적용했다. 횡단면/측면은 좌측 상단, 두부보/기초 평면은 하단, ISOMETRIC VIEW와 상세 A는 우측 중간, KEY PLAN/NOTE/LEGEND/REFERENCE는 우측 끝, 받침 변화 치수표는 우측 하단, 원본 표제란은 최하단이다. 받침 높이·표고표는 도면 종류의 별도 보기와 DXF 모델 공간에서 유지한다.
도곽·노트 편집 / 불러오기 버튼에서 표제란 38개 값, 노트, 참조 도면, 문자 크기, 원본 로고/도곽 표시, 키플랜 시종점 표기를 바꿀 수 있다. {{project}}, {{bridge}}, {{pier}}, {{scale}}, {{paper}}를 현재 도면 값으로 치환한다. 설정은 프로젝트 이름/교량별 브라우저 저장소에 보관하며, 전체 도곽의 CAD 객체/속성 위치가 포함된 JSON으로 저장·불러올 수도 있다. 사용자 도곽은 내보낸 JSON의 프리미티브/좌표를 수정해 교체할 수 있다. 임의 DWG를 브라우저에서 직접 해석하는 기능은 아니다. 일반 프로젝트 .pzr 저장 파일에 도곽 설정을 추가하는 코어 변경은 하지 않았다.
NOTE는 원본의 강도/시공 문구를 복사해 편집 가능한 참고 문서로 제공한다. 원본 fck=35MPa를 현 프로젝트의 재료값으로 자동 지정하거나 검증된 설계조건으로 간주하지 않는다. 편집창과 도면에 참고 원문임을 표시하며 현 프로젝트 조건에 맞게 수정한다. 노트 영역 초과 시 경고한다.
- 키플랜: 현재 프로젝트에 실제 생성된 교각들의 E/N 좌표와 코핑 외곽을 사용한다. 교각 연결 방향으로 배치하고 북향 화살표도 함께 회전한다. 선택 교각을 구별하고 이름/시종점 표기를 넣는다. 연결선은 교각 중심 연결선이며, 미제공 도로 선형·교대를 추정하지 않는다.
- 아이소메트릭: 기존 3D 부재 프리즘과 원기둥을 벡터 등각 투영한다. 네 방향 전환과 부재별 면 음영을 지원한다. 생략 옵션을 켜면 일정 단면의 긴 구간을 잘라 표시하고 ‘생략’으로 명시한다. 원래 3D 모델은 변하지 않는다.
- 해치: 실제 외곽선으로 콘크리트 면을 채우고 버림/말뚝 등에 ANSI31 표현을 적용한다. 생략 구간의 해치는 실제로 잘라 빈 구간을 채우지 않는다. DXF에 네이티브 HATCH를 쓰고 로고 등 다중 경계는 내부 구멍을 유지한다. 레이어 및 해치 옵션으로 표시를 전환한다.
- 추가 치수: 코핑 폭/높이와 실제 끝단 높이, 기둥 지름/다주별 높이, 기초 개별 폭/길이, 말뚝 배치 간격, 받침 끝단 여유/열간 간격을 추가했다. 기존 전고·EL·받침 간격도 유지한다. 각 값은 실제 모델의 좌표/투영점으로 계산한다. 모델에 없는 모따기/변단면을 원본처럼 보이게 만들지는 않는다.
추가 모듈은 template.ts, sheet-editor.ts, project-views.ts, hatches.ts, component-dimensions.ts이며 이번 변경은 전부 도면작성 내부이다. 원본 도곽의 편집 값과 표시 객체는 화면/SVG/출력/DXF Layout1에서 공유한다. DXF의 정면/측면/평면 모델 공간은 생략하지 않은 실치수이며, 아이소메트릭은 제목에 명시한 표시 방식의 투영 그림이다.
검증: 신규 도면 테스트 14개 통과, 샘플 교각 63개 생성/원본 불변성 확인. 타입 검사·프로덕션 빌드 통과. 1366×768/1920×1080에서 도곽/노트 수정, 프로젝트별 브라우저 저장, JSON 내보내기/불러오기, 해치 전환, 아이소메트릭 방향, 교각 변경·형상 갱신·기존 탭 전환을 확인했다. 전체 테스트는 538개 중 534개 통과하며 기존 실패 4건은 유지된다. DXF 감사 오류/수정 0건이며 네이티브 치수값과 실제 도면 객체를 재비교했다. 실제 AutoCAD 열기는 미검증이다.
원본 일반도 체계 보완 (2026-11-03)
기둥과 말뚝의 긴 일정 단면 구간을 생략선으로 잘라 표시한다. 기본값은 생략 표현이며 왼쪽 체크박스에서 전체 길이로 전환할 수 있다. 다주 교각은 모든 기둥에 공통되는 일정 단면 구간만 생략하므로 두부보/기초 접합부를 자르지 않는다. 실제 PierModel·원본 도면 객체·치수값·EL은 변경하지 않는다. 정면·측면은 자동 설정에서 동일 축척을 사용하며 기둥 생략부에는 첫 기둥의 실제 지름 A-A 단면을 함께 표시한다.
원본 일반도의 실제 표 제목과 항목을 확인했다: 받침 및 교좌면 상세 변화 치수표 / NO., A, B, C, D, S(%), 솔플레이트 크기(교축/교직), 두께 T/T1/T2. 이 체계를 신규 일반도의 우측에 적용하고, EL.X와 h1/h2/h3/T/E는 별도 높이·표고표 보기로 제공한다. 모든 받침을 전·후열 및 실제 번호로 구분한다. 평면도에는 원형 번호와 리더를 붙인다. 상세 A는 선택한 받침과 기존 프로그램의 순서별 짝을 그리며, 좌측 받침 선택에서 다른 번호로 전환할 수 있다. 열별 개수가 달라도 짝이 없는 받침을 임의로 연결하지 않는다.
- A/B/S는
BlockModel.plan, 솔플 크기·두께는 기존solplateGeometry에서 가져온다. T1/T2는 같은 모델의 경사 규칙을 사용한다. - C는 전열 교좌면 축에 투영한 전·후열 중심 간격이며 전열 행에 표기한다. 꺾임과 회전은 기존 stretch와 블럭 회전을 사용한다.
- D는 실제 일체 교좌면이 있는 경우에만 모델의 일체 길이를 표기한다. 분리 교좌면 및 미대응 받침에 일체 길이를 만들어 넣지 않는다.
- h1=블럭 높이, h2=몰탈 높이, h3=받침 높이, E=h1+h2+h3+T, EL.X=몰탈 상면이다.
- 현재 63개 샘플에는 본체·솔플레이트 계획 제원 A/B/S가 저장되어 있지 않다. 해당 값과 파생값은 미확인, 비해당 C/D는 **—**로 명확히 구분한다. 원본 일반도의 700/640/1298/2500 같은 특정 교각의 값을 다른 교각에 복사하지 않는다. 모델에 실제 제원이 있을 때는 자동으로 상세와 표에 반영한다.
- 화면과 출력, DXF
Layout1은 같은 벡터 도면 객체를 사용한다. DXF 모델 공간은 생략하지 않은 실치수 mm를 유지하고Layout1은 생략 표현·상세·치수표를 용지 mm로 담는다. Layout1 치수는 실값이 적힌 표시 객체이며 모델 공간에는 네이티브 DIMENSION을 유지한다.
이번 보완 코드는 전부 도면작성 내부에 한정했다. 기존 탭 연결 코드에는 추가 변경을 하지 않았다.
실행
기존 프로그램을 실행하고 프로젝트/샘플을 연 다음 철근배근 → 도면작성 → 재료표 사이의 도면작성 탭을 선택한다. 교각을 고르면 생성된 형상을 즉시 표시한다. 기존 형상 입력을 수정했지만 재생성하지 않았다면 도면은 생성본을 유지하고 미반영 안내를 표시한다. 기존 화면에서 형상을 재생성한 뒤 돌아오면 새 모델을 자동 반영한다.
왼쪽에서 교각·표시 도면·용지·축척·치수/중심선/EL·레이어를 설정한다. 중앙 화면은 휠 확대·축소, 드래그 이동, 전체 맞춤, 객체 클릭 시 원본 부재 확인을 지원한다. 개별 도면 선택 시 다른 도면은 숨긴다. 상단에서 품질 검사, DXF/DWG 내보내기 및 출력 미리보기, 하단에서 SVG 저장을 실행한다. 출력은 브라우저의 인쇄/PDF 기능을 사용한다.
도면 종류에서 상세 A, 받침 및 교좌면 상세 변화 치수표를 고르면 해당 부분만 크게 확인할 수 있다. 용지/축척 설정은 일반 투영도에 적용하며 상세는 자체 맞춤 축척, 치수표는 일정한 용지 글자 크기를 유지한다.
실제 참고 도면 분석
분석 대상은 이 폴더의 [교각-T 형] 01 일반도_20260619.dwg와 02 배근도이다. 기존 LibreDWG 변환기를 읽기 전용으로 사용해 .cache에 DXF를 만들고, ezdxf로 객체·레이어·치수 스타일·배치·문자를 분석했다. 원본 일반도를 렌더링해 실제 배치도 확인했다. 상세 결과와 원본 해시는 reference-analysis.json, 재실행 도구는 analyze_reference.py이다. 원본 DWG는 변경하지 않았다.
- 일반도 원본 단위는 mm(
INSUNITS=4). 모델 공간에 치수가 다른 T형 교각 도면과 설명이 여러 개 배치되어 있다. 특정 한 교각의 치수를 템플릿으로 복제하지 않았다. - 상단에는 횡단 정면과 측면 단면, 하단에는 코핑·기초 평면, 우측에는 상세/주기, 최하단에는 표제란을 배치하는 체계를 사용한다.
- 주요 레이어는
CS-DIML,CS-DIMT,CS-CONC-REFR-HIDD,CS-XXXXCS-CENT,CX-BORD-*이며 외형·숨은선·중심선·치수·문자를 구분한다. 신규 문서는 대응되는 의미별 레이어와 도곽/해치 레이어를 구분한다. - 일반도에는 DIMENSION 150개, TEXT 575개가 있다. 주요 원본 문자 높이 300/350/360, 제목 500/600은 원본 모델 공간 값이다. 신규 문자는 용지 기준 최소 2.5mm (치수 2.8mm, EL 2.6mm)를 선택한 축척에 따라 모델 공간으로 환산한다. 특정 원본의 확대 배치 치수를 그대로 적용하지 않는다.
- 치수 스타일에
HS_050(dimscale=50, dimtxt=3, dimlfac=1),1_1(typ1)등이 있다. 모델 형상은 실치수, 도면별 표시 축척은 별도라는 원칙을 적용한다. - 원본에는 기둥 절단 기호, 변단면 기초 및 모따기 등 현재 생성 모델에 없는 상세가 있다. 이를 임의로 만들지 않는다.
- 초기 배치 분석에서는 Model의 A3와 Layout1의 Letter 메타데이터가 서로 달랐다. 후속 도곽 블록 분석에서
CXBLKA1의 841×594 비율과TD_HSCAL=S=1:200@A3속성을 직접 확인했다. 기본 A3 가로를 유지하되 새 모델의 배치 축척은 형상에 따라 자동 산정하고 사용자가 조정할 수 있다.
데이터 흐름과 모듈
기존 state.project / state.active / state.piers[].input·model → DrawingSnapshot → projection.ts → drawing.ts → svg.ts / dxf.ts → workspace.ts
| 파일 | 역할 |
|---|---|
types.ts |
mm 단위 도면 객체, 의미 레이어, 원본 부재 연결, 용지/축척 형식 |
projection.ts |
기존 로컬 프레임/mitre 클리핑 재사용, 부재 프리즘·원기둥의 실제 좌표 투영과 외곽선 계산 |
breaks.ts |
기둥·말뚝 공통 일정 단면 구간의 생략, 표시 좌표 변환과 생략선 |
bearing-detail.ts |
실제 받침별 변화 치수표·높이 표, 선택한 교좌면의 단면·평면 상세 |
presentation.ts, sheet.ts |
실치수 객체를 생략 표현으로 배치하고 화면/출력/DXF Layout1에서 공유 |
drawing.ts |
도면 배치, 중심선, 실치수 치수선, 표고, 받침 번호/간격, 기둥 단면 |
svg.ts |
동일 도면 객체의 벡터 미리보기·출력, 용지 좌표 환산 |
dxf.ts |
실치수 DXF LINE/LWPOLYLINE/CIRCLE/TEXT/DIMENSION, 레이어·선종·부재 XDATA |
workspace.ts, workspace.css |
독립 작업 화면, 설정, 선택, 줌/팬/맞춤, 내보내기/출력 |
drawing.test.ts |
실제 샘플과 꺾임 형상의 기하·단위·축척·원본 불변성 검증 |
verify_dxf.py |
DXF 재읽기, 감사, 실치수 치수값·부재 연결 검증 |
외부 수정은 index.html의 탭/화면 컨테이너 추가와 src/main.ts의 상태 전달·탭 라우팅에 한정한다. 코어 형상/철근/재료표 계산은 수정하지 않았다.
기존 stretchMatrix, mitrePlane, blockFramePoint, solplateGeometry를 그대로 사용한다. 기존 3D 장면의 (E-pivot.E, EL, -(N-pivot.N)) 좌표를 첫 로컬 축으로 정투영한다. 정면은 축선 방향 거리/EL, 측면은 법선 방향 거리/EL, 평면은 축선/법선 거리이다. 화면 북방향으로 임의 재회전하거나 지도 좌표를 보정하지 않는다. 기존 m 단위를 도면 mm로 환산한다. 각 객체의 교각명·부재명·인덱스는 화면 선택과 DXF PZ_GA XDATA로 추적한다.
T형·2주형(π형)·3주형, 꺾임/단차와 비대칭 받침은 생성된 모델의 실제 부재 배열에서 읽는다. 정투영 치수는 꺾인 축선의 펼친 길이와 다르므로 경고한다. 전체 외곽 치수에는 표시된 버림/말뚝 등도 포함된다. 주요 수직 치수는 첫 기둥 순높이, 첫 기초 두께, 코핑 전체 높이 및 전체 외곽 높이이며 다주 교각의 개별 높이는 형상과 EL을 함께 검토해야 한다.
CAD 및 출력 기준
DXF 모델 공간은 1:1 mm이다. 도면끼리 겹치지 않도록 뷰별 평행이동만 수행하며 구조물 좌표를 용지 축척으로 줄이지 않는다. DIMENSION은 네이티브 치수 객체와 익명 표시 블록을 함께 저장한다. 치수값은 투영한 실제 두 점으로 산정한다. EL 문자는 원래 m 표고를 유지한다. A3/A2/A1 용지 배치는 화면/인쇄와 DXF Layout1에 공유한다. Layout1은 네이티브 선·폴리라인·원·문자로 작성한 용지 도면이며 모델 공간을 참조하는 연동 뷰포트는 아니다.
레이어: STRUCTURE, HIDDEN, CENTER, DIMENSION, TEXT, ELEVATION, BEARING, SECTION, HATCH, FRAME. HIDDEN은 기본 숨김이며 켜면 부재별 투영 내부 형상선을 표시한다. 완전한 부재 간 은선 제거 엔진은 아직 없다.
검증 (2026-11-03, 상세 수치·한계는 QUALITY_REPORT.md 참조)
- 타입 검사 통과. 프로덕션 번들 생성 통과(기존 대형 번들 경고는 유지).
- 신규 14개 테스트 통과. 샘플의 63개 교각(T형 31, 2주형 32)을 모두 투영했다. 원본 모델 불변성, mm 환산, 치수 산정, 용지/축척 변경 시 구조 좌표 불변성, 생략 전후 실제 치수 불변성, 받침 제원이 있는 경우와 없는 경우의 표/상세를 확인했다. 도곽/노트 편집과 JSON 검증, 키플랜의 실제 교각 목록, 등각 방향, 해치 절단도 검증했다. 63개 자동 배치에서 용지 범위 초과 경고는 없었다.
- 명시적인 검증 전용 60° 꺾임 T형/2주형/3주형으로 mitre 클리핑, 평면 기둥 수 및 유한 좌표를 확인했다. 검증 형상을 프로젝트 데이터로 저장하거나 사용하지 않는다.
- Chrome 1366×768 / 1920×1080 화면 검증. 도면 생성, 교각 변경, 개별 도면 선택, 확대/축소/팬/맞춤, 레이어, A2/A3 변경, DXF 다운로드, 출력 미리보기, 기존 철근/재료표/형상 탭 전환을 확인했다. 페이지 오류 0건, 가로 넘침 없음.
- 기존 코핑 길이 입력을 500mm 변경하는 브라우저 검증에서, 재생성 전에는 도면이 유지되고 미반영 안내를 표시했다. 재생성 후 도면이 자동 갱신됨을 확인했다. 검증 프로젝트는 저장하지 않았다.
- DXF 재읽기와 감사에서 오류/수정 0건. 모든 모델 공간 치수의 측정값을 원본 도면 객체와 10⁻⁶mm 허용치로 비교했다. Layout1 객체 및 부재 XDATA, 원본 도곽과 네이티브 해치를 확인하고 실제 DXF Layout1도 별도 렌더링해 검토했다. 세로 치수의 회전각 저장 위치 오류를 재읽기 검사로 찾아 수정했다. 최신 수치는
.cache/dxf-validation-generated-general.json에 기록한다. - 전체 테스트 538개 중 534개 통과, 기존 실패 4개 유지:
axis.test.ts,bearing-coordinate-frame.test.ts,integrated-block.test.ts,validate-and-foundation.test.ts. 다른 기능의 좌표/검증 규칙은 이번 범위에서 변경하지 않았다. 전체 통과가 아니므로 자동 커밋하지 않았다. - 실제 AutoCAD 실행 환경이 없어 AutoCAD에서 직접 열기 검증은 미실시. ezdxf 감사 통과와 AutoCAD 실검증을 구분한다.
재실행(프로젝트 루트):
npm run typecheck
npx vitest run 도면작성/drawing.test.ts
& ./pierzainer_ground/.venv/Scripts/python.exe 도면작성/verify_dxf.py
npx vite build --outDir 도면작성/.cache/build
분석·검증 캐시, 다운로드한 DXF와 미리보기는 .cache/에 모으고 Git에서 제외한다. 실행 소스에서 캐시를 읽지는 않는다.
후속 개발 및 한계
- 원본 도면의 정확한 선가중치/표제란/모든 문자 충돌 회피까지 재현하는 최종 납품용 정리는 추가 작업이다. 기둥·말뚝 생략선과 원형 받침 번호, 받침 상세/치수표는 구현되어 있다.
- 모델에 없는 변단면 기초·모따기·철근·받침 실형상을 추정하지 않는다. 받침 계획 제원이 없는 경우 블럭/몰탈과 중심 위치만 표시하고 누락 안내를 보여 준다.
- A-A는 첫 기둥의 일정한 원형 단면이다. 생략부에 함께 표시하고 개별 단면 보기로도 확인한다. 임의 절단 위치, 복잡한 부재 단면, 모든 원본 상세의 자동 인식은 미구현이다.
- 부재 간 완전한 가림 판정, CAD 실제 글꼴을 포함한 완전한 간섭 판정, 다주 교각의 모든 개별 높이 연쇄 치수, 모델 공간과 연동되는 DXF 뷰포트, AutoCAD 실검증은 후속 범위이다.
- 대호지교/감북교의 기존 현장타설말뚝 후속 화면 오류와 승천천교의 원본 방위각 누락 등 기존 샘플 제약은 그대로 유지한다. 도면작성 때문에 외부 기능을 수정하지 않았다.
아이소메트릭 높이·EL 정보
표고 EL 설정이 켜져 있으면 아이소메트릭 구조물의 실제 투영점에서 지반고, 말뚝/기초 하단, 교좌면(블럭 상면), 몰탈 상면으로 지시선을 연결한다. 기둥 높이 H는 실제 상·하단 사이 치수선(mm)으로 표시하고 EL은 m 단위다. 방향 변경 시 동일한 투영식을 사용하며 구조물 아래 정보 목록은 제거했다. 현재 각 부재 종류의 첫 부재를 지시하며 없는 부재는 지시선을 생성하지 않는다. 지반고는 입력 지반고가 첫 기둥 수직선과 만나는 높이를 가리키며 지표면 형상을 새로 생성하지 않는다. 치수/EL 표시 설정을 따르고 모델은 변경하지 않는다.
기초 좌표·말뚝 주석
기초 평면에는 현재 직사각형 기초의 실제 네 모서리 X(N)·Y(E)를 m 단위 소수 3자리로 지시한다. 로컬 모델점을 회전·위치변환한 좌표를 사용하며, 참고 도면의 모따기 형상·좌표를 복사하지 않는다. 횡단면도에는 기초 상단의 C-C 절단 위치 지시선이 있고 기초 평면 제목과 연결한다. 기존 A-A 기둥 단면 지시선도 유지한다. 말뚝 생략 경계의 간격을 좁혀 이중 꺾임으로 표시하며 모델 공간과 길이값은 그대로 둔다. 횡단면/측면에는 입력 말뚝 종류(없는 경우 미확인), 본수, 실제 외경, 확인 가능한 두께 및 모델 길이 범위를 지시선 주석으로 표시한다. '내부굴착복합말뚝' 등 미입력 공법명은 추정하지 않는다.