- Code\rebar_pipeline, review_pipeline, pier-program을 정션에서 실제 폴더로 전환 - Code\rhino_mcp 및 CLAUDE_rhino배경.md 추가, .mcp.json은 PYTHONPATH로 새 위치 사용 - pier-program 내부 .git 제거(이력은 backup\pier-program_20261028.bundle에 보관) - worktree 가이드 반영(CLAUDE.local.md, HANDOFF.md) - D:\Rhino-MCP 경로 참조를 새 위치로 치환 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
65 lines
5.9 KiB
Markdown
65 lines
5.9 KiB
Markdown
# T형 교각 모델링 앱 (반자동 MVP)
|
|
|
|
교각 도면(DWG)을 넣고 값을 확인·확정하면, Rhino 8로 `.3dm` 모델(로컬 좌표)을 만들고 게이트 G1~G5로 검사합니다.
|
|
|
|
## 실행
|
|
|
|
```
|
|
python Code/교각모델링앱/web/app.py
|
|
```
|
|
브라우저에서 http://127.0.0.1:5000 을 엽니다.
|
|
- 내 PC에서만 접속됩니다(127.0.0.1). 인증 기능이 없으므로 네트워크에 공개하지 마세요.
|
|
- 필요한 것: Python 3.12 + Flask 3.1, ezdxf, Rhino 8(라이선스), ODA File Converter 27.1.0
|
|
- Rhino 경로는 기본값 `C:\Program Files\Rhino 8\System\Rhino.exe`이고, 환경변수 `PIERAPP_RHINO`로 바꿀 수 있습니다.
|
|
|
|
## 쓰는 순서
|
|
1. **교각 만들기**: 형식은 T형만 됩니다. 템플릿 교각의 값이 복사됩니다.
|
|
2. **도면 올리기**: DWG를 DXF로 변환하고 문자를 색인합니다.
|
|
3. **표 후보값**: ELEVATION TABLE, 솔플레이트 TABLE, 철근재료표에서 읽은 값을 현재 값과 비교합니다. 도면과 대조한 뒤 반영합니다.
|
|
4. **문자 검색**: 표 밖의 값(치수, EL)은 검색해서 찾고 묶음 편집 화면에 직접 입력합니다.
|
|
5. **묶음 확정**: 게이트에 필요한 묶음을 모두 확정합니다. 확정 뒤 값이 바뀌면 자동으로 미확정이 됩니다.
|
|
6. **게이트 G1 → G5**: 실행 → 결과 확인 → 승인 또는 반려(사유 필수). FAIL인 게이트는 승인할 수 없습니다.
|
|
7. **결과 받기**: 각 게이트 화면에서 `.3dm`을 내려받습니다.
|
|
|
|
**도면으로 템플릿 추천** (2026-10-15 추가)
|
|
- 교각 목록의 [도면 읽고 추천 받기]에 DWG를 올리면, 도면 문자에서 3문항(기초 말뚝 유무, 코핑 하면 형상, 받침 개수)을 추정해 보호 템플릿을 일치 문항 수 순으로 보여 줍니다. 근거(도면 위치)와 신뢰(보통·약함)가 함께 나옵니다.
|
|
- 추정할 수 없는 문항(철근 형상, 철근 생성 방식 등)은 '미확인'으로 두고 사람이 답합니다. 추정한 문항이 모두 맞는 템플릿이 없으면 "판단 불가"로 표시합니다.
|
|
- 6문항과 각도 값(코핑 skew·받침 회전·기초 회전)을 입력하면 판정 영역이 즉시 갱신됩니다. 템플릿과 다른 문항이 있으면 [그래도 만들기]로 진행할 수 있고, 그 교각은 모든 화면 상단에 닫을 수 없는 '형식 불일치 경고'가 표시됩니다.
|
|
- 추정은 제안입니다. [교각 만들기]를 누르면 그때 교각 폴더가 만들어지고, 올린 도면이 그 안으로 옮겨지며 6문항 답이 `pier.json`의 `fit_answers`에 저장됩니다.
|
|
- 한계: 9개 도면 세트로만 확인했습니다. 말뚝 문구가 도면에 없으면 '말뚝 없음'으로 추정하고, 평면 모서리 R 등 작은 R은 하면 형상 단서에서 제외합니다. 시험: `tools/test_recommend.py`, `tools/test_recommend_web.py`.
|
|
|
|
**교각 삭제** (2026-10-12 추가)
|
|
- 교각 목록의 해당 줄에 교각 이름을 똑같이 입력하고 [삭제]를 누릅니다.
|
|
- 실제로 지우지 않고 `data/_휴지통/<이름>_<시각>`으로 옮깁니다. 폴더를 `data`로 되옮기고 이름을 원래대로 바꾸면 복구됩니다.
|
|
- 게이트 실행 중인 교각은 삭제할 수 없습니다.
|
|
|
|
**일괄 기능** (2026-10-12 추가)
|
|
- 교각 화면 **필요한 묶음 일괄 확정**: 이름 한 번 입력으로 게이트에 필요한 미확정 묶음을 모두 확정합니다.
|
|
- 교각 화면 3절·게이트 화면 **일괄 승인**: 미승인 게이트를 G1부터 차례로 승인합니다.
|
|
- 최신 PASS 결과가 있는 게이트는 다시 실행하지 않고 바로 승인합니다.
|
|
- 나머지는 **하나의 Rhino 세션**에서 실행합니다(G1 생성 → 검사 → … → G5). 게이트 검사와 음성 시험만 하고, 중간 저장과 재로드는 하지 않습니다. 모델은 마지막 G5만 저장합니다(약 2.5분).
|
|
- PASS인 게이트만 입력한 이름으로 승인하고, 의견란에 '일괄 실행 자동 승인'을 남깁니다. FAIL·오류가 나면 그 게이트에서 멈춥니다.
|
|
- 일괄 실행한 게이트의 재로드·앞 게이트 비교는 '생략'으로 표시됩니다. 저장·재로드까지 검증하려면 게이트를 개별 실행하세요.
|
|
8. **검토보고서 초안**: 게이트 화면의 '보고서 초안 생성'을 누르면 MD와 PDF가 만들어집니다(8장).
|
|
- '불일치'·'확인 필요' 항목은 자동으로 등록됩니다.
|
|
- 3~5장의 서술과 판정 확정은 담당자가 합니다.
|
|
- CLI로는 `tools/make_report.py`를 씁니다.
|
|
|
|
## 폴더
|
|
| 경로 | 내용 |
|
|
|---|---|
|
|
| `engine/` | 생성(`rhino/*.py`), 검사(`rhino/checks/`), 게이트(`gates.py`), 판독(`reader.py`) |
|
|
| `runner.py` | Rhino 8 자동 실행 |
|
|
| `web/` | Flask 화면(`app.py`, `store.py`, `templates/`) |
|
|
| `data/<교각>/` | `params.json`(생성용), `expected.json`(검사용 독립 기대값), `confirm.json`, `drawings/`, `runs/current/` |
|
|
| `tools/` | CLI(`run_gates.py`, `build_model.py`)와 검증 도구(회귀·비교·웹 시험) |
|
|
|
|
## 한계
|
|
- 판독 규칙은 운곡교 P1 도면 1세트로만 검증했습니다. 다른 도면에서는 후보값을 반드시 도면과 대조하세요.
|
|
- 음성 시험 기본 대상(예: `BS08`, `SP08`)은 받침 10개 기준입니다(`engine/gates.py` `NEGATIVE`). 받침이 적으면 마지막 받침 번호로 바꾸고, 교각별로는 expected `negative`로 지정합니다(2026-10-13, OPEN #19 A7).
|
|
- 객체에 붙는 도면 근거 문구(`src`)에는 운곡교 P1 고유 문장이 남아 있습니다.
|
|
- 보고서 7장의 기록 항목 이름은 검사기 내부 문구(영어) 그대로입니다.
|
|
- 이 PC의 Rhino가 가끔 시작이 늦거나 종료되지 않습니다(원인 미확인). 실행기가 대응합니다.
|
|
- 결과를 기록한 뒤 30초 안에 끝나지 않으면 강제 종료합니다.
|
|
- 시작이 10분 넘게 멈추면 1회 재시도합니다.
|