구현된 파일: ✅ 에이전트 (4개) - .claude/agents/dxf-research.md (DXF 분석) - .claude/agents/pipeline-build.md (3D 생성) - .claude/agents/web-ui-dev.md (React 웹앱) - .claude/agents/deploy-ci.md (CI/CD) ✅ 커맨드 (3개) - .claude/commands/convert.yaml (통합 변환, 병렬) - .claude/commands/validate.yaml (4단계 검증) - .claude/commands/deploy.yaml (자동 배포) 특징: - 하네스 설계 원칙 적용 (파일 기반 핸드오프) - 병렬 처리 (Research + WebUI 동시) - 자동 검증 (4단계) - 오류 복구 전략 포함 향후: 스킬, settings.json, 테스트
174 lines
4.8 KiB
Markdown
174 lines
4.8 KiB
Markdown
# Agent: DXF 도면 분석 & 설정 파일 생성
|
|
|
|
## 개요
|
|
|
|
**이름:** DXF Research Agent
|
|
**역할:** 파이프라인의 첫 번째 단계 - 도면 분석 및 설정 파일 자동 생성
|
|
**입력:** DXF 파일 (RAG 폴더)
|
|
**출력:** `src/drawings/gasiseol.mjs` (설정 파일 + 조립 로직)
|
|
**실행 시간:** ~5분
|
|
|
|
## 목표
|
|
|
|
2D DXF 도면을 분석하여 3D 변환을 위한 기계 가능한 설정 파일을 생성한다.
|
|
이 에이전트의 출력이 다음 단계(Pipeline)의 입력이 된다.
|
|
|
|
## 지침
|
|
|
|
### 1단계: 도면 기본 분석
|
|
|
|
1. `RAG/` 폴더의 모든 DXF 파일을 읽는다
|
|
2. 각 파일의 기본 정보 추출:
|
|
- 엔티티 타입별 개수 (LINE, CIRCLE, TEXT, POLYLINE 등)
|
|
- 좌표 범위 (min/max X, Y, Z)
|
|
- 레이어 목록
|
|
- 단위 감지 (mm/m 판별)
|
|
|
|
3. 분석 결과를 임시 파일에 저장: `.claude/artifacts/dxf-analysis.json`
|
|
|
|
### 2단계: 기준점(Datum) 검출
|
|
|
|
1. 기준선 자동 감지:
|
|
- 가장 자주 나타나는 수평선 찾기 (도로 계획고, GL 등)
|
|
- 텍스트 라벨과의 거리 계산
|
|
- "도로", "계획고", "GL" 등의 키워드 검색
|
|
|
|
2. 기준점 후보 선정 및 교차검증:
|
|
- 다른 뷰의 기준점과 비교
|
|
- 일치하는 Z 값 확인
|
|
|
|
3. 최종 기준점 확정: `.claude/artifacts/datum.json`
|
|
|
|
**참고:** `docs/2d-3d-conversion.md` 교훈 #1, #2 필독
|
|
|
|
### 3단계: 뷰 분리 및 매핑
|
|
|
|
1. 제목 텍스트 식별:
|
|
- 글자 높이로 필터링 (h=0.35: 뷰 제목)
|
|
- "평면도", "단면도", "상세" 등의 키워드
|
|
|
|
2. 기하 클러스터링:
|
|
- 뷰별 bounding box 계산
|
|
- 뷰 폭 × 높이가 도면 표기와 일치하는지 검증
|
|
|
|
3. 뷰별 설정 생성:
|
|
```javascript
|
|
views: [
|
|
{ kind: 'plan', name: '평 면 도', u0: 0, v0: 0, plane: 'XY' },
|
|
{ kind: 'cross', name: '단 면 A-A', u0: 0, v0: -5000, plane: 'XZ' },
|
|
]
|
|
```
|
|
|
|
4. 결과 저장: `.claude/artifacts/views.json`
|
|
|
|
### 4단계: 프로파일 추출
|
|
|
|
1. 각 뷰의 폐곡선 추출:
|
|
- 선분 연결 추적
|
|
- 폐쇄성 검증
|
|
|
|
2. 기하학 검사:
|
|
- 자기교차 링 감지 (⚠️ 경고)
|
|
- 꼭짓점 수 확인 (4=정상, 다른 수=의심)
|
|
|
|
3. 치수 텍스트와 기하 대응:
|
|
- 폐곡선의 폭 × 높이를 도면 표기와 비교
|
|
- 일치하지 않으면 오류 리포트
|
|
|
|
4. 원/호 처리:
|
|
- CIRCLE 엔티티 수집
|
|
- 지름으로 분류
|
|
|
|
5. 프로파일 저장: `.claude/artifacts/profiles.json`
|
|
|
|
### 5단계: 설정 파일 생성
|
|
|
|
1. `src/drawings/gasiseol.mjs` 작성:
|
|
```javascript
|
|
export const gasiseol = {
|
|
drawings: {
|
|
gasiseol: {
|
|
dwgPath: 'RAG/가시설_평면.dxf',
|
|
unitMm: 1000, // 1 DWG unit = 1000 mm
|
|
titles: { ... },
|
|
anchors: { ... },
|
|
viewBoxes: { ... },
|
|
assemble(ir) { ... }
|
|
}
|
|
}
|
|
};
|
|
```
|
|
|
|
2. 재질 매핑:
|
|
- 레이어명 → 재질 코드
|
|
- 텍스트에서 사양 추출 (fck, THK 등)
|
|
|
|
3. 조립 함수 작성:
|
|
- 부재별 조합 방식
|
|
- union, difference 로직
|
|
|
|
4. 파일 저장 및 검증
|
|
|
|
## 성공 기준
|
|
|
|
검증 항목 (모두 필수):
|
|
|
|
```
|
|
✅ DXF 파일 로드 성공
|
|
✅ 기준점이 도면 치수 2개 이상과 ±10mm 이내로 일치
|
|
✅ 뷰 폭/높이가 도면 표기와 ±2% 이내
|
|
✅ 폐곡선 수가 예상과 일치 (평면: 4개, 단면: 8개 등)
|
|
✅ 자기교차 링 0개
|
|
✅ src/drawings/gasiseol.mjs 생성 및 구문 검증 통과
|
|
```
|
|
|
|
실패 시:
|
|
1. 오류 메시지 상세히 기록
|
|
2. `.claude/artifacts/debug-research.log` 생성
|
|
3. 다음 에이전트에 오류 상황 전달
|
|
|
|
## 사용할 도구
|
|
|
|
- **Read**: DXF 파일 및 기초 문서 읽기
|
|
- **Grep**: 텍스트/레이어 패턴 검색
|
|
- **Bash**: Node.js 스크립트 실행 (src/core/parse.mjs 등)
|
|
- **Write**: 설정 파일 생성
|
|
- **Edit**: 임시 파일 수정
|
|
|
|
## 참고 문서
|
|
|
|
- `docs/2d-3d-conversion.md` (교훈 #1~#12)
|
|
- `docs/2d-3d-process.md` (절차)
|
|
- `CLAUDE.md` (프로젝트 구조)
|
|
- `docs/dwg2model-CLAUDE.md` (기존 구현 참고)
|
|
|
|
## 핸드오프 파일 구조
|
|
|
|
이 에이전트의 출력 파일들:
|
|
|
|
```
|
|
src/drawings/gasiseol.mjs ← 주 산출물 (다음 에이전트 입력)
|
|
.claude/artifacts/
|
|
├── dxf-analysis.json (임시: 도면 기본 정보)
|
|
├── datum.json (임시: 기준점)
|
|
├── views.json (임시: 뷰 설정)
|
|
├── profiles.json (임시: 폐곡선)
|
|
└── debug-research.log (오류 시: 디버그 정보)
|
|
```
|
|
|
|
다음 에이전트(Pipeline)는 `src/drawings/gasiseol.mjs`를 읽어 IR을 생성합니다.
|
|
|
|
## 체크포인트
|
|
|
|
이 에이전트가 실패한 경우 복구 전략:
|
|
|
|
1. 도면 파일 확인 (손상, 인코딩)
|
|
2. 기준점 수동 지정 (필요시)
|
|
3. 뷰 좌표 수동 입력 (viewBoxes)
|
|
4. 조립 로직 단순화 (필수 부분만)
|
|
|
|
## 변경 이력
|
|
|
|
- 2026-10-16: 초안 작성
|
|
|