Owner directive 2026-07-15: extract pillars and make auto-placement avoid them. - tools/cad/extract_pillar_seed.py: K1 pillars from CAD layer 4-COL-H (cross-validated against official drawing dims 54/117m south wall pillars); K2 H7-H10 from official drawing dimension annotations (one interior midline pillar each, dia 2.3m); H6 not seeded (no source - recorded as limitation) - V62: hall_pillar table + 74 seeds; also corrects V61 trench y-axis (RT points were seeded in CAD-y without the top-of-drawing flip - now 63-y, generator fixed as the canonical form) - Engine: autoGenerate reserves pillar radius + 0.6m buffer, packing skips overlapping cells; HallInfo.pillars contract extension (additive, NON_NULL) - Canvas: structure layer renders pillar circles (editor passes hall pillars) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
110 lines
7.9 KiB
Markdown
110 lines
7.9 KiB
Markdown
# 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 실데이터 표시로 교체 검토.
|
||
|
||
## 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 호환).
|