chore(rebar): Pier_T_rebar 작업 폴더 초기 구성 및 외부 의존 파일 통합

- 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>
This commit is contained in:
ahnyongjooandClaude Sonnet 5.5 committed 2026-10-28 11:20:18 +09:00
commit 964a841de1
3978 files changed
+58013356

No files matched your search

@@ -0,0 +1,379 @@
# T형 교각 모델링 앱 사용설명서
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
| :--- | :--- | :--- | :--- | :--- |
| v0.1.00 | 2026-10-12 | 심영표 | 신규 작성 | 앱 P0~P3 완료, 일괄 기능·삭제 기능 반영 |
| v0.2.00 | 2026-10-12 | 심영표 | 내부 공유용 발행 (내용 변경 없음) | 사용자 지시 "내부 공유본으로 해줘" |
| v0.2.01 | 2026-10-13 | 심영표 | 보호 템플릿 추가(1.1, 2.1, 2.3, 4, 5.1, 6.5, 8, 부록 A·B). 두 번째 형식(산외교 울산 P1)에 맞춰 1.1 색, 1.2, 5.3, 7.1, 9 갱신 | 사용자 지시 "개정해줘" |
| v0.2.02 | 2026-10-13 | 심영표 | 울산 형식 앱 시험 후 판독기 보완 반영: 5.3(울산 재료표·받침별 값도 표 후보값에서 읽음), 5.6(보고서 자체 점검), 9 판독 규칙 검증 범위 | 사용자 지시 "울산 형식에 대해 앱을 test 해줘" 후속 |
| v0.2.03 | 2026-10-13 | 심영표 | 5.4 확정 범위 변경: 실행 설정 묶음(scope·builders·checkers·negative)도 확정 대상, 참고 묶음은 '확정 불필요(참고)' 표시. 2.3 판정 표시 보완 | 사용자 지시 "미확정이 발생한 원인과 해결방법" 후속 |
| v0.2.04 | 2026-10-13 | 심영표 | 일반화 보완(OPEN #19) 반영: 4·5.3 표 후보값 params 행(받침·솔플레이트), 치수 사슬 입력, 핸들 조회. 9 음성 시험 기본 대상·재료표 범위 문자 | 사용자 지시 "OPEN #19 앱 일반화 미수정 5건" |
| v0.2.05 | 2026-10-14 | 심영표 | 세 번째 형식(Ramp-A교 P1: 단일 현장타설말뚝 + Y형 코핑) 반영: 1.1 형식 표·철근 색, 1.2, 5.1, 5.3, 5.4 확정 개수, 7.1 항목 수, 9 한계. 확정 대상 보완(말뚝·말뚝 철근망 묶음 필수, 없는 기초 묶음은 요구 안 함) | 사용자 지시 "진행해줘" (OPEN #23 ④) |
| v0.2.06 | 2026-10-14 | 심영표 | 네 번째 형식(옥성교 P1: 말뚝기초 + 직선 경사 코핑 + 평면 사각 18°) 반영: 1.1 형식 표, 1.2, 5.1, 5.3, 7.1 항목 수, 9 한계·검증 범위 | 사용자 지시 "남은일을 진행해줘" (OPEN #24 ④) |
| v0.2.07 | 2026-10-14 | 심영표 | 옥성교 P1 철근(G2 기둥·G3 기초·G4 코핑·교좌면) 완료 반영: 1.1 형식 표, 7.1 항목 수(옥성 G2 39 · G3 75 · G4 251), 9 옥성 추정 사항 | 사용자 지시 "옥성교 계속 진행해줘" (OPEN #24) |
| v0.2.08 | 2026-10-15 | 심영표 | 다섯 번째 형식(새재1교 P1: 직접기초 + 직선 경사 코핑 + 직사각 평면 + 공유 대좌) 반영: 1.1 형식 표, 5.1, 7.1 항목 수, 9 한계 | 사용자 지시 "새재1교P1.dwg 를 모델링 해줘" |
| v0.2.09 | 2026-10-15 | 심영표 | 새재1교 P1 기둥 철근(G2) 반영: 1.1 형식 표, 7.1 항목 수, 9 한계 | 사용자 지시 "계속진행해줘" |
| v0.2.10 | 2026-10-15 | 심영표 | 새재1교 P1 기초 철근(G3) 반영: 1.1 형식 표, 7.1 항목 수, 9 한계 | 사용자 지시 "진행해줘" |
> 대상 독자: 이 앱을 처음 쓰는 교량 설계·BIM 실무자. 프로그래밍 지식 없이 따라 할 수 있도록 화면 버튼 이름과 폴더 경로 중심으로 설명합니다.
---
## 1. 이 앱으로 할 수 있는 일
### 1.1 한눈에 보기
교각 도면(DWG)을 넣으면 **3D 모델(Rhino .3dm)**과 **검토보고서 초안(MD·PDF)**을 만듭니다. 모델은 단계별로 검사(게이트)를 통과해야 다음 단계로 넘어갑니다.
| 순서 | 하는 일 | 누가 |
| :--- | :--- | :--- |
| 1 | 도면(DWG) 올리기 → 자동 변환·문자 색인 | 앱 |
| 2 | 도면 표에서 읽은 값과 입력값 비교, 표 밖 치수는 문자 검색으로 찾기 | 사용자 + 앱 |
| 3 | 입력 묶음 확인·확정 ("이 값이 도면과 맞다"는 기록) | 사용자 |
| 4 | 게이트 G1 형상 → G2 기둥 철근 → G3 확대기초 철근 → G4 코핑 철근 → G5 교량받침·솔플레이트 | 앱이 생성·검사, 사용자가 승인 |
| 5 | 모델(.3dm)과 검토보고서 초안 받기 | 사용자 |
- 모델 좌표는 **로컬 좌표**입니다. 교각 중심이 원점이고, X는 교축직각, Y는 교축 방향, Z = EL × 1000(mm)입니다.
- 철근은 직경별 색(D32 빨강, D29 주황, D25 자주, D19 초록, D16 파랑)으로 표시됩니다. 울산 형식에만 있는 직경은 H22 청록, H13 갈색입니다(색 확정 대기). Ramp-A 형식의 H35는 보라입니다(2026-10-14 확정).
- 지원하는 T형 교각 형식은 다섯 가지입니다. 새 교각을 만들 때 형식에 맞는 **보호 템플릿**을 고르면 됩니다(5.1절).
| 보호 템플릿 | 형식 | 원본 교각 |
| :--- | :--- | :--- |
| `운곡교P1형` | 말뚝기초 · 원형 기둥 Ø2.0 · 하면 곡선(R12,000) 코핑, 상면 5단 · 받침 10개 | 운곡교 P1 |
| `산외교울산P1형` | 직접기초(말뚝 없음) · 원형 기둥 Ø2.5 · 직선 경사 코핑(끝면 300 경사, 상면 130 단차, 평면 모서리 R500) · 받침 4개 | 산외교 울산 P1 |
| `옥성교P1형` | 말뚝기초(강관 Ø609, 5×5) · 원형 기둥 Ø2.5 · 직선 경사 코핑(끝면 수직, 상면 5단, 측면 3,300→2,500 테이퍼) · **평면 사각 18°** · 받침 10개(대좌 5개를 앞뒤 받침이 함께 씀, 대좌 상면 경사) · 철근 G2~G4 (철근별 중심선, 코핑 철근은 평면 전단 적용) | 옥성교 P1 |
| `Ramp-A교P1형` | 기초판 없이 단일 현장타설말뚝(Ø2.35 암반 근입 + Ø2.5) · 원형 기둥 Ø2.0 · Y형(나팔형) 코핑(하면 R5,000, 끝면 평면 볼록, 상면 315 단차) · 받침 2개(평면 회전) | Ramp-A교 P1 |
| `새재1교P1형` | 직접기초(말뚝 없음) · 원형 기둥 Ø2.2 · 직선 경사 코핑(끝면 수직, 상면 5단, 측면 3,000→2,200 테이퍼, 평면 직사각) · 받침 10개(대좌 5개 공유, 받침 평면 회전) · 철근 G2 기둥(주철근 2겹 49본) · G3 기초(철근별 중심선 307본) · 코핑 철근 미모델링 | 새재1교 P1 |
### 1.2 할 수 없는 일
- **T형 교각만** 다룹니다. 다른 형식은 교각을 만들 때 거부됩니다. T형이라도 위 네 형식과 모양이 크게 다르면(예: 다른 코핑 형상) 앱만으로는 모델을 만들 수 없고 생성기·검사기 추가가 필요합니다.
- 측량좌표(평면좌표) 변환, 구조계산, 철근 간 간섭 검사, 시공성 검토는 하지 않습니다.
- 도면 판독은 **반자동**입니다. 표 3종(받침 ELEVATION TABLE, 솔플레이트 TABLE, 철근재료표)만 자동으로 읽고, 나머지 치수는 사용자가 확인·입력합니다.
---
## 2. 설치 장소와 준비물
### 2.1 앱이 설치된 곳
> `C:\Users\User\Desktop\바이브코딩\pier_T\Code\교각모델링앱\`
| 폴더·파일 | 내용 | 사용자가 열어 볼 일 |
| :--- | :--- | :--- |
| `web\` | 화면(Flask 서버). `app.py`가 앱 실행 파일 | 실행할 때만 |
| `data\` | **교각별 입력과 결과가 모두 저장되는 곳** (6장) | 결과 파일을 찾을 때 |
| `data\_템플릿\` | **보호 템플릿** (6.5절). 화면에서 고칠 수 없는 고정 사본 | 없음 |
| `engine\` | 모델 생성·검사·판독·보고서 프로그램 | 없음 |
| `runner.py` | Rhino 8 자동 실행기 | 없음 |
| `tools\` | 명령줄 도구와 시험 프로그램 (부록 A) | 고급 사용 시 |
| `출력\`, `검증\` | 개발·시험 때 만든 결과 | 없음 |
| `README.md` | 요약 안내 | 필요 시 |
### 2.2 필요한 프로그램
| 프로그램 | 버전 | 설치 위치 (이 PC) | 용도 |
| :--- | :--- | :--- | :--- |
| Python | 3.12 | `C:\Users\User\AppData\Local\Programs\Python\Python312\` | 앱 실행 |
| Flask | 3.1.3 | Python 패키지 | 화면 |
| ezdxf | 1.4.4 | Python 패키지 | 도면(DXF) 읽기 |
| reportlab | 5.0.1 | Python 패키지 | 보고서 PDF |
| Rhino 8 | 8 (라이선스 필요) | `C:\Program Files\Rhino 8\System\Rhino.exe` | 3D 모델 생성·검사 |
| ODA File Converter | 27.1.0 | `C:\Program Files\ODA\ODAFileConverter 27.1.0\` | DWG → DXF 변환 |
- 이 PC에는 모두 설치되어 있습니다.
- 글꼴: 보고서 PDF는 Windows 기본 '맑은 고딕'을 씁니다.
### 2.3 다른 PC에 옮길 때
1. `Code\교각모델링앱\` 폴더를 통째로 복사합니다. 기존 교각 자료가 필요 없으면 `data\` 안의 교각 폴더는 빼도 됩니다. 단 **`data\_템플릿\` 폴더는 반드시 함께 복사**합니다(새 교각의 출발점).
2. 보고서 PDF 변환기를 쓰므로 `Code\교각모델링\md_to_pdf.py`도 같은 상대 위치에 함께 복사합니다.
3. Python 3.12를 설치하고, 명령창에서 다음을 실행합니다.
> `python -m pip install flask ezdxf reportlab`
4. Rhino 8과 ODA File Converter 27.1.0을 설치합니다.
5. Rhino가 다른 곳에 설치되어 있으면 환경변수 `PIERAPP_RHINO`에 Rhino.exe 경로를 넣습니다.
---
## 3. 앱 켜고 끄기
### 3.1 켜기와 접속
1. 명령창(PowerShell 또는 cmd)을 엽니다.
2. 다음 명령을 입력합니다.
> `python "C:\Users\User\Desktop\바이브코딩\pier_T\Code\교각모델링앱\web\app.py"`
3. "Running on http://127.0.0.1:5000"이 보이면 브라우저 주소창에 **http://127.0.0.1:5000** 을 입력합니다.
### 3.2 끄기와 보안 주의
- 끌 때는 명령창에서 **Ctrl + C**를 누르거나 창을 닫습니다.
- 앱은 **이 PC에서만** 접속됩니다(127.0.0.1). 로그인 기능이 없으므로 다른 PC에서 접속하게 설정하지 마세요.
- 게이트가 실행 중일 때 앱을 끄면 그 게이트는 '중단됨'으로 표시됩니다. 다시 켠 뒤 다시 실행하면 됩니다.
---
## 4. 화면 구성
| 화면 | 들어가는 법 | 주요 버튼·기능 |
| :--- | :--- | :--- |
| 교각 목록 | 첫 화면 | 교각 선택, **새 교각 만들기**, **삭제**(이름 입력 후), 아래쪽 **보호 템플릿** 표(형식 설명·모델링 게이트·원본·저장일) |
| 교각 | 목록에서 교각 이름 클릭 | 1. 도면 **올리기·변환** / 2. 입력 묶음 목록, **필요한 묶음 일괄 확정** / 3. 게이트 현황, **일괄 승인** |
| 도면 문자 검색 | 위쪽 메뉴 | 글자·숫자 검색, 정규식 검색. 도면(D1~D3)·레이어·좌표 표시. 아래쪽 **핸들 조회**(객체 핸들로 선·호 등의 좌표·길이·반지름 보기) |
| 표 후보값 | 위쪽 메뉴 | 도면 표에서 읽은 값과 현재 값 비교, **선택한 후보값 반영** |
| 게이트 | 위쪽 메뉴 | **일괄 승인**, 게이트별 **실행**·**승인**·**반려**, **모델 내려받기**, **보고서 초안 생성** |
| 묶음 편집 | 교각 화면의 묶음 이름 클릭 | 값(JSON) **저장**(위치 목록은 치수 사슬로 입력 가능), **저장된 값으로 확정** |
판정 표시는 색과 글자를 함께 씁니다. PASS(초록), FAIL(빨강), 계획 FAIL·주의(주황), 미실행·미확정·확정 불필요(참고)(회색).
---
## 5. 따라 하기: 새 교각 모델 만들기
운곡교 P2를 예로 듭니다.
### 5.1 교각 만들기
1. 교각 목록 아래 **새 교각**에서 이름(예: `운곡교p2`)을 입력합니다.
2. 형식은 **T형**을 고릅니다.
3. **템플릿**을 고릅니다. 목록은 두 묶음으로 나뉩니다.
- **보호 템플릿** (권장): 도면의 형식에 맞는 것을 고릅니다. 운곡교와 같은 형식이면 `운곡교P1형`, 울산과 같은 형식이면 `산외교울산P1형`, 기초판 없이 말뚝 하나 위에 기둥이 서는 형식이면 `Ramp-A교P1형`, 코핑이 평면에서 비스듬한(사각) 형식이면 `옥성교P1형`, 말뚝 없는 직접기초에 대좌 5개를 앞뒤 받침이 함께 쓰는 형식이면 `새재1교P1형`. 형식 설명은 교각 목록 아래 '보호 템플릿' 표에서 봅니다.
- **기존 교각 복사**: 이미 작업한 다른 교각의 값을 그대로 가져올 때 씁니다. 그 교각을 나중에 고치거나 지워도 새 교각에는 영향이 없습니다.
4. **[만들기]**를 누릅니다. 템플릿의 params·expected가 복사되어 출발점이 되고, 교각 목록의 '템플릿' 칸에 "템플릿: 산외교울산P1형"처럼 표시됩니다.
> 주의: 템플릿 값은 **원본 교각의 도면 값**입니다. 복사한 값 그대로 게이트를 실행하면 원본 교각의 모델이 만들어질 뿐입니다. 반드시 5.3절대로 새 도면 값으로 바꾼 뒤 확정하세요.
### 5.2 도면 올리기
1. 교각 화면 **1. 도면**에서 [파일 선택]으로 DWG 파일들을 한꺼번에 고릅니다.
2. **[올리기·변환]**을 누릅니다. 파일 이름 순서대로 D1, D2, D3로 부릅니다.
3. 몇 초 뒤 도면 목록과 "색인 문자 ○○개"가 표시되면 완료입니다(운곡교 P2: 3장, 1,836개).
### 5.3 값 확인
입력 값은 두 종류입니다.
| 구분 | 뜻 | 원칙 |
| :--- | :--- | :--- |
| **params** (생성값) | 모델을 만드는 값 (치수, 좌표, 철근 배치) | 도면 작도를 반영 |
| **expected** (검사 기준값) | 게이트가 모델을 검사할 때 쓰는 값 | 도면의 **치수 문자·표에서 따로** 옮김. params를 베끼면 검사가 의미 없어집니다 |
1. **표 후보값**: 위쪽 메뉴 [표 후보값]에서 '다름'인 줄을 도면과 대조합니다. 맞으면 체크하고 **[선택한 후보값 반영]**을 누릅니다.
- 같은 표 값이 `expected`(검사 기준) 줄과 `params`(생성값) 줄로 **따로** 나옵니다. params 줄은 받침(`bearing_seats`의 el_x·h1·h2·A·B)과 솔플레이트(`sole_plates`의 S·L·W·T·h3)이며, params에 이미 있는 칸만 나옵니다.
- 주의: 두 줄을 함께 반영하면 표를 잘못 읽었을 때 모델과 검사 기준이 같이 틀려 게이트가 통과해 버립니다. params 줄은 도면 작도와 따로 대조한 뒤 고르세요.
2. **문자 검색**: 표 밖의 치수는 [도면 문자 검색]에서 찾습니다. 예: `EL. 25.123`, `10.350`, `@250`
- **핸들 조회**: 같은 화면 아래에서 도면(D1 등)과 CAD에서 확인한 객체 핸들(예: `21A76`)을 넣으면 그 객체의 종류·레이어·좌표·길이(호는 반지름·각도)를 보여 줍니다. 운곡교 P2 판독에서 D1 외곽선을 핸들로 읽은 작업을 화면에서 할 수 있습니다. 값은 자동 반영하지 않으며, 좌표는 도면 좌표입니다.
3. **묶음 편집**: 교각 화면 2절에서 묶음 이름을 눌러 값을 고치고 **[저장]**합니다. 단위는 mm이고, 형식(객체·목록·숫자)은 바꿀 수 없습니다.
- **치수 사슬 입력**: 철근 위치처럼 긴 숫자 목록 자리에 `{"chain": "-4575, 200, 70@125, 200"}`처럼 씁니다. 첫 값은 시작 위치, 나머지는 증분이며 `n@p`는 간격 p를 n번 반복합니다(도면의 `22@120`과 같은 뜻). 저장하면 숫자 목록(이 예는 73개)으로 펼쳐져 저장되고, 형식이 틀리면 저장되지 않습니다.
새 도면의 값을 모두 직접 채우기는 분량이 많습니다. 운곡교 P2는 판독 작업으로 값을 채웠습니다(판독서: `DOC\02_분석\분석_운곡교P2교각도면판독_2026-10-12_v0.1.00.md`).
- **울산 형식의 주의**: `산외교울산P1형`의 코핑 철근(`coping_rebar`)은 철근 372개의 중심선 좌표 목록이라 화면에서 손으로 고치기 어렵습니다. 울산의 판독 스크립트(`Code\울산P1판독\extract_r2.py`~`extract_r4.py`)를 새 도면에 맞게 고쳐 값을 만드는 판독 작업으로 진행하세요.
- **옥성교 형식의 주의**: 사각은 코핑 묶음의 `skew_deg`(도), 측면 테이퍼는 `side_taper`, 말뚝은 `piles`, 앞뒤 받침이 함께 쓰는 대좌는 `bearing_seats`의 `pedestals`(평면 네 모서리와 상면 경사)로 넣습니다. 코핑 외곽 `profile_xz`는 사각을 빼고 중심선(y = 0)에서 본 정면 모양으로 씁니다. 현재 형상(G1)·받침(G5)만 모델링되어 있습니다.
- **Ramp-A 형식의 주의**: `Ramp-A교P1형`의 코핑 철근(`coping_rebar`, 449본)도 철근별 중심선 목록입니다. 판독 스크립트 `Code\RampA판독\extract_g4.py`를 새 도면에 맞게 고쳐 값을 만드세요. 말뚝은 `pile`(구간별 지름), 말뚝 철근망은 `shaft_rebar` 묶음입니다. 이 형식에는 기초·버림 묶음이 없으며, 없는 묶음은 확정 대상이 아닙니다.
- 울산 형식의 재료표(머리행이 여러 줄)와 받침별로 다른 값(h3, 솔플레이트 L·T)도 [표 후보값]에서 읽고 비교합니다. 받침별 값은 해당 받침 칸만 바꿉니다.
### 5.4 확정
- **일괄 확정**: 교각 화면 2절 아래 **확정자**에 이름을 넣고 **[필요한 묶음 일괄 확정 (○개)]** → [확인]. 게이트에 필요한 미확정 묶음을 모두 확정합니다(운곡교 형식 23개, 울산 형식 26개, Ramp-A 형식 14개).
- **확정 대상**: 치수·철근·기대값 묶음과 **실행 설정 묶음**입니다. 실행 설정 묶음은 모델링할 게이트 범위(`scope`), 모델 생성 스크립트(`builders`), 점검 스크립트(`checkers`), 오류 검출 시험 항목(`negative`)입니다. 결과를 바꾸므로 확정해야 게이트를 실행할 수 있습니다. 이 묶음이 없는 교각(운곡교 형식)은 기본값을 쓰며 확정이 필요 없습니다.
- **확정 불필요(참고)**: `_schema`, `_meta`, `_note`, `○○_src` 같은 형식·출처 메모 묶음은 게이트가 쓰지 않습니다. 회색 '확정 불필요(참고)'로 표시되며 확정하지 않아도 됩니다.
- **개별 확정**: 묶음 편집 화면 아래 확정자를 넣고 **[저장된 값으로 확정]**.
- 확정 뒤 값을 고치면 그 묶음은 자동으로 '변경됨 · 재확정 필요'가 되고, 승인된 게이트도 '재실행 필요'가 됩니다.
- 확정은 **"내가 이 값을 도면과 대조했다"는 기록**입니다. 일괄 확정을 쓰더라도 값은 먼저 검토하세요.
### 5.5 게이트 실행과 승인
**방법 1 — 일괄 승인 (빠름, 권장)**
1. 교각 화면 3절 또는 게이트 화면 위쪽의 **판정자**에 이름을 넣습니다.
2. **[G1~G5 일괄 승인]** → [확인]을 누릅니다.
3. 약 2.5분 뒤 진행 기록에 "완료"가 뜹니다.
- 최신 PASS 결과가 있는 게이트는 다시 실행하지 않고 바로 승인합니다.
- 나머지는 Rhino 한 번 실행으로 G1~G5를 차례로 만들고 검사합니다. **중간 저장·재로드는 하지 않고** 최종 G5 모델만 저장합니다.
- **PASS인 게이트만** 승인하고(의견란 '일괄 실행 자동 승인'), FAIL이 나오면 그 게이트에서 멈춥니다.
**방법 2 — 개별 실행 (꼼꼼함)**
1. 게이트 화면에서 **[G1 실행]**을 누르면 1~2분 뒤 결과가 나옵니다(화면이 5초마다 새로 고쳐짐).
2. 결과를 보고 판정자를 넣고 **[승인]**을 누릅니다. FAIL이면 승인 버튼이 막혀 있고, **[반려]**에는 사유가 필요합니다.
3. G2~G5도 같은 방식으로 진행합니다. 개별 실행은 게이트마다 모델을 저장하고 다시 열어 검사하므로, 게이트별 모델(G1~G4)도 내려받을 수 있습니다.
**결과 표 읽는 법**
| 항목 | 정상 | 뜻 |
| :--- | :--- | :--- |
| 검사 | 예: 171/171 | 검사 항목 중 PASS 수 |
| 미계획 FAIL | 0건 | 1건이라도 있으면 게이트 FAIL |
| 계획 FAIL | 주황 표시 | 미리 승인된 예외(7.2절). 게이트 PASS에 영향 없음 |
| 음성 시험 | 검출 / 검출 | 객체를 일부러 옮겼을 때 검사기가 잡아내는지 확인(검사기 자체 점검) |
| 재로드 | 일치 (일괄 실행은 '생략') | 저장한 파일을 다시 열어도 객체 수가 같은지 |
| 앞 게이트 객체 불변 | 불변 (일괄 실행은 '생략') | 이번 단계가 앞 단계 객체를 건드리지 않았는지 |
### 5.6 결과 받기
- **모델**: 게이트 화면 G5 결과의 **[○○_G5.3dm 내려받기]**. G5 모델에 콘크리트·철근·받침·솔플레이트가 모두 들어 있습니다(운곡교 P2: 3,350개 객체, 약 50 MB).
- **검토보고서 초안**: 게이트 화면 위쪽 **작성자**에 이름을 넣고 **[보고서 초안 생성 (MD + PDF)]** → **[MD 받기]** 또는 **[PDF 받기]**.
- 자동으로 채워지는 장: 1 개요, 2 오류·불일치, 6 철근재료표(원본 대 모델), 7 철근상세, 8 검증 방법
- **담당자가 쓰는 장**: 3 개선방안, 4 추가 사항, 5 누락. MD 파일을 열어 작성합니다.
- 생성 직후 화면에 **자체 점검** 결과가 나옵니다(장 누락, 재료표 행 수, 지적 건수). 철근이 있는 교각인데 재료표를 읽지 못하면 "재료표를 읽지 못함"과 함께 '미통과'로 표시됩니다. 이때는 도면을 올렸는지, [표 후보값]에 재료표가 보이는지 확인합니다.
---
## 6. 결과물이 저장되는 곳
### 6.1 교각별 폴더
교각 하나마다 폴더 하나가 생깁니다.
> `C:\Users\User\Desktop\바이브코딩\pier_T\Code\교각모델링앱\data\<교각 이름>\`
| 파일·폴더 | 내용 |
| :--- | :--- |
| `pier.json` | 교각 이름, 형식, 만든 날, 템플릿 |
| `params.json` | 생성값 (모델을 만드는 값) |
| `expected.json` | 검사 기준값, 계획 FAIL 목록 |
| `confirm.json` | 묶음별 확정 기록 (확정자, 시각) |
| `drawings\dwg\` | 올린 DWG 사본 |
| `drawings\dxf\` | 변환한 DXF |
| `drawings\texts.json`, `audit.json` | 문자 색인, 변환 기록(원본 파일의 SHA-256 포함) |
| `runs\current\` | **게이트 결과와 모델, 보고서** (6.2절) |
| `backup\` | 판독 작업 때 남긴 입력 파일의 이전 판 (판독 작업을 한 교각만) |
### 6.2 결과 파일 (`runs\current\`)
| 파일 | 내용 |
| :--- | :--- |
| `G5.3dm` | **최종 모델** (일괄·개별 실행 모두 생성) |
| `G1.3dm` ~ `G4.3dm` | 단계별 모델 (개별 실행 때만 생성) |
| `G1_gate.json` ~ `G5_gate.json` | 게이트 판정 요약 |
| `G1.json` ~ `G5.json` | 검사 항목별 상세 결과 (기대값, 실측값, 판정) |
| `G*_negH.json`, `G*_negV.json` | 음성 시험 결과 |
| `G*_fp.json` | 객체 지문 (개별 실행 때만) |
| `approvals.json` | 게이트 승인·반려 기록 (판정자, 시각, 의견) |
| `batch.json` | 최근 일괄 승인 진행 기록 |
| `보고서_<교각>교각모델링검토_<날짜>_v0.1.00.md` / `.pdf` | 검토보고서 초안 |
운곡교 P2의 예: `data\운곡교p2\runs\current\G5.3dm`(약 50 MB), `보고서_운곡교p2교각모델링검토_2026-10-12_v0.1.00.pdf`.
- 같은 교각을 다시 실행하면 `runs\current\`의 파일이 **새 결과로 바뀝니다**. 이전 결과를 남기고 싶으면 실행 전에 파일을 다른 곳에 복사하세요.
### 6.3 임시 작업 폴더
Rhino 작업마다 임시 폴더가 생깁니다.
> `C:\Users\User\AppData\Local\PierApp\jobs\`
- 작업 내용과 결과가 그대로 남아 문제 분석에 쓸 수 있지만, 계속 쌓입니다(2026-10-12 현재 233개, 약 2.5 GB).
- 앱을 끈 상태에서 폴더 안의 내용을 지워도 됩니다. 교각 결과(`data\`)에는 영향이 없습니다.
### 6.4 삭제한 교각 (휴지통)
- 교각 목록에서 삭제하면 바로 지우지 않고 다음 위치로 옮깁니다.
> `...\교각모델링앱\data\_휴지통\<교각 이름>_<삭제 시각>\`
- **복구**: 이 폴더를 `data\`로 옮기고 이름 끝의 시각을 지웁니다(예: `운곡교p2_20261012_173000` → `운곡교p2`).
- 완전히 지우려면 탐색기에서 `_휴지통` 폴더를 지웁니다.
### 6.5 보호 템플릿
> `...\교각모델링앱\data\_템플릿\<템플릿 이름>\`
| 파일 | 내용 |
| :--- | :--- |
| `params.json`, `expected.json` | 원본 교각의 값 (고정 사본) |
| `template.json` | 형식 설명, 원본 교각, 저장일, 입력 해시 |
- 보호 템플릿은 교각 목록에 나오지 않고, 화면에서 고치거나 지울 수 없습니다. 원본 교각을 고치거나 삭제해도 템플릿은 바뀌지 않습니다.
- **템플릿 추가·갱신**은 명령줄 도구로 합니다(부록 A). 같은 이름으로 다시 저장하면 이전 사본은 `_템플릿\_이전\`에 남습니다.
- 추가·갱신한 템플릿은 교각 목록 화면을 새로 고치면 보입니다.
---
## 7. 검사(게이트)를 이해하기
### 7.1 G1~G5 검사 내용
| 게이트 | 검사 내용 | 항목 수 (운곡교 P1 / P2 / 산외교 울산 P1 / Ramp-A교 P1 / 옥성교 P1) |
| :--- | :--- | :--- |
| G1 형상 | 기초·버림·기둥·코핑 치수와 EL, 코핑 단면(원호 R 또는 직선 경사), 체적, 말뚝 배치, 받침대좌·패드 높이·위치·회전 | 171 / 171 / 104 / 97 / 147 |
| G2 기둥 철근 | 주철근·띠철근 개수, 길이(재료표 L), 반지름·각도, 띠철근 높이 사슬, 콘크리트 내부·피복 | 42 / 42 / 35 / 26 / 39 |
| G3 확대기초 철근 (Ramp-A: 말뚝 철근망) | 개수, 길이, 층 높이, 위치 사슬, 교대 배치, 체크무늬 배치, 철근 색 (Ramp-A: 주철근 2단·띠철근·U형·PLATE) | 73 / 73 / 63 / 48 / 75 |
| G4 코핑 철근 | 개수, 길이, 변하는 치수 범위, 단·스터럽·루프 위치, 피복, 철근 색 | 116 / 116 / 129 / 126 / 251 |
| G5 교량받침·솔플레이트 | 받침 하면 EL.'X', 높이 h3, 크기, 경사 S, 방향, 평면 위치, 색 | 183 / 183 / 75 / 39 / 183 |
새재1교 P1(G1 138 · G2 41 · G3 76(계획 FAIL 4) · G5 183, 코핑 철근 미모델링)은 위 표에 칸이 없어 따로 적습니다. 형식마다 생성기·검사기가 달라 항목 수도 다릅니다. 어떤 생성기·검사기를 쓰는지는 params의 `builders`, expected의 `checkers` 묶음에 적혀 있고, 템플릿에서 그대로 복사됩니다.
**게이트 PASS 조건**: 미계획 FAIL 0건 + 음성 시험 2건 검출 + (개별 실행일 때) 재로드 일치 + 앞 게이트 객체 불변.
### 7.2 계획 FAIL (승인된 예외)
도면끼리 값이 서로 다를 때(예: 작도 개수 ≠ 재료표 개수) 사용자 결정으로 한쪽을 채택하면, 다른 쪽과의 차이는 FAIL로 남습니다. 이런 항목을 **계획 FAIL**로 등록하면 게이트는 PASS가 되고, 보고서에 '불일치'로 자동 등록됩니다.
- 등록 위치: expected 묶음의 `planned_fail` (게이트, 항목 이름, 사유, 승인자)
- 운곡교 P2 예: G3 B9 개수(작도 551 대 재료표 493), B12(32 대 38), G4 C9~C13 폭(작도 폭 채택)
---
## 8. 문제가 생겼을 때
| 증상 | 원인 | 조치 |
| :--- | :--- | :--- |
| 접속이 안 됨 | 앱이 꺼져 있음 | 3.1절대로 앱을 켬 |
| "실행 불가: ○○ 미확정" | 필요한 묶음이 미확정 | 교각 화면에서 일괄 확정 또는 해당 묶음 확정 |
| "실행 불가: G1 미승인" | 앞 게이트가 승인되지 않음 | 앞 게이트부터 승인하거나 일괄 승인 사용 |
| 게이트가 '중단됨' | 실행 중 앱이 꺼짐 | [실행] 또는 [일괄 승인]을 다시 누름 |
| 게이트 FAIL | 입력값이 도면과 다르거나 도면끼리 충돌 | 결과의 '미계획 FAIL' 항목을 보고 해당 묶음을 고친 뒤 다시 실행. 의도한 차이면 계획 FAIL로 등록 |
| '입력 변경 · 재실행 필요' | 승인 뒤 값을 고침 | 게이트를 다시 실행·승인 |
| 실행이 오래 걸림 | 이 PC의 Rhino가 가끔 늦게 뜨거나 안 닫힘 | 기다리면 앱이 자동으로 처리함(결과 기록 후 30초 안에 Rhino가 안 닫히면 강제 종료, 시작이 10분 넘게 멈추면 1회 재시도) |
| 표 후보값이 "인식된 표 없음" | 표 제목 형식이 다름 | 문자 검색으로 값을 찾아 묶음 편집에서 직접 입력 |
| 삭제 실패 "파일 사용 중" | 탐색기·Rhino 등이 파일을 열고 있음 | 열린 창을 닫고 다시 시도 |
| G1~G4 모델 내려받기가 없음 | 일괄 실행은 G5만 저장 | 필요하면 해당 게이트를 개별 실행 |
| 템플릿 선택에 '보호 템플릿'이 없음 | 앱을 이 기능 이전 판으로 켜 둠, 또는 `data\_템플릿\` 폴더가 없음 | 앱을 껐다 켬. 폴더가 없으면 부록 A의 템플릿 저장 명령을 실행 |
| 새 교각 게이트가 원본 교각 모델을 만듦 | 템플릿 값을 바꾸지 않고 확정함 | 5.3절대로 새 도면 값으로 바꾼 뒤 재확정·재실행 |
---
## 9. 한계와 주의
- **판독 규칙의 검증 범위**: 표 자동 인식과 판독 규칙은 운곡교 P1·P2, 산외교 울산 P1, Ramp-A교 P1, 옥성교 P1 도면으로만 확인했습니다(울산: 받침 표 2종, 재료표 34마크 모두 인식. Ramp-A: 받침 표 2종 인식, 형식 열이 없는 재료표는 일부만 인식). 다른 도면에서는 후보값을 반드시 도면과 대조하세요.
- **음성 시험 대상**: 음성 시험으로 옮길 객체는 expected의 `negative` 묶음에 교각별로 지정합니다. 템플릿 값은 원본 교각 기준(운곡교형 받침 10개, 울산형 받침 4개)이므로, 받침·철근 마크가 다르면 이 묶음도 고쳐야 합니다. `negative` 묶음이 없는 교각(운곡교 형식)은 기본 대상(BS08·SP08 등)을 쓰되, 받침이 그보다 적으면 마지막 받침 번호로 바꿔 씁니다. 철근 마크(P2·B4·C11 등)는 바꾸지 않습니다.
- **재료표 범위 문자**: `12.228~3.151`처럼 열 폭을 넘는 범위 문자도 해당 열(A·B 등)로 읽습니다. 다만 이 값은 기록용이며 후보값 비교에는 쓰지 않습니다.
- **옥성교 형식의 추정 사항**: 대좌 상면 경사, 솔플레이트 두꺼운 쪽(+Y), 강관말뚝을 속찬 원기둥으로 표현한 것은 추정입니다(미해결 목록 #24). 코핑·교좌면 철근도 추정이 있습니다: S1~S4를 가운데 대좌에, 교좌면 그물을 평행사변형 방향으로, C7 가장자리 2본·C18 낮은 단(다리 위로)·C20 상면 줄, 135° 갈고리·겹이음 미모델 등(판독서 v0.1.06 11장, 미해결 목록 #24).
- **새재1교 형식의 추정 사항**: 대좌 상면을 앞·뒤 받침 위치를 잇는 평면 경사로, 기둥 fck를 35 MPa로, 솔플레이트 두꺼운 쪽을 −Y로 둔 것은 추정입니다(판독서 `분석_새재1교P1교각도면판독_2026-10-15_v0.1.00.md`). 기둥 철근 G2는 모델링했고(띠철근 P3·P4 구간 배정, 크로스타이 Y 높임은 추정) 기초 철근 G3는 모델링했고(X방향 51곳 도면 채택으로 재료표 53과의 차이 4건은 계획 FAIL, B9 행 규칙은 추정) 코핑 철근 G4는 아직 모델링하지 않았습니다.
- **Ramp-A 형식의 추정 사항**: Ramp-A교 P1 모델에도 도면에 없는 배치를 추정한 곳이 있습니다(바닥 U형 철근, C15, 코핑 모서리 철근 단축 등, 미해결 목록 #23). 이 템플릿으로 시작한 교각도 같은 판단을 다시 확인하세요.
- **울산 형식의 추정 사항**: 산외교 울산 P1 모델에는 도면이 명확하지 않아 추정한 배치와 도면끼리의 불일치가 있습니다(미해결 목록 #22). 이 템플릿으로 시작한 교각도 같은 판단을 다시 확인하세요.
- **일괄 실행의 검증 범위**: 일괄 실행은 재로드와 앞 게이트 비교를 하지 않습니다. 저장·재로드까지 검증하려면 개별 실행을 쓰세요.
- **확정·승인의 의미**: 확정과 승인은 사람의 검토 기록입니다. 일괄 기능은 버튼을 누른 사람의 이름으로 기록합니다.
- **보고서는 초안**입니다. '오류'·'불일치' 판정과 3~5장 서술은 담당자가 확정합니다.
- 남은 개선 과제: 미해결 목록 #18(Rhino 실행 정체), #19(일반화), #22(울산 추정 사항), #23(Ramp-A 추정 사항), #24(옥성교) — `context-migration\OPEN_미해결목록.md`
---
## 부록 A. 명령줄 도구
화면 없이 쓰는 도구입니다. 명령창에서 실행합니다.
| 목적 | 명령 |
| :--- | :--- |
| 게이트 G1~G5 한 번에 실행 (개별 실행 방식) | `python tools\run_gates.py data\<교각> <결과 폴더>` |
| 특정 게이트만 | `python tools\run_gates.py data\<교각> <결과 폴더> --gates G1 G2` |
| 보고서 초안 | `python tools\make_report.py data\<교각>` |
| 모델만 생성 | `python tools\build_model.py data\<교각>\params.json <파일>.3dm` |
| 운곡교 P1 예제 실행 (앱이 켜져 있어야 함) | `python tools\run_example.py` |
| 보호 템플릿 저장·갱신 (교각 이름 대신 폴더 경로도 가능) | `python tools\make_template.py <교각 이름> <템플릿 이름> "<형식 설명>"` |
명령은 `Code\교각모델링앱\` 폴더에서 실행합니다.
## 부록 B. 용어
| 용어 | 뜻 |
| :--- | :--- |
| params (생성값) | 모델을 만드는 입력값 |
| expected (검사 기준값) | 도면 문자·표에서 따로 옮긴, 검사용 기대값 |
| 묶음 | params·expected 안의 항목 단위 (예: footing, G1) |
| 확정 | 묶음 값을 도면과 대조했다는 기록 |
| 게이트 | 단계별 생성·검사 묶음 (G1~G5) |
| 승인 / 반려 | 게이트 결과에 대한 사람의 판정 |
| 계획 FAIL | 사용자 결정에 따라 미리 승인한 예외 FAIL |
| 음성 시험 | 객체를 일부러 옮겨 검사기가 FAIL을 잡는지 보는 검사기 점검 |
| 재로드 | 저장한 모델 파일을 다시 열어 검사하는 것 |
| 지문 | 객체별 위치·크기·속성 요약. 앞 단계 객체가 바뀌지 않았는지 비교할 때 사용 |
| 일괄 승인 | 미승인 게이트를 한 번에 실행·승인하는 기능 |
| 보호 템플릿 | 새 교각의 출발점으로 쓰는 고정 사본. 화면에서 고칠 수 없음 |