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

View File
Whitespace-only changes.
@@ -0,0 +1,373 @@
# 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 ④) |
> 대상 독자: 이 앱을 처음 쓰는 교량 설계·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개를 앞뒤 받침이 함께 씀, 대좌 상면 경사) | 옥성교 P1 |
| `Ramp-A교P1형` | 기초판 없이 단일 현장타설말뚝(Ø2.35 암반 근입 + Ø2.5) · 원형 기둥 Ø2.0 · Y형(나팔형) 코핑(하면 R5,000, 끝면 평면 볼록, 상면 315 단차) · 받침 2개(평면 회전) | Ramp-A교 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형`. 형식 설명은 교각 목록 아래 '보호 템플릿' 표에서 봅니다.
- **기존 교각 복사**: 이미 작업한 다른 교각의 값을 그대로 가져올 때 씁니다. 그 교각을 나중에 고치거나 지워도 새 교각에는 영향이 없습니다.
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 / — |
| G3 확대기초 철근 (Ramp-A: 말뚝 철근망) | 개수, 길이, 층 높이, 위치 사슬, 교대 배치, 체크무늬 배치, 철근 색 (Ramp-A: 주철근 2단·띠철근·U형·PLATE) | 73 / 73 / 63 / 48 / — |
| G4 코핑 철근 | 개수, 길이, 변하는 치수 범위, 단·스터럽·루프 위치, 피복, 철근 색 | 116 / 116 / 129 / 126 / — |
| G5 교량받침·솔플레이트 | 받침 하면 EL.'X', 높이 h3, 크기, 경사 S, 방향, 평면 위치, 색 | 183 / 183 / 75 / 39 / 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).
- **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을 잡는지 보는 검사기 점검 |
| 재로드 | 저장한 모델 파일을 다시 열어 검사하는 것 |
| 지문 | 객체별 위치·크기·속성 요약. 앞 단계 객체가 바뀌지 않았는지 비교할 때 사용 |
| 일괄 승인 | 미승인 게이트를 한 번에 실행·승인하는 기능 |
| 보호 템플릿 | 새 교각의 출발점으로 쓰는 고정 사본. 화면에서 고칠 수 없음 |
@@ -0,0 +1,374 @@
# 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) |
> 대상 독자: 이 앱을 처음 쓰는 교량 설계·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.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형`. 형식 설명은 교각 목록 아래 '보호 템플릿' 표에서 봅니다.
- **기존 교각 복사**: 이미 작업한 다른 교각의 값을 그대로 가져올 때 씁니다. 그 교각을 나중에 고치거나 지워도 새 교각에는 영향이 없습니다.
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 |
형식마다 생성기·검사기가 달라 항목 수도 다릅니다. 어떤 생성기·검사기를 쓰는지는 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).
- **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을 잡는지 보는 검사기 점검 |
| 재로드 | 저장한 모델 파일을 다시 열어 검사하는 것 |
| 지문 | 객체별 위치·크기·속성 요약. 앞 단계 객체가 바뀌지 않았는지 비교할 때 사용 |
| 일괄 승인 | 미승인 게이트를 한 번에 실행·승인하는 기능 |
| 보호 템플릿 | 새 교각의 출발점으로 쓰는 고정 사본. 화면에서 고칠 수 없음 |
@@ -0,0 +1,377 @@
# 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 를 모델링 해줘" |
> 대상 독자: 이 앱을 처음 쓰는 교량 설계·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개 공유, 받침 평면 회전) · 형상 G1·받침 G5만 모델링 | 새재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 · 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~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을 잡는지 보는 검사기 점검 |
| 재로드 | 저장한 모델 파일을 다시 열어 검사하는 것 |
| 지문 | 객체별 위치·크기·속성 요약. 앞 단계 객체가 바뀌지 않았는지 비교할 때 사용 |
| 일괄 승인 | 미승인 게이트를 한 번에 실행·승인하는 기능 |
| 보호 템플릿 | 새 교각의 출발점으로 쓰는 고정 사본. 화면에서 고칠 수 없음 |
@@ -0,0 +1,378 @@
# 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 한계 | 사용자 지시 "계속진행해줘" |
> 대상 독자: 이 앱을 처음 쓰는 교량 설계·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본) · 코핑·기초 철근 미모델링 | 새재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 · 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·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을 잡는지 보는 검사기 점검 |
| 재로드 | 저장한 모델 파일을 다시 열어 검사하는 것 |
| 지문 | 객체별 위치·크기·속성 요약. 앞 단계 객체가 바뀌지 않았는지 비교할 때 사용 |
| 일괄 승인 | 미승인 게이트를 한 번에 실행·승인하는 기능 |
| 보호 템플릿 | 새 교각의 출발점으로 쓰는 고정 사본. 화면에서 고칠 수 없음 |
@@ -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을 잡는지 보는 검사기 점검 |
| 재로드 | 저장한 모델 파일을 다시 열어 검사하는 것 |
| 지문 | 객체별 위치·크기·속성 요약. 앞 단계 객체가 바뀌지 않았는지 비교할 때 사용 |
| 일괄 승인 | 미승인 게이트를 한 번에 실행·승인하는 기능 |
| 보호 템플릿 | 새 교각의 출발점으로 쓰는 고정 사본. 화면에서 고칠 수 없음 |
@@ -0,0 +1,504 @@
# 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 한계 | 사용자 지시 "진행해줘" |
| v0.2.11 | 2026-10-15 | 심영표 | 새재1교 P1 코핑·받침좌 철근(G4) 반영: 1.1 형식 표, 7.1 항목 수, 9 한계 | 사용자 지시 "진행해줘" |
| v0.2.12 | 2026-10-19 | 심영표 | 입력 묶음 확인·확정 개편(A~D단계) 반영: 1.1·1.2(6번째 템플릿 `산외교울산P2형`, 앱 확인·표 밖 치수 후보), 4 화면 구성, 5.1(도면 먼저 추천)·5.3·5.4(확정 방법 전면 개정, 이전 방식 일괄 확정 삭제), 6.1·6.5 파일, 8, 9, 부록 A·B. 화면 디자인 Prism 적용 | 사용자 지시 "D단계 착수해줘" |
| v0.2.13 | 2026-10-20 | 심영표 | 앱 확인 검사 2종 추가(C9 params↔expected 일관성, C3b 필드 단위 원본 잔존)와 점 좌표 목록 검사, 표 칸 하나에서만 따라간 표 밖 치수 후보를 C등급으로 내림: 4 화면 구성, 5.3, 5.4, 6.1, 8, 9, 부록 B | OPEN #34 ②③④⑥ |
| v0.2.14 | 2026-10-20 | 심영표 | 화면 「도면에서 읽기」 추가(운곡교 도면 틀의 코핑·기초·말뚝·기둥·받침·철근 값을 도면에서 읽어 비교·반영), 일괄 실행이 끝까지 가지 못했을 때의 안내(중단 이유, 이전 실행 결과 표시, 중간 결과, 무효 승인 표시): 4 화면 구성, 5.3, 5.5, 6.1, 8, 9, 부록 A | OPEN #34 ①⑤ |
| v0.2.15 | 2026-10-20 | 심영표 | 「검토 요약 확정」 추가(한 화면에서 검토하고 한 번에 확정, 사유 자동 기록): 4 화면 구성, 5.4, 6.1, 8, 9 | 사용자 "확정 판정에 시간이 너무 걸리고 사용자가 확인하기 어렵다" → 권고안 진행 |
| v0.2.16 | 2026-10-20 | 심영표 | 「도면에서 읽기」가 받침 표·솔플레이트 표·재료표 값까지 한 화면에서 반영(템플릿 원본 값을 한 번에 도면 값으로), 「검토 요약 확정」에 모두 체크·해제 버튼과 주의 표시: 4 화면 구성, 5.3, 5.4 | 사용자 "템플릿 원본 그대로도 모두 도면에서 읽기로 바꾸고, 미확정도 일괄 확정" |
> 대상 독자: 이 앱을 처음 쓰는 교량 설계·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절). 새 교각을 만들 때 형식에 맞는 **보호 템플릿**을 고르면 됩니다(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 |
| `산외교울산P2형` | 강관말뚝 Ø508 6×5 기초(**평면 37° 회전**) · 원형 기둥 Ø2.5 · 직선 경사 코핑(끝면 300 경사, 상면 130 단차, 평면 모서리 R500) · 받침 4개 · 철근 G2 링(주철근 68) · G3 기초(B7 320본은 추정) · G4 코핑·받침(철근별 중심선 372본) | 산외교 울산 P2 |
| `새재1교P1형` | 직접기초(말뚝 없음) · 원형 기둥 Ø2.2 · 직선 경사 코핑(끝면 수직, 상면 5단, 측면 3,000→2,200 테이퍼, 평면 직사각) · 받침 10개(대좌 5개 공유, 받침 평면 회전) · 철근 G2 기둥(주철근 2겹 49본) · G3 기초(철근별 중심선 307본) · G4 코핑·받침좌(철근별 중심선 873본) | 새재1교 P1 |
### 1.2 할 수 없는 일
- **T형 교각만** 다룹니다. 다른 형식은 교각을 만들 때 거부됩니다. T형이라도 위 네 형식과 모양이 크게 다르면(예: 다른 코핑 형상) 앱만으로는 모델을 만들 수 없고 생성기·검사기 추가가 필요합니다.
- 측량좌표(평면좌표) 변환, 구조계산, 철근 간 간섭 검사, 시공성 검토는 하지 않습니다.
- 도면 판독은 **반자동**입니다. 표 3종(받침 ELEVATION TABLE, 솔플레이트 TABLE, 철근재료표)은 자동으로 읽습니다. 표 밖 치수는 같은 도면 틀(예: 운곡교 P1~P4)이면 **후보**로 찾아 주지만(5.3절), 철근 위치 목록·코핑 외곽 같은 값은 앱이 읽지 못하므로 사용자가 확인·입력합니다.
- **앱은 확정하지 않습니다.** 앱 확인 '일치'는 "독립 근거(도면 표·재료표 수량 등)와 값이 같다"는 뜻이지 "도면이 맞다"는 보증이 아닙니다.
---
## 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. 화면 구성
화면은 Prism 디자인(Pretendard 글꼴)으로 통일되어 있습니다. 위쪽 띠에 앱 이름과, 교각을 연 뒤에는 그 교각의 메뉴(문자 검색·표 후보값·게이트)가 있습니다.
| 화면 | 들어가는 법 | 주요 버튼·기능 |
| :--- | :--- | :--- |
| 교각 목록 | 첫 화면 | 교각 선택, **도면으로 템플릿 추천**(도면을 먼저 올려 순위·근거 확인), **새 교각 만들기**, **삭제**(이름 입력 후), 아래쪽 **보호 템플릿** 표 |
| 도면으로 템플릿 추천 | 교각 목록 | 도면 올리기 → 템플릿 순위·추정 근거 → 6문항·각도 값 확인 → 판정 → 교각 만들기 |
| 교각 | 목록에서 교각 이름 클릭 | 1. 도면 **올리기·변환** / 2. **요약 띠**(앱 확인 결과 개수), **[전체 확인]**, **[일치 묶음 일괄 확정]**, 입력 묶음 표(변수 등급·값 출처·앱 확인·사람 확정) / 3. 게이트 현황, **일괄 승인** |
| 근거 보기 | 묶음 표의 [근거 보기] | 앱 확인 검사별 결과(C1~C9, C3b)·비교한 내용·도면 위치, 사유와 함께 **확정** |
| 검토 요약 확정 | 교각 화면의 [검토 요약으로 확정] | 확정이 필요한 묶음을 **한 화면**에 모아 "바뀐 것 · 앱이 확인한 것 · 앱이 확인하지 못한 것 · 값의 출처"를 보여 주고, 사용자가 **도면과 대조한 묶음에 체크**한 뒤 이름을 넣어 **한 번에 확정**. 불일치 묶음은 확정 불가, 사유는 앱이 자동 기록 |
| 일치 묶음 일괄 확정 | 교각 화면의 버튼 | 대상 묶음의 근거표(끝까지 내려야 활성화), 제외된 묶음과 사유, 확정자 입력 |
| 도면 문자 검색 | 위쪽 메뉴 | 글자·숫자 검색, 정규식 검색. 도면(D1~D3)·레이어·좌표 표시. 아래쪽 **핸들 조회** |
| 도면에서 읽기 | 위쪽 메뉴 | 운곡교 P1 도면 틀(P1~P4)에서 코핑·기초·말뚝·기둥·받침·철근 값을 **도면에서 읽어** 현재 값과 비교하고, **고른 줄만 반영**(반영 전 백업, 반영 기록 `read_log.json`) |
| 표 후보값 | 위쪽 메뉴 | **표 밖 치수 후보**(앵커, 등급 A/B/C, **도면 보기**), 도면 **치수 사슬 검산**, 도면 표에서 읽은 값과 현재 값 비교, **선택한 후보값 반영** |
| 게이트 | 위쪽 메뉴 | **일괄 승인**, 게이트별 **실행**·**승인**·**반려**, **모델 내려받기**, **보고서 초안 생성** |
| 묶음 편집 | 교각 화면의 묶음 이름 클릭 | 변수 등급·값 출처 표시, 값(JSON) **저장**(고정(F) 항목을 바꾸면 사유 필요, 생성(V3) 묶음은 저장 불가), **저장된 값으로 확정**(사유 칸 포함) |
판정 표시는 색과 글자·기호를 함께 씁니다. ● 일치·PASS(초록), ▲ 주의·계획 FAIL(황), ■ 불일치·FAIL(빨강), ◇ 근거 없음·미확정(점선 테두리), — 해당 없음(회색).
---
## 5. 따라 하기: 새 교각 모델 만들기
운곡교 P2를 예로 듭니다.
### 5.1 교각 만들기
**도면을 먼저 올려 추천받기(권장)**: 교각 목록의 **도면으로 템플릿 추천**에서 DWG를 올리고 [도면 읽고 추천 받기]를 누르면, 도면 문자에서 기초 형식(말뚝 유무)·코핑 하면 형상·받침 개수를 추정해 보호 템플릿을 일치 문항 수 순으로 보여 줍니다(추정 근거와 도면 위치 표시, 맞는 템플릿이 없으면 '판단 불가'). 아래 6문항(철근 형상·생성 방식은 사람이 답함)과 각도 값(코핑 skew·받침 회전·기초 회전)을 확인하면 판정이 나오고, 이름을 넣고 [교각 만들기]를 누르면 교각 폴더가 만들어지며 올린 도면이 그 안으로 옮겨집니다. 답이 템플릿과 다르면 [그래도 만들기]로 진행할 수 있고, 그 교각은 모든 화면 위에 닫을 수 없는 '형식 불일치 경고'가 표시됩니다.
**도면 없이 만들기**
1. 교각 목록 아래 **새 교각**에서 이름(예: `운곡교p2`)을 입력합니다.
2. 형식은 **T형**을 고릅니다.
3. **템플릿**을 고릅니다. 목록은 두 묶음으로 나뉩니다.
- **보호 템플릿** (권장): 도면의 형식에 맞는 것을 고릅니다. 운곡교와 같은 형식이면 `운곡교P1형`, 울산과 같은 형식이면 `산외교울산P1형`, 기초판 없이 말뚝 하나 위에 기둥이 서는 형식이면 `Ramp-A교P1형`, 코핑이 평면에서 비스듬한(사각) 형식이면 `옥성교P1형`, 말뚝 없는 직접기초에 대좌 5개를 앞뒤 받침이 함께 쓰는 형식이면 `새재1교P1형`, 강관말뚝 기초가 37° 회전한 직선 경사 코핑 형식이면 `산외교울산P2형`. 형식 설명은 교각 목록 아래 '보호 템플릿' 표에서 봅니다.
- **기존 교각 복사**: 이미 작업한 다른 교각의 값을 그대로 가져올 때 씁니다. 그 교각을 나중에 고치거나 지워도 새 교각에는 영향이 없습니다.
4. **[만들기]**를 누릅니다. 템플릿의 params·expected가 복사되어 출발점이 되고, 교각 목록의 '템플릿' 칸에 "템플릿: 산외교울산P1형"처럼 표시됩니다. 이때 변수 등급 파일(`variability.json`), 표 밖 치수 앵커(`anchors.json`), 묶음별 원본 해시(`pier.json`의 `origin`)도 함께 복사·기록됩니다.
> 주의: 템플릿 값은 **원본 교각의 도면 값**입니다. 복사한 값 그대로 게이트를 실행하면 원본 교각의 모델이 만들어질 뿐입니다. 앱은 복사한 뒤 한 번도 바뀌지 않은 묶음을 "▲ 템플릿 원본 그대로"로 표시하고 앱 확인을 '근거 없음'으로 두며, 이런 묶음은 일괄 확정 대상에서 빠집니다. 반드시 5.3절대로 새 도면 값으로 바꾼 뒤 확정하세요.
### 5.2 도면 올리기
1. 교각 화면 **1. 도면**에서 [파일 선택]으로 DWG 파일들을 한꺼번에 고릅니다.
2. **[올리기·변환]**을 누릅니다. 파일 이름 순서대로 D1, D2, D3로 부릅니다.
3. 몇 초 뒤 도면 목록과 "색인 문자 ○○개"가 표시되면 완료입니다(운곡교 P2: 3장, 1,836개).
### 5.3 값 확인
**도면에서 읽기 (운곡교 도면 틀)**: 위쪽 메뉴 [도면에서 읽기]는 운곡교 P1 도면 틀(P1~P4)의 첫 번째 도면(D1)과 철근재료표에서 코핑 윗면 계단·철근 단 높이·C14 점, 기초·말뚝·기둥 값, 받침 위치·회전, 기초 철근 층(규칙 + 재료표 개수), 기둥 철근(후프·결속)을 읽어 현재 값과 비교합니다. 묶음별로 "현재 / 읽은 값 / 근거" 표가 나오고, **체크한 줄만** [선택한 줄 반영]으로 들어갑니다. 반영 전에 `params.json`·`expected.json`·`confirm.json`을 `backup\before_geomread_…`에 보관하고 반영한 줄을 `read_log.json`에 남기며, 바뀐 묶음은 다시 확정해야 합니다.
- **표 값도 같은 화면에서 반영합니다(2026-10-20).** 읽은 값 아래 "표 값(받침·솔플레이트·재료표)" 구역에 받침 표(EL·h1·h2·A·B), 솔플레이트 표, 철근재료표에서 읽은 값 중 현재 값과 다른 줄이 함께 나옵니다. 이 화면 한 번으로 템플릿 원본 값이 도면 값으로 바뀌므로 [표 후보값]을 따로 돌릴 필요가 없습니다(같은 값을 [표 후보값]에서 골라 반영할 수도 있음). 받침마다 값이 다른 솔플레이트 길이(앞열 700, 뒤열 800 등)는 expected에 `{번호: 값}`으로 자동 기록합니다.
- 도면 틀이 다르면(공통 문자 비율 70 % 미만, 예: 새재1교·옥성교) 읽지 않고 이유를 알려 줍니다.
- 읽기 규칙은 모두 완성된 교각(P1)에서 같은 값이 재현되는지 먼저 확인한 것입니다. 이미 완성된 교각(P1·P3·P4)에서는 "읽은 값이 모두 현재 값과 같습니다"가 나옵니다.
- **추론 줄**(좌측 스터럽 윗면 등 도면에 그려져 있지 않은 값)은 기본으로 선택되어 있지 않습니다. 재료표와 대조한 뒤 반영 여부를 정하세요.
- params와 expected를 같은 도면 읽기로 채우면 둘이 서로 같은 것은 독립 근거가 아닙니다(앱 확인 C9). 표(재료표) 값은 [표 후보값]에서 따로 대조하세요.
- "확인이 필요한 점"에는 도면 점 개수와 재료표 개수가 다른 경우(예: B11·B12), 단순 이동값과 도면 원이 다른 점 등이 나옵니다. 재료표와 작도가 다를 때 작도를 채택하려면 계획된 FAIL 등록이 필요합니다.
입력 값은 두 종류입니다.
| 구분 | 뜻 | 원칙 |
| :--- | :--- | :--- |
| **params** (생성값) | 모델을 만드는 값 (치수, 좌표, 철근 배치) | 도면 작도를 반영 |
| **expected** (검사 기준값) | 게이트가 모델을 검사할 때 쓰는 값 | 도면의 **치수 문자·표에서 따로** 옮김. params를 베끼면 검사가 의미 없어집니다 |
0. **앱 확인 보기**: 교각 화면 2절 맨 위 요약 띠와 묶음 표의 「앱 확인」 열에서 어느 묶음이 일치·불일치·근거 없음인지 봅니다. 불일치 묶음의 [근거 보기]에서 무엇이 어떻게 다른지(예: "현재 42686 ≠ 표 41747") 알 수 있습니다.
1. **표 후보값**: 위쪽 메뉴 [표 후보값]에서 '다름'인 줄을 도면과 대조합니다. 맞으면 체크하고 **[선택한 후보값 반영]**을 누릅니다.
- 같은 표 값이 `expected`(검사 기준) 줄과 `params`(생성값) 줄로 **따로** 나옵니다. params 줄은 받침(`bearing_seats`의 el_x·h1·h2·A·B)과 솔플레이트(`sole_plates`의 S·L·W·T·h3)이며, params에 이미 있는 칸만 나옵니다.
- 주의: 두 줄을 함께 반영하면 표를 잘못 읽었을 때 모델과 검사 기준이 같이 틀려 게이트가 통과해 버립니다. params 줄은 도면 작도와 따로 대조한 뒤 고르세요.
- **표 밖 치수 후보**: 같은 도면 틀(예: 운곡교 P1~P4)이면 [표 후보값] 맨 위 「표 밖 치수 후보」에 템플릿 원본 교각이 값을 읽은 문자 위치를 새 도면에서 따라간 후보가 나옵니다. 등급 **A**(같은 치수가 여러 곳에서 같게 읽힘, 표 값과도 일치하면 표시) · **B**(한 곳 또는 일부만, 약 15 %는 틀림) · **C**(근거 약함, 반영 시 사유 필요). [도면 보기]로 그 위치를 확대 이미지로 확인합니다. 도면 틀 일치율이 70 % 미만이면 모든 후보가 C로 내려갑니다. 앵커가 없는 교각은 같은 화면에서 템플릿을 골라 앵커를 불러옵니다. 재료표 칸 **하나**에서만 따라간 후보는 재료표 행이 밀려 거짓 후보가 되기 쉬워서(운곡교 P3·P4에서 재료표의 길이 칸 "3.800"을 철근 사슬 끝으로 오인) 자동으로 C등급으로 내립니다(운곡교 P3·P4 확인값 기준 B등급 오답 10/65 → 2/39). **[선택한 후보 반영]**은 선택한 줄에만 적용되고, 같은 도면 문자에서 나온 후보를 params와 expected에 함께(따로 해도) 반영할 수 없습니다. 「빠른 선택」으로 A등급 후보를 expected만/params만 한 번에 고를 수 있습니다.
- **치수 사슬 검산**: 도면의 `n@간격=합계` 표기를 검산해(개수 × 간격 = 합계) 맞지 않는 것을 교각 화면과 [표 후보값]에 경고합니다(도면 자체의 오류일 수 있음).
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 확정
확정은 **"내가 이 값을 도면과 대조했다"는 사람의 기록**입니다. 앱은 확정하지 않고, 확정에 쓸 근거를 모아 줍니다.
**권장: 검토 요약으로 확정 (2026-10-20)** — 교각 화면 2절의 [검토 요약으로 확정]을 누르면 확정이 필요한 묶음이 한 화면에 모입니다.
1. **불일치**(빨간 구역): 확정할 수 없습니다. 값을 고치거나 원인을 해결한 뒤 다시 확인하세요.
2. **주의·근거 없음**: 묶음마다 "바뀐 것"(교각을 만들 때 대비 몇 개 값이 어떻게 바뀌었는지), "앱이 확인하지 못한 것", "값의 출처"(도면에서 읽기·표 밖 치수 후보 반영 이력)가 나옵니다. **도면과 직접 대조한 묶음에만 체크**하세요. 체크하지 않은 묶음은 미확정으로 남습니다.
3. **사람 결정 기록**(예: 계획된 FAIL 목록): 내용을 읽고 체크합니다. 설계자 확인 전 임시 등록은 사유에 그렇게 적혀 있는지 보세요.
4. **앱 확인 일치**: 근거를 훑어보고 맨 아래 "일치 ○개의 근거를 읽었습니다"에 한 번 체크합니다.
5. **[주의·근거 없음·결정 기록 모두 도면과 대조함으로 체크]** 버튼으로 한 번에 모두 체크할 수 있고([모두 해제]로 되돌림), 템플릿 원본 그대로이거나 설계자 확인 전 임시 등록이 들어 있는 묶음에는 **주의 표시**가 붙습니다. 주의 표시가 붙은 묶음이 있으면 모두 체크할 때 "○개가 포함됩니다. 모두 도면과 대조했습니까?" 확인창이 나옵니다. 주의 표시는 확정 기록의 사유("주의 표시: …")에도 남습니다.
6. 목록을 **끝까지 내리면** 확정자 이름과 공통 의견(선택)을 넣을 수 있고, [선택한 묶음 확정]을 누르면 체크한 묶음이 한 번에 확정됩니다.
- **사유는 앱이 자동으로 기록합니다**: "[검토 요약 일괄 확정] 사용자가 도면과 대조했다고 표시함. 앱 확인 근거 없음 — … | 변경: … | 출처: … | 의견: …". 확정 기록에는 그 시점의 앱 확인 상태가 함께 남아 보고서 8.1장에 올라갑니다.
- 목록이 바뀌었으면(값을 고침) "끝까지 읽은 뒤에 확정할 수 있습니다"가 나오므로 화면을 다시 여세요.
- 체크는 사용자의 선언입니다. 앱은 실제로 대조했는지 확인할 수 없으므로, 체크한 묶음은 도면과 직접 대조한 것이어야 합니다.
아래는 같은 확정을 다른 방법으로 하는 경우입니다.
**앱 확인 결과** — 교각 화면 2절 맨 위 요약 띠: "필요 26개 중 앱 확인 일치 9 · 주의 4 · 불일치 0 · 근거 없음 10 · 해당 없음 3 · 사람 확정 0". [전체 확인]을 누르면 앱이 다시 확인합니다(값·도면이 바뀌면 자동으로도 다시 확인).
| 앱 확인 | 뜻 | 확정 방법 |
| :--- | :--- | :--- |
| ● 일치 | 독립 근거(도면 표·재료표 수량·표 밖 치수 A등급·템플릿 고정 값)와 값이 같다 | [일치 묶음 일괄 확정] 가능 |
| ▲ 주의 | 수량만 확인했거나, 계획된 예외·B등급 후보와 다름 등 | 근거 보기에서 **사유와 함께** 개별 확정 |
| ■ 불일치 | 값이 도면 표·후보와 다르다 | 값을 고치거나, 사유와 함께 개별 확정 |
| ◇ 근거 없음 | 템플릿 원본 그대로이거나 앱이 읽지 못하는 값(철근 위치·코핑 외곽·표 밖 치수) | 도면과 직접 대조한 뒤 **사유와 함께** 개별 확정 |
| — 해당 없음 | 참고 정보·사람 결정 기록(계획 FAIL, 철근 색 등) | 참고 정보는 확정 불필요, 결정 기록은 개별 확정 |
'일치'는 "독립 근거와 같다"는 뜻이지 "도면이 맞다"는 보증이 아닙니다. 철근 위치·좌표와 표 밖 치수는 아직 앱이 대조하지 못하는 부분이 많습니다.
**검사 2종 추가 (2026-10-20)**
- **C9 params↔expected 일관성**: 새 도면 값을 넣다가 params만 고치고 expected는 옛 값으로 남기는 실수를 게이트 실행 전에 찾습니다(예: 코핑 윗면 단 높이, 받침 피치, 말뚝 피치·길이, 후프 사슬, 기초 철근 개수와 격자). 다르면 해당 묶음이 **불일치**가 되고 근거 보기에 "params … = ○ ≠ expected … = ○"가 나옵니다. 점 좌표로 대상을 지정하는 목록(`coping_rebar.c14.hooks_up`)이 실제 점(`c14.points`)과 맞는지도 같은 검사에서 봅니다. 새재1교·옥성교 같은 다른 형식은 해당하는 규칙만 적용됩니다.
- **C3b 필드 단위 원본 잔존**: 교각을 만들 때 기록한 값(`origin_values.json`)과 비교해, 이미 바뀐 묶음 안에서 높이로 보이는 값 중 옛 값 그대로 남은 것이 있으면 **주의**로 알려 줍니다(예: 새 도면의 높이로 바꾼 뒤에도 옛 좌표가 남은 점 목록). 이 기록이 없는 교각(앱이 기록을 만들기 전에 만든 교각)은 해당 없음이고, 필요하면 `python tools\make_origin_values.py <교각> <백업 폴더>`로 초기 백업에서 만들 수 있습니다.
**일치 묶음 일괄 확정**
1. 교각 화면의 **[일치 묶음 일괄 확정 (○개)]**를 누릅니다(대상이 없으면 버튼 대신 안내만 나옵니다).
2. 대상 묶음의 **근거표를 끝까지 내려** 읽습니다(내리기 전에는 확정자 입력·확정 단추가 막혀 있습니다). 제외된 묶음은 접힌 칸에서 사유를 볼 수 있습니다.
3. **확정자** 이름을 넣고 확정합니다. 앱 확인이 '일치'인 묶음만 확정되며, 확정 기록에는 입력한 이름과 당시 앱 확인 상태가 남습니다. 근거표를 읽은 뒤 대상 목록이 바뀌면(값 수정 등) 다시 읽어야 합니다.
**개별 확정(근거 보기)**: 묶음 이름 옆 **[근거 보기]**에서 앱 확인 검사(C1 출처·C2 표 대조·C2b 표 밖 치수·C3 템플릿 원본·C3b 필드 단위 원본 잔존·C4 수량·C5 params 독립·C6 범위·C7 고정 항목·C8 재생성·C9 params↔expected 일관성)의 결과와 비교 내용·도면 위치를 보고, 확정자와 **사유**를 넣어 확정합니다. 앱 확인이 일치가 아니면 사유가 없을 때 확정되지 않습니다. 묶음 편집 화면 아래의 [저장된 값으로 확정]도 같은 규칙입니다.
**변수 등급과 편집 규칙** (묶음 표의 「변수 등급」 열)
- **V1 값 변수**·**V2 목록 변수**: 도면마다 달라지는 값. 자유롭게 고칩니다.
- **V3 생성 변수**: 판독 스크립트가 만든 긴 목록(철근별 중심선 등). 화면에서 저장할 수 없습니다. 판독 스크립트를 다시 실행해 값을 만드세요.
- **F 고정**: 형식을 정의하는 값(`scope`, `builders`, `column.shape`, `coping.form` 등). 바꾸면 같은 템플릿이 아닐 수 있어 **사유를 입력해야** 저장되고, 사유는 `edit_log.json`에 기록됩니다.
**확정 대상**: 치수·철근·기대값 묶음과 **실행 설정 묶음**(`scope`·`builders`·`checkers`·`negative`)입니다. 결과를 바꾸므로 확정해야 게이트를 실행할 수 있습니다. 이 묶음이 없는 교각(운곡교 형식)은 기본값을 쓰며 확정이 필요 없습니다.
**확정 불필요(참고)**: `_schema`, `_meta`, `_note`, `○○_src` 같은 형식·출처 메모 묶음은 게이트가 쓰지 않습니다. 확정하지 않아도 됩니다.
- 확정 뒤 값을 고치면 그 묶음은 자동으로 '변경됨 · 재확정 필요'가 되고, 승인된 게이트도 '재실행 필요'가 됩니다.
- **이전 방식의 "필요한 묶음 일괄 확정"(앱 확인 없이 전부 확정)은 2026-10-19에 없어졌습니다.** 확정은 위의 두 방법뿐입니다.
### 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)도 내려받을 수 있습니다.
**일괄 실행이 끝까지 가지 못했을 때 (2026-10-20)**: 게이트 화면 위에 빨간 안내가 나옵니다.
- **이유**: 오류(원인 한 줄 표시), 어느 게이트의 FAIL, 실행 조건 미충족, 서버가 멈춤 중 하나로 알려 줍니다.
- **이전 실행 결과**: 이번 일괄 실행에서 갱신되지 않은 게이트는 "이전 실행 결과"로 표시하고 결과 시각을 함께 보여 줍니다. 그 결과와 승인을 이번 입력의 결과로 읽지 마세요.
- **임시 결과**: 중단되기 전에 계산된 게이트가 있으면 해당 게이트 표 위에 "중단된 실행의 임시 결과"(검사 PASS 수, FAIL 항목)를 따로 보여 줍니다. 계획된 예외를 구분하지 않은 검사기 원본이며 승인·보고서에는 쓰이지 않습니다.
- 입력이 바뀐 뒤의 옛 승인은 "승인 기록은 이전 입력 것(무효)"로 표시합니다.
**결과 표 읽는 법**
| 항목 | 정상 | 뜻 |
| :--- | :--- | :--- |
| 검사 | 예: 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` | 교각 이름, 형식, 만든 날, 템플릿, 템플릿 복사 기록(`origin`), 템플릿 적합성 답(`fit_answers`·`fit_mismatch`) |
| `params.json` | 생성값 (모델을 만드는 값) |
| `expected.json` | 검사 기준값, 계획 FAIL 목록 |
| `confirm.json` | 묶음별 확정 기록 (확정자, 시각, 사유, 확정 당시 앱 확인 상태) |
| `read_log.json` | 「도면에서 읽기」로 반영한 기록(시각, 반영자, 건수, 백업 폴더, 줄 목록) |
| `autocheck.json` | 앱 확인 결과 (묶음별 일치·주의·불일치 등과 검사 근거). 확정 기록과 별개이며 앱은 확정하지 않음 |
| `variability.json` | 묶음별 변수 등급(V1·V2·V3·F)과 값 출처 (템플릿에서 복사, 담당자 확정 전 초안) |
| `anchors.json` | 표 밖 치수 앵커(원본 교각이 값을 읽은 도면 문자 위치). 템플릿에서 복사 |
| `origin_values.json` | 교각을 만들 때의 params·expected 값 기록(C3b). 교각을 만들 때 앱이 자동으로 쓰며, 이전 교각은 `tools\make_origin_values.py`로 초기 백업에서 만든다("reconstructed"로 표시) |
| `edit_log.json`, `anchor_log.json` | 고정 항목 변경 사유 기록, 표 밖 치수 후보 반영 기록 |
| `confirm_view.json`, `review_view.json` | 일치 묶음 일괄 확정, 검토 요약 확정에서 목록을 끝까지 읽었다는 표식(그때 목록의 해시) |
| `drawings\view_cache\` | [도면 보기] 이미지 캐시 |
| `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` | 형식 설명, 원본 교각, 저장일, 입력 해시 |
| `variability.json`, `anchors.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) · G4 189 · 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절대로 앱을 켬 |
| "실행 불가: ○○ 미확정" | 필요한 묶음이 미확정 | 교각 화면에서 [일치 묶음 일괄 확정] 또는 근거 보기에서 해당 묶음 확정(5.4절) |
| [일치 묶음 일괄 확정]이 없고 "확정할 '일치' 묶음이 없습니다" | 앱 확인이 '일치'인 미확정 묶음이 없음 | 남은 묶음은 근거 보기에서 사유와 함께 개별 확정 |
| "사유를 입력해야 확정할 수 있습니다" | 앱 확인이 일치가 아닌 묶음 | 도면과 대조한 내용을 사유에 적어 확정 |
| "고정(F) 항목을 바꾸면 … 사유를 입력하세요" | 고정 항목 변경 | 정말 형식이 같은지 확인하고 사유를 적음. 형식이 다르면 다른 템플릿으로 시작 |
| "생성 변수(V3)는 화면에서 직접 고칠 수 없습니다" | 철근별 중심선 목록 등 | 판독 스크립트를 다시 실행해 값을 만듦 |
| "근거표를 열어 끝까지 읽은 뒤에 확정할 수 있습니다" | 일괄 확정 근거표를 끝까지 내리지 않음, 또는 읽은 뒤 대상이 바뀜 | 일괄 확정 화면에서 근거표를 끝까지 내려 다시 확정 |
| 후보 화면에 "이 교각에는 앵커가 없습니다" | 템플릿 없이 만든 교각 | 같은 도면 틀의 템플릿을 골라 앵커 불러오기 |
| 후보가 전부 C등급 | 도면 틀 일치율 70 % 미만(다른 도면 틀) | 후보를 근거로 쓰지 말고 표·문자 검색으로 직접 확인 |
| 도면 치수 사슬 경고 | 도면의 `개수@간격=합계`가 맞지 않음 | 도면 자체의 오류일 수 있으니 [도면 보기]로 확인하고 설계자에게 문의 |
| 근거 보기에 "C9 … params … ≠ expected …" | 같은 양을 나타내는 두 파일 값이 다름 | 어느 쪽이 도면 값인지 확인하고 다른 쪽을 고침(묶음 편집). 고친 묶음은 다시 확정 |
| 게이트 화면 "이 일괄 실행은 끝까지 가지 못했습니다" | 오류·FAIL·조건 미충족·서버 중단 | 안내에 적힌 이유를 해결하고 일괄 승인을 다시 실행. 표의 "이전 실행 결과"는 옛 결과 |
| 「도면에서 읽기」가 "읽지 않습니다" | 도면 틀이 다르거나 D1에서 필요한 선·글자를 찾지 못함 | 운곡교 P1~P4 도면 틀이 아니면 값을 직접 입력하거나 [표 후보값]을 사용 |
| 검토 요약에서 "끝까지 읽은 뒤에 확정할 수 있습니다" | 목록을 끝까지 내리지 않았거나 읽은 뒤 값이 바뀌어 목록이 달라짐 | 화면을 다시 열어 끝까지 내림 |
| 검토 요약에서 "확정한 묶음이 없습니다" | 체크한 묶음이 없음(일치 묶음은 맨 아래 "읽었습니다" 체크) | 도면과 대조한 묶음에 체크 |
| "C3b … 생성 시점 값 그대로" 주의 | 바뀐 묶음 안에서 높이 값 몇 개가 옛 값 그대로 | 해당 값이 새 도면에서도 같은 값이 맞는지 도면과 대조. 맞다면 사유를 적고 확정 |
| "실행 불가: 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도 모델링했습니다(옥성교 규칙 재적용, 받침좌 배치·C7 올린 줄·C18 다리 방향·스터럽 x 어긋남은 추정, 135° 갈고리·겹이음은 모델링하지 않음; 판독서 v0.1.03 10장).
- **Ramp-A 형식의 추정 사항**: Ramp-A교 P1 모델에도 도면에 없는 배치를 추정한 곳이 있습니다(바닥 U형 철근, C15, 코핑 모서리 철근 단축 등, 미해결 목록 #23). 이 템플릿으로 시작한 교각도 같은 판단을 다시 확인하세요.
- **울산 형식의 추정 사항**: 산외교 울산 P1 모델에는 도면이 명확하지 않아 추정한 배치와 도면끼리의 불일치가 있습니다(미해결 목록 #22). 이 템플릿으로 시작한 교각도 같은 판단을 다시 확인하세요.
- **일괄 실행의 검증 범위**: 일괄 실행은 재로드와 앞 게이트 비교를 하지 않습니다. 저장·재로드까지 검증하려면 개별 실행을 쓰세요.
- **확정·승인의 의미**: 확정과 승인은 사람의 검토 기록입니다. 일괄 기능(일치 묶음 일괄 확정, 일괄 승인)은 버튼을 누른 사람의 이름으로 기록합니다.
- **앱 확인의 한계**: '일치'는 독립 근거와 같다는 뜻입니다. 철근 위치 목록·코핑 외곽·표 밖 치수는 아직 대조하지 못해 '근거 없음'으로 남고, 철근 목록은 수량만 확인해 '주의'가 됩니다. C8(재생성 일치)은 스크립트가 연결되어 있지 않아 '해당 없음'입니다. 기존 교각은 템플릿 복사 기록이 없어 '템플릿 원본 그대로'를 판단하지 않습니다.
- **도면에서 읽기의 한계**: 운곡교 도면 틀 한 종류와 교각 4개(P1·P3·P4와 템플릿)에서만 확인했습니다. 좌측 스터럽 윗면·c14 좌측 규칙·결속철근 끝 높이는 P1 규칙을 가정한 추론이고, 설계 의도(기초 회전 방향 등)는 읽지 못합니다.
- **검토 요약 확정의 한계**: 체크는 사용자의 선언이라 앱이 실제 대조 여부를 확인하지 못합니다. 사유는 앱이 아는 사실로 자동 작성되지만 도면과 무엇을 어떻게 대조했는지는 공통 의견에 직접 적어야 남습니다.
- **C9의 한계**: 두 파일의 값이 같다는 것만 확인합니다. 같은 도면 읽기에서 두 파일을 채웠다면 틀린 값도 서로 같을 수 있습니다.
- **표 밖 치수 후보의 한계**: 같은 도면 틀에서만 작동합니다(시험: 같은 틀 A등급 45건 중 오답 0, B등급 약 14 % 오답, 다른 틀은 A·B 후보 없음). 1 m 미만 값과 계산해서 얻는 값은 앵커가 없고, 철근 점·선과 콘크리트 외곽 점열은 시험 결과 채택하지 않았습니다. 자기 도면에서 만든 앵커는 근거로 쓰지 않습니다.
- **보고서는 초안**입니다. '오류'·'불일치' 판정과 3~5장 서술은 담당자가 확정합니다.
- **울산 P2 형식의 추정 사항**: 기초 회전 방향(반시계)·말뚝(속찬 원기둥)·솔플레이트(두꺼운 쪽 +Y)·대좌 fck는 사용자 확인 하에 추정을 적용했고, 기초 철근 B7 320본 배치와 B8 띠철근 길이 불일치는 설계자 확인 대상입니다(미해결 목록 #32, 판독서 `분석_산외교울산P2교각도면판독_2026-10-15_v0.1.02.md`).
- 남은 개선 과제: 미해결 목록 #18(Rhino 실행 정체), #19(일반화), #22(울산 추정 사항), #23(Ramp-A 추정 사항), #24(옥성교), #26(입력 묶음 개편 마무리), #32(울산 P2), #33(운곡교 P4 도면 사슬) — `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 <교각 이름> <템플릿 이름> "<형식 설명>"` |
| 템플릿 변수 등급 파일 만들기 | `python tools\make_variability.py [--force]` |
| 도면에서 읽은 값 보기·반영(화면 「도면에서 읽기」와 같은 읽기) | `python tools\apply_pier_read.py <교각> [--dry]` |
| 도면 값 55항목을 params와 비교 | `python tools\verify_pier_geometry.py <교각>` |
| 교각 생성 시점 값 기록을 초기 백업에서 만들기(C3b) | `python tools\make_origin_values.py <교각> <백업 폴더 이름>` |
| 템플릿 표 밖 치수 앵커 만들기 | `python tools\make_anchors.py [--force]` |
| 실제 교각의 앱 확인 분포 보기 (data를 건드리지 않음) | `python tools\report_autocheck.py [교각 ...]` |
| 앵커 후보를 표 값으로 교차 검증 | `python tools\report_anchor_pier.py <교각> <템플릿> [--detail]` |
| 시험 일괄 실행 (Rhino 없는 시험 `fast`, 실제 Rhino 시험 `rhino`) | `python tools\run_all_tests.py <fast\|rhino\|all>` |
명령은 `Code\교각모델링앱\` 폴더에서 실행합니다.
## 부록 B. 용어
| 용어 | 뜻 |
| :--- | :--- |
| params (생성값) | 모델을 만드는 입력값 |
| expected (검사 기준값) | 도면 문자·표에서 따로 옮긴, 검사용 기대값 |
| 묶음 | params·expected 안의 항목 단위 (예: footing, G1) |
| 확정 | 묶음 값을 도면과 대조했다는 사람의 기록(앱은 확정하지 않음) |
| 앱 확인 | 앱이 묶음 값을 도면 표·수량·고정 항목과 대조한 결과(일치·주의·불일치·근거 없음·해당 없음) |
| 근거 보기 | 앱 확인 검사(C1~C9, C3b)의 결과와 비교 내용을 보는 화면 |
| C9 일관성 | 같은 양을 나타내는 params 값과 expected 값이 서로 같은지 보는 검사. 게이트를 돌리기 전에 "한쪽만 바뀌고 다른 쪽은 옛 값"을 찾는다. 같은 도면 읽기에서 나온 값이면 서로 같은 것이 당연하므로 독립 근거는 아니다 |
| C3b 필드 단위 원본 잔존 | 교각을 만들 때의 값 기록(origin_values.json)과 비교해, 바뀐 묶음 안에서 높이로 보이는 값 몇 개가 옛 값 그대로 남았는지 알려 주는 검사(주의) |
| 변수 등급 | V1 값 · V2 목록 · V3 생성(화면 편집 불가) · F 고정(바꾸면 사유 필요) |
| 템플릿 원본 그대로 | 템플릿을 복사한 뒤 한 번도 바뀌지 않은 묶음(새 도면 근거가 없는 상태) |
| 표 밖 치수 | 표 3종에 없는 치수·EL. 같은 도면 틀이면 앵커로 후보를 찾음 |
| 앵커 | 원본 교각이 값을 읽은 도면 문자의 위치(레이어·좌표) 기록 |
| 후보 등급 A·B·C | A 여러 곳이 같게 읽힘 · B 한 곳 또는 일부 · C 근거 약함 |
| 게이트 | 단계별 생성·검사 묶음 (G1~G5) |
| 승인 / 반려 | 게이트 결과에 대한 사람의 판정 |
| 계획 FAIL | 사용자 결정에 따라 미리 승인한 예외 FAIL |
| 음성 시험 | 객체를 일부러 옮겨 검사기가 FAIL을 잡는지 보는 검사기 점검 |
| 재로드 | 저장한 모델 파일을 다시 열어 검사하는 것 |
| 지문 | 객체별 위치·크기·속성 요약. 앞 단계 객체가 바뀌지 않았는지 비교할 때 사용 |
| 일괄 승인 | 미승인 게이트를 한 번에 실행·승인하는 기능 |
| 보호 템플릿 | 새 교각의 출발점으로 쓰는 고정 사본. 화면에서 고칠 수 없음 |