Vibe coding

V-03. PLAN.md — AutoCAD DWG 도면에서 Revit 3D 모델 자동 생성하기

파동분석가 2026. 5. 21. 12:02

 

상태 표시: ✅ 완료 / 🔄 진행중 / ⬜ 대기 / ❌ 블로킹

 


Phase 1 — 프로젝트 셋업 (Day 1)

1-1. 환경 구성

  • ⬜ Python 가상환경 생성 (python -m venv .venv)
  • ⬜ 의존성 설치 (pip install -r requirements.txt)
  • ⬜ 폴더 구조 생성
  • ⬜ .env 파일 생성 (ANTHROPIC_API_KEY)

완료 조건: python -c "import ezdxf, ifcopenshell, shapely" 오류 없음

1-2. 프로젝트 구조 생성

dwg-to-revit/
  ├── src/
  │   ├── parser/          # DWG 파싱
  │   ├── preprocessor/    # 전처리
  │   ├── classifier/      # 요소 분류
  │   ├── modeler/         # 3D 모델링
  │   ├── ifc_writer/      # IFC 출력
  │   └── reporter/        # 리포트
  ├── tests/
  ├── input/               # 샘플 DWG
  ├── output/
  ├── config.yaml
  ├── requirements.txt
  ├── PRD.md
  ├── PLAN.md
  └── CLAUDE.md

완료 조건: 폴더 구조 생성, __init__.py 모두 존재


Phase 2 — DWG 파싱 (Day 2~3)

2-1. 기본 파서 구현

  • ⬜ src/parser/dwg_parser.py 생성
  • ⬜ DWG/DXF 파일 로드 (ezdxf.readfile)
  • ⬜ 모델스페이스 엔티티 전체 추출
  • ⬜ 엔티티 타입별 분류 (LINE, LWPOLYLINE, ARC, CIRCLE, INSERT)
  • ⬜ 레이어명 추출 및 목록화

완료 조건: 샘플 DWG 로드 후 엔티티 수 / 레이어 목록 출력

2-2. 블록 분해

  • ⬜ INSERT 엔티티 감지
  • ⬜ 블록 정의 참조 → 실제 좌표 변환
  • ⬜ 중첩 블록 재귀 분해

완료 조건: INSERT 포함 DWG에서 구성 엔티티 추출 확인

2-3. 단위 통일

  • ⬜ 도면 단위 자동 감지 (mm / m / inch)
  • ⬜ 전체 좌표 mm 기준으로 스케일 변환

완료 조건: mm / m 단위 DWG 각각 로드 후 동일 치수 출력 확인


Phase 3 — 전처리 (Day 4~5)

3-1. 중복 제거

  • ⬜ src/preprocessor/cleaner.py 생성
  • ⬜ 동일 위치 중복 선분 감지 (허용 오차 0.1mm)
  • ⬜ 중복 제거 후 카운트 리포트

완료 조건: 중복 포함 테스트 DWG에서 중복 제거 수 출력

3-2. 끝점 스냅

  • ⬜ 인접 끝점 감지 (허용 오차 1.0mm)
  • ⬜ 가까운 끝점을 평균 좌표로 병합

완료 조건: 0.5mm 어긋난 벽 끝점이 스냅 후 연결됨 확인

3-3. 짧은 선분 / 노이즈 제거

  • ⬜ 5mm 미만 선분 제거
  • ⬜ 도면 영역 바깥 엔티티 제거 (bbox 기준)

완료 조건: 노이즈 제거 전후 엔티티 수 비교 출력


Phase 4 — 요소 분류 (Day 6~8)

4-1. 레이어 기반 분류

  • ⬜ src/classifier/layer_classifier.py 생성
  • ⬜ config.yaml 레이어 규칙 로드
  • ⬜ 레이어명 매칭 (정확 일치 + 포함 여부)
  • ⬜ 분류 결과 딕셔너리 반환

완료 조건: 표준 레이어명 DWG에서 70% 이상 자동 분류

4-2. 형상 기반 분류

  • ⬜ src/classifier/geometry_classifier.py 생성
  • ⬜ 평행 두 선 감지 → 벽 후보
  • ⬜ 닫힌 폴리라인 → 기둥/방 후보
  • ⬜ 원/호 → 원형 기둥 후보

완료 조건: 레이어 미분류 요소의 50% 이상 형상 분류

4-3. Claude API 기반 분류

  • ⬜ src/classifier/ai_classifier.py 생성
  • ⬜ 미분류 요소 좌표 + 레이어명 → Claude API 전송
  • ⬜ 분류 결과 + 신뢰도 점수 파싱
  • ⬜ API 오류 시 fallback 처리

완료 조건: 미분류 요소 샘플 10개 중 8개 이상 올바른 분류


Phase 5 — 벽 모델링 (Day 9~11)

5-1. 벽 두께 추출

  • ⬜ src/modeler/wall_modeler.py 생성
  • ⬜ 평행 선쌍 감지 및 거리 측정
  • ⬜ 벽 두께 범위 검증 (50mm ~ 600mm)
  • ⬜ 단선 벽 기본 두께 적용 (200mm)

