상태 표시: ✅ 완료 / 🔄 진행중 / ⬜ 대기 / ❌ 블로킹
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 목표 | 자동화 현실적 범위 내 |
'Vibe coding' 카테고리의 다른 글
| V-05. Vibe coding이 초례할 변화 (0) | 2026.05.21 |
|---|---|
| V-04. CLAUDE.md-AutoCAD DWG 도면에서 Revit 3D 모델 자동 생성하기 (0) | 2026.05.21 |
| V-02. PRD — AutoCAD DWG 도면에서 Revit 3D 모델 자동 생성하기 (0) | 2026.05.21 |
| V-01. AutoCAD DWG 도면에서 Revit 3D 모델 자동 생성하기Claude와 함께한 BIM 자동화 프로젝트 — 아이디어에서 파이프라인까지 (0) | 2026.05.21 |
| claude.ai 활용법 가이드 (5) | 2026.04.28 |