kintex/docs/analysis/cad-extraction.md
zio 02c6b8ddee fix(m2): V67 K1 band-to-hall mapping corrected - was reversed
Owner directive 2026-07-16: verify the K1 band-hall numbering assumption.

Decisive evidence: 832 electrical circuit labels (P{panel}-{hall}{zone}-{no})
in the trench drawing, zero exceptions: band1=hall5(165) band2=hall4(168)
band3=hall3(168) band4=hall2(168) band5=hall1(163) => band n = hall (6-n).
The previous assumption (band n = hall n) was WRONG - only hall 3 matched by
luck. Mirror features in official JPGs (notch corners, exterior entrances)
independently agree.

- V67: delete all K1 measured rows (old mapping) and reseed with corrected
  generators (trench 875, pillars, obstacles, K1 exits). Assembly strips the
  V61 y-flip UPDATE (would double-flip) and the global obstacle DELETE
  (would wipe K2 rows)
- Swap DWG-tab underlays hall1<->hall5, hall2<->hall4
- All 5 generators now canonically map band = 6 - hall

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 06:53:55 +09:00

14 KiB
Raw Permalink Blame History

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 변환 검증 후 확장.

K2(제2전시장) 홀 6~10 렌더 확정 (2026-07-15)

원본-1층 평면도.dwg(24.6MB → DXF 106.6MB) 기준. 대형 DXF 대응: 구조 레이어 슬림 추출(k2_slim.py 패턴, 지하층 xref·TOIL·INSUL 등 제외 145k→53k 엔티티) + 고속 렌더러 tools/cad/fast_render.py (LineCollection 일괄 — ezdxf drawing addon의 10분+ 병목을 수십 초로) + --rotate/--center(기울어진 홀 축정렬).

확정 좌표(전건물 m 좌표계, floor=바닥면·crop=floor+3m):

회전 기준(center) floor u(폭) floor v(깊이)
H6 -12° (530,405) 482..542 (60m) 350.5..443.5 (93m)
H7 439..529 (90m) 215.5..341.5 (126m)
H8 439..529 (90m) 89.5..215.5 (126m)
H9 -11° (245,155) 196..295 (99m) 95.5..227.5 (132m)
H10 +11° (255,330) 194.5..293.5 (99m) 250..382 (132m)

검증: 장선 각도 클러스터(k2_hall_finder/tilt_measure)로 각도·깊이 프로그램 측정(H6 93m·H9/H10 132m· H7/H8 블록 252m=126×2·폭 90m 정확 일치) + 회전 프로브 렌더 시각 확인(6·9·10) + 최종 crop 확인(8). 홀 번호 배치 근거: 미니맵(6 북동→7→8 남측 축정렬 스택, 9 남서·10 북서 날개) + 치수 일치.

한계: 홀 번호는 미니맵·치수 정합 기반(도면 내 텍스트 라벨 직접 확인은 아님 — 치수가 홀별로 상이해 오배정 가능성 낮음). 트렌치 실좌표 V61 시드는 K1과 함께 후속.

V61 트렌치 실측 시드 (2026-07-15)

  • 레이어 표기 함정: 실측 채널은 5-트랜치(트랜치) — 앞선 트렌치 키워드 탐색이 놓쳤던 표기. 추출 키워드는 두 표기 모두 매칭(extract_trench_seed.py).
  • 실측 구조(K1 홀1~5 공통, 홀 간 완전 일치 — 밴드 정렬 교차 검증): 가로 채널 7개, 로컬 y = 5.85/14.8/23.9/32.9/41.9/50.9/59.8m(피치 9.0m), 연장 x[20.6..170.2]m(쌍선 폭 ~1.3m 병합 중심선).
  • V61: 홀별 가정(is_assumed) 포인트 삭제 → 채널 따라 6m 간격 실측 포인트 875개 (H{n}-RT-{행}-{k}, is_assumed=false). 공급 플래그는 V5 정책 유지(위치만 실측 대체). K2(H6~10)는 가정 유지 — K2 도면(원본-1층 평면도)에 트렌치 레이어 부재, 전력간선 평면도(77MB) 분석 후속.
  • 후속: FloorplanCanvas의 합성 트렌치 그리드(9m 가정선)를 HallInfo.trenches 실데이터 표시로 교체 검토.

