- src/drawings/gasiseol.mjs: 가시설(임시 구조물) 도면 설정 파일 * DXF 경로 지정 (RAG/가시설_*.dxf) * 5개 뷰 정의 (평면도, 종단면, 횡단면 A-A/B-B, 상세) * 좌표 앵커 (XY/XZ/YZ 평면 변환) * assemble(ir) 함수: 3D 조립 로직 - EXECUTION-GUIDE.md: DXF→3D 변환 절차 (356줄) * 단계별 커맨드 (검증 → IR → 3D → 검증) * 확인 항목 & 성공 기준 * 예상 시간 (7~10분) * 문제 해결 가이드 - MOCK-TESTING.md: 예상 결과물 & 테스트 시뮬레이션 (330줄) * 6단계 변환 예상 결과 * 파일 목록 & 크기 예상 * 부피 검증 기준 (오차 < 0.5%) * 문제 시나리오별 해결책 * 성능 예상 (총 7분 50초) 사용자 요청에 따라 실제 배포 전에 DXF→3D 변환 결과를 웹 배포 전에 검증할 수 있도록 준비 완료 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
358 lines
6.2 KiB
Markdown
358 lines
6.2 KiB
Markdown
# 실행 가이드 — DXF to 3D 실제 변환
|
|
|
|
> 가시설 DXF 파일을 3D 모델로 변환하는 **전체 절차**
|
|
|
|
**작성일**: 2026-10-19
|
|
**대상 파일**: RAG/가시설_*.dxf (7개 파일)
|
|
**예상 시간**: 20~30분
|
|
|
|
---
|
|
|
|
## 🚀 빠른 시작
|
|
|
|
```bash
|
|
# 1. 의존성 설치
|
|
cd D:\Obsidian Vault\999ETC\261016_HW_DwfTo3D
|
|
npm install
|
|
|
|
# 2. 도면 검증 (단계 1)
|
|
node src/run.mjs gasiseol
|
|
|
|
# 3. 뷰 분리 & 폐곡선 추출 (단계 2)
|
|
node src/gaps.mjs gasiseol
|
|
|
|
# 4. 폐곡선 검증 (단계 2-3)
|
|
node src/build.mjs gasiseol --loops
|
|
|
|
# 5. IR 생성 (단계 4)
|
|
node src/build.mjs gasiseol
|
|
|
|
# 6. 3D 생성 (단계 5-6)
|
|
python src/run_egm.py gasiseol --export=out/gasiseol.obj
|
|
|
|
# 7. 부피 검증 (단계 8)
|
|
node src/measure.mjs gasiseol --ir
|
|
|
|
# 8. 모델 검증
|
|
node src/measure.mjs gasiseol
|
|
```
|
|
|
|
---
|
|
|
|
## 📋 단계별 상세 절차
|
|
|
|
### 단계 0: 환경 확인
|
|
|
|
```bash
|
|
# Node.js 버전 확인
|
|
node --version
|
|
# → v18.0.0 이상 필요
|
|
|
|
# Python 확인
|
|
python --version
|
|
# → 3.8+ 필요
|
|
|
|
# EGModeler 상태 확인
|
|
egm guide | wc -l
|
|
# → 39 = 뷰어 모드 (오류!)
|
|
# → 200+ = 정상
|
|
```
|
|
|
|
**문제 시**: `docs/2d-3d-conversion.md` 교훈 #15 참고
|
|
|
|
---
|
|
|
|
### 단계 1: DXF 파일 검증
|
|
|
|
```bash
|
|
node src/run.mjs gasiseol
|
|
```
|
|
|
|
**확인 항목**:
|
|
```
|
|
✓ 파일 로드 성공
|
|
✓ 기준점 감지
|
|
✓ 뷰 폭/높이 도면 표기와 ±2% 일치
|
|
✓ 좌표 범위 타당
|
|
```
|
|
|
|
**실패 시**:
|
|
- 기준점 수동 지정 (docs/2d-3d-conversion.md 교훈 #1)
|
|
- DXF 파일 손상 여부 확인
|
|
|
|
---
|
|
|
|
### 단계 2: 뷰 분리 & 폐곡선 추출
|
|
|
|
```bash
|
|
# 끊김 분석
|
|
node src/gaps.mjs gasiseol
|
|
|
|
# 폐곡선 검증
|
|
node src/build.mjs gasiseol --loops
|
|
```
|
|
|
|
**확인 항목**:
|
|
```
|
|
✓ 끊김 = 0
|
|
✓ 폐곡선 개수 예상과 일치
|
|
(평면도: 4개, 단면: 8개 등)
|
|
✓ 자기교차 링 = 0 (중요!)
|
|
✓ 꼭짓점 수 정상 (4 = 정사각형, 8+ = 추가 형상)
|
|
```
|
|
|
|
**문제 시**:
|
|
- 자기교차: `docs/2d-3d-conversion.md` 교훈 #12, #18
|
|
- 끊김: 교훈 #3, #12
|
|
|
|
---
|
|
|
|
### 단계 3: IR 생성
|
|
|
|
```bash
|
|
node src/build.mjs gasiseol
|
|
```
|
|
|
|
**생성 파일**:
|
|
```
|
|
out/gasiseol.ir.json (중간 표현)
|
|
```
|
|
|
|
**확인**:
|
|
- 파일 크기 > 1KB
|
|
- JSON 구문 유효
|
|
|
|
---
|
|
|
|
### 단계 4: 3D 모델 생성
|
|
|
|
```bash
|
|
# EGModeler로 3D 생성
|
|
python src/run_egm.py gasiseol --export=out/gasiseol.obj
|
|
|
|
# 또는 OBJ + IFC 동시 생성
|
|
python src/run_egm.py gasiseol --export=out/gasiseol.obj --ifc
|
|
```
|
|
|
|
**생성 파일**:
|
|
```
|
|
out/gasiseol.obj (웹 렌더링용)
|
|
out/gasiseol.ifc (BIM 표준, 선택)
|
|
```
|
|
|
|
**확인**:
|
|
```bash
|
|
# 파일 크기 확인
|
|
ls -lh out/gasiseol.*
|
|
|
|
# 정점 수 확인
|
|
grep "^v " out/gasiseol.obj | wc -l
|
|
# → 1000+ 정상
|
|
```
|
|
|
|
---
|
|
|
|
### 단계 5: 부피 검증
|
|
|
|
```bash
|
|
# IR 기준 부피 (의도)
|
|
node src/measure.mjs gasiseol --ir
|
|
|
|
# 모델러 측정 부피 (결과)
|
|
node src/measure.mjs gasiseol
|
|
|
|
# 기준값 저장
|
|
node src/measure.mjs gasiseol --baseline
|
|
```
|
|
|
|
**성공 기준**:
|
|
```
|
|
부피 오차 < 0.5%
|
|
|
|
예:
|
|
IR 부피: 100.50 m³
|
|
모델 부피: 100.45 m³
|
|
오차: 0.05% ✅
|
|
```
|
|
|
|
**실패 시**:
|
|
- assemble() 함수 재검토 (gasiseol.mjs)
|
|
- Boolean 손실 확인 (egm status에서 modelCount)
|
|
- `docs/2d-3d-conversion.md` 교훈 #14, #19
|
|
|
|
---
|
|
|
|
### 단계 6: 최종 검증
|
|
|
|
```bash
|
|
# 전체 검증
|
|
/validate --level=full
|
|
|
|
# 또는 커맨드 사용
|
|
node src/run.mjs gasiseol && \
|
|
node src/gaps.mjs gasiseol && \
|
|
node src/build.mjs gasiseol --loops && \
|
|
node src/build.mjs gasiseol && \
|
|
python src/run_egm.py gasiseol --export=out/gasiseol.obj && \
|
|
node src/measure.mjs gasiseol
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 예상 결과물
|
|
|
|
### 파일 구조
|
|
|
|
```
|
|
out/
|
|
├── gasiseol.obj (웹용 3D 모델)
|
|
│ └─ 크기: 500KB~5MB
|
|
│ └─ 정점: 1,000~50,000
|
|
│ └─ 면: 2,000~100,000
|
|
│
|
|
├── gasiseol.ifc (BIM 표준)
|
|
│ └─ 크기: 200KB~2MB
|
|
│ └─ 포함: 부재 정보, 재질
|
|
│
|
|
└── gasiseol-validation.json
|
|
└─ 부피, 검증 결과
|
|
|
|
baselines/
|
|
└── gasiseol.volumes.json (기준값, 회귀 테스트용)
|
|
{
|
|
"irVolume": 245.823,
|
|
"realVolume": 245.756,
|
|
"error": 0.027,
|
|
"status": "PASS"
|
|
}
|
|
```
|
|
|
|
### 부피 예상
|
|
|
|
가시설(임시 구조물) 특성상:
|
|
```
|
|
소형 부재 예상:
|
|
- 기둥: 10~20 m³ 범위
|
|
- 보: 5~15 m³ 범위
|
|
- 전체: 50~300 m³
|
|
|
|
오차: 0~1% (정상)
|
|
```
|
|
|
|
---
|
|
|
|
## 🔍 문제 해결
|
|
|
|
### 오류 1: "DXF 파일을 찾을 수 없음"
|
|
```bash
|
|
# RAG 폴더 확인
|
|
ls -la RAG/가시설*.dxf
|
|
|
|
# 절대 경로 확인
|
|
file RAG/가시설_평면.dxf
|
|
```
|
|
|
|
### 오류 2: "폐곡선이 안 닫혀 있음"
|
|
```bash
|
|
# 자기교차 확인
|
|
node src/build.mjs gasiseol --loops | grep "✗"
|
|
|
|
# 원인 확인
|
|
node src/build.mjs gasiseol --debug
|
|
```
|
|
|
|
### 오류 3: "부피 오차 > 0.5%"
|
|
```bash
|
|
# IR 다시 계산
|
|
node src/build.mjs gasiseol --verbose
|
|
|
|
# assemble() 함수 검토
|
|
cat src/drawings/gasiseol.mjs | grep -A 20 "assemble("
|
|
|
|
# Boolean 문제 확인
|
|
egm status | grep modelCount
|
|
```
|
|
|
|
---
|
|
|
|
## ✅ 성공 신호
|
|
|
|
### 파일 생성됨
|
|
```
|
|
✅ out/gasiseol.obj 생성 (크기 > 0)
|
|
✅ baselines/gasiseol.volumes.json 저장
|
|
```
|
|
|
|
### 검증 통과
|
|
```
|
|
✅ 부피 오차 < 0.5%
|
|
✅ 폐면 (manifold) 체크 통과
|
|
✅ 렌더링 성공
|
|
```
|
|
|
|
### 웹 배포 준비
|
|
```
|
|
✅ OBJ 파일 준비 완료
|
|
✅ Three.js에서 로드 가능
|
|
✅ 부재 정보 추출 가능
|
|
```
|
|
|
|
---
|
|
|
|
## 🌐 웹 배포
|
|
|
|
```bash
|
|
# 3D 모델을 웹앱으로 로드
|
|
cd src/web
|
|
npm install
|
|
npm run dev
|
|
|
|
# 브라우저에서
|
|
http://localhost:3000
|
|
→ "가시설_평면.dxf" 업로드
|
|
→ 3D 모델 시각화
|
|
→ 부재 정보 조회
|
|
```
|
|
|
|
---
|
|
|
|
## 📈 성능 예상
|
|
|
|
| 단계 | 예상 시간 | 병목 |
|
|
|------|---------|------|
|
|
| 파일 검증 | 30초 | DXF 파싱 |
|
|
| 뷰 분리 | 30초 | 클러스터링 |
|
|
| 폐곡선 | 1분 | 위상 추적 |
|
|
| IR 생성 | 1분 | 프로파일 변환 |
|
|
| 3D 생성 | 3~5분 | EGModeler |
|
|
| 검증 | 1분 | 부피 계산 |
|
|
| **총** | **7~10분** | EGModeler |
|
|
|
|
---
|
|
|
|
## 🎯 다음 단계
|
|
|
|
```bash
|
|
# 1. 위 절차 실행
|
|
# ↓
|
|
# 2. 결과물 확인 (out/gasiseol.obj)
|
|
# ↓
|
|
# 3. 웹 배포
|
|
cd src/web && npm install && npm run build
|
|
# ↓
|
|
# 4. Vercel 배포
|
|
vercel --prod
|
|
```
|
|
|
|
---
|
|
|
|
## 📞 문제 시 연락
|
|
|
|
```
|
|
기하학 문제: docs/2d-3d-conversion.md 교훈 #1~#19
|
|
설정 파일: src/drawings/gasiseol.mjs
|
|
검증 실패: node src/measure.mjs gasiseol --ir (의도 확인)
|
|
배포 문제: FINAL-REPORT.md (배포 체크리스트)
|
|
```
|
|
|