kintex/docs/analysis/cad-extraction.md
zio d8ef5c53df feat(m2): DWG/JPG floorplan underlay tabs + CAD extraction pipeline
Owner directives 2026-07-14~15: run the DWG pipeline; split floorplan into DWG and JPG tabs.

- tools/cad/dwg_extract.py: DWG(LibreDWG dwg2dxf) -> DXF -> layer inventory /
  keyword extraction / grid-label anchor detection (ezdxf, recover fallback)
- tools/cad/render_hall_png.py: render hall-band crops from the K1 combined
  plan+trench drawing (x0=293.5m, width 171m, Y bands 80.1m + 63m pitch,
  single load -> multi-crop). Real trench layout confirmed: 7 horizontal runs
  at ~9m pitch + central feeder (differs from assumed 6m grid seed - V61 later)
- public/media/floorplans/dwg/hall1..5.png: K1 hall underlays (3m margin crop,
  deterministic calibration from render params)
- Editor left panel new tool group with JPG/DWG tabs; DWG disabled for
  halls without CAD render yet (K2 pending). Canvas switches url+region.
- docs/analysis/cad-extraction.md: pipeline findings, limits (A3002 LibreDWG
  crash, band-to-hall numbering direction to confirm), next steps

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 00:35:12 +09:00

4.5 KiB

CAD(DWG) 실측 추출 파이프라인 — 1차 분석 (2026-07-14)

소유자 지시 "dwg 파이프라인 진행해" 결과 보고. 도구: tools/cad/dwg_extract.py. 목적: 가정값으로 시드된 트렌치(6m 격자, is_assumed=true)·비상구(변 중앙 4개소)·기둥(미반영)을 CAD 실측치로 대체(PLANNING R4).

1. 파이프라인 구성 (검증 완료)

DWG ──(LibreDWG dwg2dxf.exe, 무료·오픈소스)──> DXF ──(ezdxf)──> 레이어 추출·좌표 정규화
  • 변환기: LibreDWG 0.14 win64 (github.com/LibreDWG/libredwg/releases). ODA File Converter 불필요. 전기,설비 트렌치.dwg(10.3MB) → DXF 33.2MB 변환 성공(경고 무해).
  • 단위: KINTEX 도면 INSUNITS=4(mm) — 파이프라인이 m로 환산.
  • 파서: pip install ezdxf (1.4.x).

2. 제1전시장 전기,설비 트렌치.dwg 분석 결과

항목 발견
트렌치 레이어 5-트렌치(급배수 추정)·7-트렌치(전기 추정) — 968 세그먼트
기둥 레이어 4-COL-H·ST-COL-H·ST-COL-PIPE 등 8종 — 0.2~3m 각형 폴리라인 812개
구조 그리드 앵커 Y축 라벨이 63m 피치(y=80.1→143.1→206.1→269.1→332.1→395.1) = 홀 깊이 베이 5개 → 홀1~5 Y밴드 식별 가능. X축 라벨은 y=456.1m 행
도면 성격 트렌치 상세도 — 홀 전면 트렌치 그리드가 아니라 ①세로 트렌치 라인 스트립(밴드2·3: 홀 깊이 63m 관통, 폭 9~15m) ②단면·확대 상세(밴드1·5) 위주

판정 — V61 실측 시드 보류 사유

Y밴드(홀) 앵커는 확보했으나, 이 상세도만으로는 홀별 전체 트렌치 그리드의 완전한 실좌표를 단정할 수 없다(상세도 특성상 대표 구간만 작도). 잘못된 "실측" 시드는 가정 그리드보다 해롭다. → 현행 V5 가정 그리드(is_assumed=true) 유지.

3. 다음 단계 (승인 시 진행)

  1. 평면도 교차 분석: A3002(지상1층평면도)-z2.dwg 변환 후 동일 그리드 앵커로 트렌치 센터라인·기둥·비상구(문 심볼) 레이어를 교차 대조 — 상세도와 평면도가 일치하는 구간만 실측 채택.
  2. 기둥 반영: 원본-철골기둥 주심도.dwg(제2전시장)·4-COL-H(제1전시장)에서 기둥 실좌표 추출 → 신규 hall_pillar 테이블(V61) + 자동배치 엔진 회피(예약 영역) + 캔버스 표시.
  3. 좌표 변환 규약: CAD(mm, 전건물 좌표) → 홀 로컬 m. 홀 h의 Y밴드 [y0..y0+63], X원점은 평면도의 홀 외벽선에서 확정(트렌치 상세도 x범위는 불충분).
  4. 비상구: 평면도 문 심볼(4-DOOR·4-출입구 계열) 위치에서 실좌표 재유도.

4. 자산 목록 (zip 내용)

  • kintex1_cad_all_halls.zip: 지상1/2/3층 평면도 + 전기,설비 트렌치.dwg
  • kintex2_cad_all_halls.zip: 원본-1층 평면도(24.6MB) + 원본-철골기둥 주심도.dwg + 전력간선 평면도(77MB) + FORM

주의: CAD 원본은 gitignore(로컬 보존). DXF·중간 산출물도 커밋 금지(용량) — 리포트(txt/md)만 기록.

DWG 파이프라인 산출 (2026-07-15 진행분)

  • 파이프라인 도구: tools/cad/dwg_extract.py(inventory/extract/anchors, recover 폴백) · tools/cad/render_hall_png.py(홀 밴드 PNG 렌더). 변환기 = LibreDWG 0.14 win64.
  • 좌표 확정(제1전시장, 전기,설비 트렌치.dwg): 홀 바닥 X원점 293.5m·폭 171m, Y밴드 80.1m 시작·63m 피치 — 렌더 시각 검증 2회(try1→try2)로 캘리브레이션. 트렌치 실배치 = 가로 7열(약 9m 피치) + 중앙 세로 피더. 현행 V5 가정 6m 격자와 다름 확인 → 실측 시드(V61)는 트렌치 레이어 세그먼트의 열 좌표 정규화 후 별도 진행.
  • DWG 탭 언더레이: 홀1~5 바닥면 크롭 PNG(margin 3m) 생성 → public/media/floorplans/dwg/ 빌드 내장. 에디터 좌측 "도면" 툴그룹에 JPG/DWG 탭 — DWG 미보유 홀은 탭 비활성. 캘리브레이션은 렌더 파라미터에서 결정적(margin/(W+2m) 분율).
  • 주의/한계: ①밴드 번호↔홀 번호 방향(남→북 가정) 도면 라벨로 미확증 — K1 홀 5개는 구조 동일해 언더레이 표시는 유효하나 표기 확정 필요 ②A3002 평면도 DWG는 LibreDWG 크래시 (r2000 다운컨버전 산출물도 ezdxf 파싱 실패) — 트렌치 통합도면으로 대체 ③제2전시장(H6~10) 렌더는 원본-1층 평면도.dwg 변환 검증 후 확장.