V62 기둥 실측 시드 + 자동배치 회피 (2026-07-15)

  • K1(H1~H5): CAD 4-COL-H 사각 중심 추출(0.3~3m 각형·0.8m dedupe) — 공식 주석 교차검증 (남측 벽 기둥 x=54/117m ↔ CAD 53.6/116.6m 일치). 홀별 10~29개(벽면·부속실 기둥 포함).
  • K2(H7~H10): CAD에서 기둥 원 미검출(주심도는 별도 원점·심볼 원 r0.1m뿐, 사이트 평면은 블록 내 부재) → 공식 홀 도면 치수 주석으로 시드: midline 내부 기둥 1개(H7/H8 x=40.1·H9/H10 x=48.9, ø2.3m). H6는 근거 없음 — 미시드(한계).
  • V62: hall_pillar 테이블(+GIST 불필요·hall_id 인덱스) + 74개 시드 + V61 트렌치 y축 보정 (RT 포인트가 CAD y 미반전으로 시드됨 — 도면 상단 y=0 기준으로 63-y 반전, 생성기도 정본 수정).
  • 엔진: autoGenerate가 기둥 반경+0.6m 버퍼를 예약 영역으로 — 겹치는 부스 셀 배치 제외.
  • 캔버스: 구조 레이어(기둥·비상구 토글)에 기둥 원 표시(HallInfo.pillars 계약 확장, NON_NULL 호환).

V63 벽·계단·엘리베이터·문 장애물 인식 (2026-07-15)

  • 추출(K1 H1~H5): 장애물 레이어(WALL/DRYWALL/조적/석고/판넬·STAIR/계단·ELEVATOR·DOOR/출입구)를 1m 셀 래스터 → 연결 성분 → 행 스트립 분해(L자 벽 런의 bbox 뻥튀기 방지) → 60개 사각 영역. 좌측 벽선(x0~1m)·우측 에지 문(x169~171)·H1 하단 부속실·H5 상단 부속실 벽 등.
  • V63: hall_obstacle(kind: stair|elevator|door|wall) + 시드. 자동배치 회피 버퍼: 문 1.0m(접근 클리어)·기타 0.3m. 캔버스 구조 레이어에 사각 표시(문=녹색톤 구분).
  • 한계: ①벽선 기반 — 밀폐 실내 채움 아님(단, 외곽 여유 5m+벽 스트립 차단으로 실배치 유입 방지) ②K2(H6~10)는 장애물 레이어 구조 상이(석고보드·경량철골 등 xref 평탄화)로 신뢰 추출 보류.

V64 K2 장애물 시드 (2026-07-15)

  • K1과 동일 방식 + 홀 프레임 회전 변환(±11~12°)으로 H6~H10에서 31개 스트립 추출.
  • 특기: H9/H10 midline(y≈66)의 전폭 door 스트립 = 9A/9B·10A/10B 분리 셔터 트랙(가동벽) — door 1.0m 버퍼 회피로 셔터 가동선 클리어 확보(운영 정합). H7/H8은 서/동측 에지 문 + midline 포켓.
  • 레이어: ELEVATOR·STAIR·DOOR·석고보드·경량철골·시멘트판넬·WALL 계열(k2_slim 구조 추출본).

V65 비상구 실좌표 + 캔버스 트렌치 실데이터 (2026-07-16)

  • V65 비상구: CAD DOOR 레이어 경계 문 클러스터(±2m 밴드) 변 투영 — H1~H8 실측 34개로 가정 비상구(변 중앙 4개소) 대체, H9/H10은 경계 문 신뢰 부족(0~1개)으로 가정 유지. V63/V64 장애물 door 스트립과 좌표 교차 일치(같은 소스) 검증. 생성기 extract_exit_seed.py.
  • 캔버스 트렌치: 합성 9m 그리드 → HallInfo.trenches 실데이터 공급 포인트 도트(r0.5m, supplies 툴팁) 표시, 실데이터 없으면 합성 그리드 폴백 유지.
  • 잔여: K2 트렌치(전력간선 77MB 도면) — 별도 진행. → V66에서 해소.