완료 조건: 복선 벽 DWG에서 두께 자동 측정값 출력

5-2. 벽 중심선 생성

  • ⬜ 두 평행선 중간선 계산
  • ⬜ 벽 방향 벡터 정규화
  • ⬜ 벽 시작점/끝점 정렬

완료 조건: 중심선 좌표 출력 + 시각화 확인

5-3. 벽 연결점 처리

  • ⬜ T자 연결 감지 및 처리
  • ⬜ L자 연결 (코너) 처리
  • ⬜ 십자 연결 처리

완료 조건: 연결점에서 벽이 끊기지 않음 확인


Phase 6 — 개구부 처리 (Day 12~13)

6-1. 문/창 위치 감지

  • ⬜ src/modeler/opening_modeler.py 생성
  • ⬜ 분류된 문/창 블록 좌표 추출
  • ⬜ 가장 가까운 벽 매핑

6-2. 벽 개구부 절단

  • ⬜ 벽 중심선과 개구부 교차점 계산
  • ⬜ 벽 선분에서 개구부 구간 제거
  • ⬜ 개구부 너비 검증 (500mm ~ 3000mm)

완료 조건: 문이 있는 벽에서 개구부 절단 후 IFC 미리보기 확인


Phase 7 — 층간 연결 (Day 14~15)

7-1. 층 배치

  • ⬜ src/modeler/floor_assembler.py 생성
  • ⬜ config.yaml 층고 정보 기반 Z축 배치
  • ⬜ 층별 원점 정합 (기준점 맞추기)

7-2. 수직 연속성 검사

  • ⬜ 상하층 기둥 위치 비교 (허용 오차 50mm)
  • ⬜ 불일치 기둥 경고 플래그
  • ⬜ 슬래브 자동 생성 (각 층 외곽선 기반)

완료 조건: 3개 층 DWG 조합 후 IFC에서 연속 벽/기둥 확인


Phase 8 — IFC 출력 (Day 16~18)

8-1. IFC 기본 구조 생성

  • ⬜ src/ifc_writer/ifc_builder.py 생성
  • ⬜ IfcProject / IfcSite / IfcBuilding / IfcBuildingStorey 계층 생성
  • ⬜ 단위 설정 (mm, EPSG:5186)

8-2. 요소별 IFC 클래스 매핑

  • ⬜ 벽 → IfcWall
  • ⬜ 기둥 → IfcColumn
  • ⬜ 슬래브 → IfcSlab
  • ⬜ 문 → IfcDoor
  • ⬜ 창 → IfcWindow

8-3. 형상 표현 (Geometry)

  • ⬜ SweptSolid 방식으로 벽 형상 정의
  • ⬜ ExtrudedAreaSolid로 기둥 형상 정의

8-4. 출력 및 검증

  • ⬜ IFC 파일 저장
  • ⬜ ifcopenshell 검증 실행
  • ⬜ Revit 임포트 테스트

완료 조건: Revit 2024에서 IFC 임포트 오류 0건


Phase 9 — 리포트 (Day 19)

9-1. 변환 리포트 생성

  • ⬜ src/reporter/report_builder.py 생성
  • ⬜ 성공/경고/실패 항목 집계
  • ⬜ Jinja2 HTML 템플릿 렌더링
  • ⬜ 실패 요소 CSV 출력

완료 조건: report.html 브라우저에서 정상 렌더링


Phase 10 — 테스트 및 문서화 (Day 20~25)

10-1. 단위 테스트

  • ⬜ 파서 테스트 (5개 케이스)
  • ⬜ 전처리 테스트 (중복/스냅)
  • ⬜ 분류기 테스트 (레이어/형상/AI)
  • ⬜ IFC 출력 테스트

완료 조건: pytest 통과율 80% 이상

10-2. 통합 테스트

  • ⬜ 샘플 프로젝트 (5층) 전체 파이프라인 실행
  • ⬜ 처리 시간 측정 (목표: 층당 5분)
  • ⬜ 자동화율 측정 (목표: 70% 이상)

10-3. 문서화

  • ⬜ README.md 작성
  • ⬜ 설치 가이드
  • ⬜ config.yaml 작성 가이드
  • ⬜ 알려진 한계 문서화

현재 진행 상황

Phase 1  ████░░░░░░  셋업 대기
Phase 2  ░░░░░░░░░░  파싱 대기
Phase 3  ░░░░░░░░░░  전처리 대기
Phase 4  ░░░░░░░░░░  분류 대기
Phase 5  ░░░░░░░░░░  벽 모델링 대기
Phase 6  ░░░░░░░░░░  개구부 대기
Phase 7  ░░░░░░░░░░  층간 연결 대기
Phase 8  ░░░░░░░░░░  IFC 출력 대기
Phase 9  ░░░░░░░░░░  리포트 대기
Phase 10 ░░░░░░░░░░  테스트 대기

블로킹 이슈

현재 없음


메모 / 결정사항

날짜 결정 이유

- Revit API 대신 IFC 경유 방식 채택 Revit API 환경 의존성 제거
- Claude API는 3차 분류에만 사용 비용 최소화
- LOD 200 목표 자동화 현실적 범위 내