kintex/docs/analysis/cad-extraction.md
zio 6be091aa7c feat(m2): V61 measured trench seed for K1 halls 1-5 from CAD
Owner directive 2026-07-15: seed real trench coordinates.

- tools/cad/extract_trench_seed.py: deterministic generator - extracts trench
  channels from CAD layer 5-tranchi (spelling differs from expected), merges
  paired channel edges into centerlines, emits supply points every 6m
- Measured layout (identical across halls 1-5, cross-validating band alignment):
  7 horizontal channels per hall, 9.0m pitch, y=5.85..59.8m local,
  extent x[20.6..170.2]m
- V61: delete assumed grid points for H1-H5, insert 875 measured points
  (is_assumed=false); supply flags keep V5 policy; K2 stays assumed (no trench
  layer in its plan drawing - power trunk drawing analysis is follow-up)

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

98 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 | 0° | — | 439..529 (90m) | 215.5..341.5 (126m) |
| H8 | 0° | — | 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 실데이터 표시로 교체 검토.