V66 K2 트렌치 실측 시드 (2026-07-16)

  • 소스 확정 — 원본-1층 평면도.dwg (홀 프레임과 동일 도면·동일 원점): V61 때 "K2 도면에 트렌치 레이어 부재"로 판단했던 것은 오판 — 트렌치 선들이 xref 블록 내부(UT TRENCH 블록 563세그 등 4개 컨테이너, 897세그)에 있어 최상위(iterdxf) 순회에 안 잡혔던 것. 스트리밍 태그 파서로 BLOCKS+ENTITIES 전체를 파싱하고 INSERT 체인 변환을 적용해 복원(4GB RAM 노트북 안전 — ezdxf 미적재).
  • 전력간선 평면도(E3-59~69, 77MB)는 교차검증용: ①트렌치는 원본-1층 평면도$0$전시장 유틸라인 xref(단일 삽입 @ (858.96, 50.75)m, 스케일1·회전0)와 *MS 직접선에 존재 ②각도 클러스터 0°/±11°/12° = 홀 배치각과 정확 일치(좌표계 회전 정합 증명) ③채널 구조 = 가로 쌍선·9m 피치로 원본 평면도와 일치. 유틸라인 xref 콘텐츠가 x=509.2m에서 잘린 크롭본(H7 서측 20m·H6 대부분 누락, H8만 전깊이)이고 채널 위상이 원본 대비 ~3.5m 어긋나 시드 소스로 부적합 → 프레임과 자동 정합되는 원본 평면도를 정본으로 채택.
  • 추출(생성기 tools/cad/extract_trench_seed_k2.py, 결정적 재생성): 홀 프레임(±11~12° 회전) 로컬 변환 → 수평(|dv|≤1m) 세그를 프레임에 Liang-Barsky 클리핑(중점 판정은 서측으로 길게 뻗는 장선을 놓침) → 연장 ≥30m → 행 스냅 0.5m·쌍선 병합 1.5m → 채널 중심선 → 6m 간격 포인트(V61 규약).
  • 결과(65채널·941포인트): H6 9채널(y7.5~86.9, 피치 9m 기본·구조 베이 2곳 12.5m) / H7 14채널(y5.8~121.6) / H8 14채널(y4.6~121.1) / H9 14채널(y7.1~124.1) / H10 14채널(y8.1~125.1). H7/H8 중간 행 서측 시작 x≈9~13(계단 코어 회피), H9/H10 하부 행 동측 단축(에스컬레이터 코어) — CAD 원선 그대로. 오버레이 검증(scratchpad v66_overlay.png): 시드 포인트가 쌍선 채널 위 정위치.
  • V66: H6~H10 가정(is_assumed) 포인트 삭제 → 실측 941포인트(H{n}-RT-{행}-{k}, is_assumed=false). 공급 플래그 V5 정책 유지. 이로써 전 홀(H1~H10) 트렌치 실측 완료 — PLANNING R4 트렌치 잔여 해소.
  • 한계: ①포인트 6m 간격은 샘플링 규약(채널 위치·연장만 실측) ②채널 중간 국소 단절(H9 x78~86 일부 행)은 min..max 연속으로 근사(K1 동일 단순화) ③세로 피더 트렌치는 M4 후속.

K1 밴드↔홀 번호 확증 — 역방향 확정·V67 교정 (2026-07-16)

  • 확증 근거(결정타): 트렌치 도면의 전기 회로 라벨 P{패널}-{홀}{구역}-{번호} 832건 전수 집계 — band1=홀5(165) band2=홀4(168) band3=홀3(168) band4=홀2(168) band5=홀1(163), 예외 0. band n = 홀 (6-n) (기존 "band n=홀 n" 가정 오류 — 홀3만 우연 일치).
  • 교차 특징 검증: 공식 JPG의 거울상 특징(홀1 노치 좌상단·외부 출입구 상단 vs 홀5 노치 좌하단·기둥 상단)이 역방향 매핑과 정확 일치. H1 재배정 기둥 세트(상단 부속실 포함)가 hall1.jpg 좌상단 노치와 정합.
  • V67: K1 실측 행 전체 삭제(구 매핑) → 교정 생성기 재생성분 재시드(트렌치 875·기둥 74·장애물 60· 비상구 K1분). 조립 시 기둥 SQL의 V61 y-플립 UPDATE(이중 반전 위험)·장애물 전역 DELETE(K2 오삭제 위험) 제거.
  • DWG 탭 PNG: hall1↔hall5, hall2↔hall4 스왑. 생성기 5종(trench/pillar/obstacle/exit/render) 매핑 (6-n) 정본화.