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:
commit
964a841de1
3978 files changed
+58013356
No files matched your search
Whitespace-only changes.
@@ -0,0 +1,331 @@
|
||||
# 교각 도면 모델링 앱 요구사항 검토서 — 운곡교 P1 실작업 기반
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-08 | 심영표 | 신규 작성 | 초안 — 기술 기반 선택(8장)은 의사결정 대기 |
|
||||
| v0.1.01 | 2026-10-08 | 심영표 | 담당자 검토 확정 | 확정 (8.2 권고안·9.3 결정 사항은 별도 의사결정 대기) |
|
||||
|
||||
---
|
||||
|
||||
## 1. 개요
|
||||
|
||||
### 1.1 목적
|
||||
교각 도면(DWG)을 입력하면 3D 모델(콘크리트·받침부·철근)과 도면 검토보고서를 만드는 앱을 개발하기 전에, 필요한 기능·입력·검토 기준·예외·기술 기반을 정리합니다.
|
||||
|
||||
### 1.2 근거 — 운곡교 P1 실작업
|
||||
본 검토서는 2026-10-07~08에 운곡교 교각(완도방향 P1)을 수작업 + 스크립트로 모델링한 경험을 요구사항으로 옮긴 것입니다.
|
||||
|
||||
| 항목 | 실작업 규모 | 근거 |
|
||||
| :--- | :--- | :--- |
|
||||
| 입력 | DWG 3매 (C0050205-025/026/027) | `RAG/` |
|
||||
| 모델 | 3,190객체 — 콘크리트 34, 받침 대좌·패드 20, 교량받침·솔플레이트 20, 철근 1,513본(관 + 중심선) | `Code/교각모델링/출력/실행_운곡교P1교각모델_2026-10-08_v0.1.09.3dm` |
|
||||
| 자동 검사 | 약 590항목 (콘크리트 172, 기둥 철근 43, 기초 74, 코핑 117, 받침부 184) | 검증 보고서 v0.1.05 |
|
||||
| 사람 결정 | 32건 (5장) | 작업 로그 `prompt/심영표/2026-10-07~08/` |
|
||||
| 도면 지적 | 22건 (오류·불일치 12, 누락 10) | 도면 검토보고서 v0.1.01 |
|
||||
| 스크립트 | 25종 (부록 B) | `Code/교각모델링/` |
|
||||
| 참고 앱 | 통로박스 모델링 웹앱(Drawing Model Studio) | 분석서 `DOC/02_분석/분석_통로박스모델링과정_2026-10-07_v0.1.00.md` |
|
||||
|
||||
### 1.3 범위
|
||||
- 입력: 교각 도면(DWG/DXF) + 사용자 결정 입력(5장)
|
||||
- 출력: 3D 모델(.3dm 또는 웹 뷰어 모델), 단계별 검토 결과, 도면 검토보고서(.md·.pdf)
|
||||
- 공정: 형상모델링 → 검토확인 → 기둥 철근 → 검토확인 → 확대기초 철근 → 검토확인 → 코핑 철근 → 검토확인 → 솔플레이트·받침 → 검토보고서
|
||||
- 근거가 교각 1세트(원형 단주, T형 코핑, 말뚝 기초)이므로 다른 형식(벽식, 다주식, 라멘 등)으로 넓히는 판단은 `[추론]`으로 표기합니다.
|
||||
|
||||
---
|
||||
|
||||
## 2. 전체 구성
|
||||
|
||||
### 2.1 공정 흐름
|
||||
공통 전처리 2단계와 지정 공정 10단계로 구성합니다. 각 "검토확인"은 **게이트**입니다. 통과하거나 사용자가 예외를 승인해야 다음 단계로 갑니다.
|
||||
|
||||
| # | 단계 | 주요 출력 | 게이트 |
|
||||
| :-- | :--- | :--- | :--- |
|
||||
| 0-1 | 도면 입력·변환 | DXF, 원본 해시 | 변환 엔티티 수, 원본 무결성 |
|
||||
| 0-2 | 도면 판독 | 뷰 분류, 치수·문자·점 집계, 재료표·상세표 추출 | 판독 결과 사용자 확인(추가 입력 5장) |
|
||||
| 1 | 형상모델링 | 기초·기둥·코핑·버림·말뚝, 받침 대좌·패드 | **G1** (4.2) |
|
||||
| 2 | 기둥 철근 | 주철근·띠철근·크로스타이 | **G2** |
|
||||
| 3 | 확대기초 철근 | 하·상면 망, 둘레근, 수직 결속근 | **G3** |
|
||||
| 4 | 코핑 철근 | 상·하면 주철근, 스터럽, 폐합근, 보조근, 교좌면 보강 | **G4** |
|
||||
| 5 | 솔플레이트·받침 | 교량받침, 솔플레이트 | **G5** |
|
||||
| 6 | 검토보고서 | 도면 오류·개선·추가·누락·재료표·상세 | 보고서 검사(장 구성·출처·버전) |
|
||||
|
||||
### 2.2 데이터 모델
|
||||
실작업에서 쓴 구조를 앱의 기본 데이터로 정합니다.
|
||||
|
||||
| 데이터 | 내용 | 실작업 대응 |
|
||||
| :--- | :--- | :--- |
|
||||
| 프로젝트 | 도면 묶음(파일명·SHA-256), 좌표계, 단위(mm, Z = EL×1000) | `conversion_audit.json` |
|
||||
| 판독 장부 | 뷰·엔티티 핸들·치수 사슬·표 행, 출처 | `판독/*.json` |
|
||||
| 파라미터(정본) | 부재·철근 그룹별 값과 **값마다 출처(src)**, 결정 기록 | `params.json` (lean_concrete … sole_plates) |
|
||||
| 객체 | ID, 역할, 호스트·정착 호스트, 마크·직경·형상, occurrence, 원길이, 출처 | 객체 속성(UserText) |
|
||||
| 결정 기록 | 결정 지점, 채택안, 기각안, 근거, 일시, 결정자 | 작업 로그 DECISIONS |
|
||||
| 검사 결과 | 항목·기대값·실측·허용오차·판정·파일 | `검증/*.json` |
|
||||
| 산출물 버전 | 모델·문서·파라미터의 판(vMAJOR.MINOR.PATCH)과 구판 보관 | `출력/backup/`, `DOC/*/backup/` |
|
||||
|
||||
### 2.3 사람 개입 지점
|
||||
- **판독 확인**: 표에서 읽은 값과 해석(상동 기호, 절반 작도 대칭 등)을 사용자가 확인
|
||||
- **결정 입력**: 도면만으로 정할 수 없는 항목(5장)을 입력. 입력하지 않으면 해당 단계를 진행하지 않음
|
||||
- **게이트 판정**: FAIL 항목을 예외(6장)로 승인하거나 수정을 요청
|
||||
- **보고서 확정**: '오류'·'불일치' 판정은 사람이 확정
|
||||
|
||||
---
|
||||
|
||||
## 3. 단계별 요구사항
|
||||
|
||||
### 3.1 도면 입력·판독
|
||||
| 구분 | 요구사항 | 실작업 근거·어려운 점 |
|
||||
| :--- | :--- | :--- |
|
||||
| 변환 | DWG→DXF 변환기 내장(ODA File Converter 또는 LibreDWG). 원본은 읽기 전용, 해시 기록 | 박스 앱은 LibreDWG만 허용했으나 실작업 PC에는 ODA만 있었음 |
|
||||
| 시트 영역 | 도면틀 안만 판독, 틀 밖 잔여물 제외 | D1 틀 밖에 교량 선형·사본 뷰가 흩어져 있었음 |
|
||||
| 뷰 분류 | 제목 문자(정면도·단면 A-A 등)와 축척으로 뷰 영역 자동 분류, 사용자 확인 | — |
|
||||
| 치수 | DIMENSION 엔티티와 **분해된 치수(선 + 문자)** 모두 지원. 치수 사슬(`100`, `200`, `70@125=8.750` …)을 위치 목록으로 변환. **양끝 눈금도 철근 위치로 포함**하는 규칙 | 실작업 도면은 DIMENSION 0건, 모든 치수가 분해됨. 양끝 포함 시 본수 일치(73 = 38+35) |
|
||||
| 축약 작도 | 파단선으로 줄인 부재(기둥)는 작도 길이 대신 치수 문자 사용. 파단선 위·아래 좌표계 분리 | 기둥 12,003이 6,100으로 작도됨 |
|
||||
| 절반 작도 | 정면도·평면도 절반 작도를 감지하고 대칭 환산. 비대칭 부위(선단 높이·소단)는 경고 | 코핑 좌측·거더선 1·2 미작도 |
|
||||
| 철근 점·선 | 단면의 철근 점(원 r 27)을 높이별로 전수 집계해 층·본수 판독 | 기초 6층 구성이 이 방법으로 확정됨 |
|
||||
| 재료표 | 마크·형상·직경·본수·a~e·각도·R·L·총연장·그룹 소계 추출. **상동(") 기호를 그룹 순서로 해석**, 빈칸 경고(B9 수량) | — |
|
||||
| 가공도 | 형상 번호(I~XVII)별 길이식 라이브러리 | 7.1 |
|
||||
| 문자 인코딩 | CP949·UTF-8 자동 판별 | — |
|
||||
|
||||
### 3.2 형상모델링
|
||||
| 요구사항 | 실작업 근거 |
|
||||
| :--- | :--- |
|
||||
| 객체 장부를 먼저 만든 뒤(역할·발생 수·사용 뷰·접합 객체) 형상 생성 | 박스 앱 원칙 |
|
||||
| 3뷰(평면·정면·단면)가 동시에 만족될 때만 폐합 솔리드 생성 | — |
|
||||
| 형상 유형: 직육면체, 원기둥, 정면 프로파일 압출(곡선 하면·경사 선단·소단 상면), 회전 사변형(대좌), 사각뿔대(패드), 쐐기(솔플레이트) | 코핑 하면 R 12,000 원호, 선단 200 경사, 5단 소단 |
|
||||
| 원호 중심은 끝점과 R로 계산(도면 정점 미사용) 후 도면 정점과 대조 | 계산값과 DXF가 0.1 mm 이내로 일치 |
|
||||
| 접합면 공유·겹침 0 검사, 의도된 겹침(말뚝 근입 100) 예외 등록 | — |
|
||||
| 받침 대좌 높이 = 코핑 상면 + h1, 패드 상단 = EL.'X' (= 코핑 상면 + h1 + h2) | E 열(h1~h4 합)로 해석하면 211 mm 틀림 — 표 정의 해석이 핵심 |
|
||||
|
||||
### 3.3 기둥 철근
|
||||
| 요구사항 | 실작업 근거 |
|
||||
| :--- | :--- |
|
||||
| 주철근: 원주 n등분(Div.46), 반경방향 다발(2본), 시작각 0°, 마크별 반지름 | P1 870.5 / P2 825.5 |
|
||||
| 주철근 상·하단: 재료표 길이에서 역산(갈고리 수평부 높이 + R + a), 작도선과 비교 | 작도 P2가 기둥 상단에서 끝나 2.65 m 차이 |
|
||||
| 띠철근: 치수 사슬 구간별 간격·본수, 구간별 마크(P4/P5/P3), 반지름 R | @100 표기 vs @120 사슬 충돌 |
|
||||
| 형상: 반원 2 + 갈고리(VI), 반원 + 커플러(V), 링 + 커플러(IX), 이음 위치 엇갈림 | 커플러 길이가 재료표 L에 포함 |
|
||||
| 크로스타이: 단마다 방향 수, 띠철근 위 얹힘 | 4본 교차 — 간섭 예외 |
|
||||
| 관 솔리드 생성은 형상별 단건 시험 후 일괄 | `fitRail=True`에서 Rhino 크래시 |
|
||||
|
||||
### 3.4 확대기초 철근
|
||||
| 요구사항 | 실작업 근거 |
|
||||
| :--- | :--- |
|
||||
| 층 구성 자동 판독(하면 4층 Y·X·Y·X, 상면 2층, 중앙, 둘레, 수직 결속) | 단면 점 높이 집계 |
|
||||
| 교대 배치(U자 + 직선, 양끝 U자) 규칙 | B2/B4 38+35, B6/B8 32+29 |
|
||||
| 체크무늬 등 2차원 배치 패턴 | B9 34×29 격자의 절반 = 493 |
|
||||
| 층 높이 기준 선택(작도 점 / 치수선 + 직경 적층) — 입력 사항 | 작도 점 채택 시 상면 피복 58.5 |
|
||||
| 수량 빈칸 시 총연장 ÷ L 역산과 경고 | B9 |
|
||||
|
||||
### 3.5 코핑 철근
|
||||
| 요구사항 | 실작업 근거 |
|
||||
| :--- | :--- |
|
||||
| 변단면 대응: 하면 곡선(오프셋 동심원)·선단 경사·소단 상면에 따른 철근 길이·높이 | 스터럽 높이, 폐합근 길이가 위치마다 다름 |
|
||||
| 재료표 변길이 `~` 해석: 범위 양끝 대조 + L = (최대 + 최소)/2 관례 | 평균으로 해석하면 350~400 mm 불일치 |
|
||||
| 재료표 치수와 작도 중심선의 오프셋 자동 추정(실작업 54.3 mm) | C9~C13 범위 양끝 모두 일치 |
|
||||
| 꺾인 다리(VIII, 98°·96°) = 선단면 평행, 하면근(VII) = 원호 + 다리 | C1 다리 끝과 C7 원호 끝이 만남 |
|
||||
| 다중 폐합 스터럽(1개 위치에 3개, 겹침 배치), 스터럽 안쪽 수평 폐합근 | 단면 A-A 다리 위치·27 mm 안쪽 점 |
|
||||
| 받침 대좌 회전 좌표계의 교좌면 보강(S1·S2) | 대좌 4.405° |
|
||||
| 갈고리 방향 추정 시 콘크리트 내부 검사로 검증 | C14 아래 갈고리가 하면 관통 |
|
||||
|
||||
### 3.6 솔플레이트·받침
|
||||
| 요구사항 | 실작업 근거 |
|
||||
| :--- | :--- |
|
||||
| 받침 표(ELEVATION TABLE)·솔플레이트 표(S, L, W, T, T1, T2) 연동 | L = A+100, W = B+100 |
|
||||
| 교축방향 = h2 패드 방향(긴 변이 아님) | NO.3는 W > L |
|
||||
| 경사 방향 입력, 표의 T1·T2와 S의 반올림 차 기록 | 37.6/22.4 vs 38/22 |
|
||||
|
||||
### 3.7 검토보고서
|
||||
| 요구사항 | 실작업 근거 |
|
||||
| :--- | :--- |
|
||||
| 단계 진행 중 발견 사항을 자동 수집(충돌·누락·추정·예외) → 보고서 초안 | 미해결 목록 16건 → 지적 22건 |
|
||||
| 장 구성: 개요, 오류·불일치, 개선방안, 추가 사항, 누락, 철근재료표(원본 vs 모델), 철근상세 | 보고서 v0.1.01 |
|
||||
| 재료표 집계: 그룹 소계 검산, 단위중량 × 총연장, 모델 본수 대조 | `compile_rebar_schedule.py` |
|
||||
| 판정 어휘 고정(오류·불일치·누락·확인 필요), 지적마다 도면·뷰·값 출처 | `check_report.py` |
|
||||
| .md 정본 + .pdf 변환(한글 글꼴, 표 열 폭, 특수기호 글리프 점검) | 맑은 고딕에 U+2212 글리프 없음 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 검토확인(게이트) 요구사항
|
||||
|
||||
### 4.1 공통 원칙
|
||||
- 기대값은 **생성 입력(파라미터)이 아니라 도면 치수·표 값에서 따로** 가져온다(독립 기대값)
|
||||
- 판정마다 기대값·실측·허용오차·모집단을 기록하고, 결과 파일을 보관한다
|
||||
- **음성 대조**: 검사기 자체를 확인하기 위해 객체를 일부러 옮겨(수평 위치·절대 높이 각각) FAIL이 나오는지 매 단계 확인한다
|
||||
- **재로드 검증**: 저장 파일을 새로 열어 같은 검사를 반복한다
|
||||
- 숨김·잠금 객체를 포함해 센다
|
||||
- 앞 단계 객체의 지문(바운딩·체적 또는 면 수·길이)이 바뀌지 않았는지 확인한다
|
||||
|
||||
### 4.2 단계별 검사표
|
||||
| 게이트 | 주요 검사 | 허용오차 | 실작업 항목 수 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| G1 형상 | 치수·표고, 폐합, 접합면·겹침, 단면 재투영(원호 R), 체적 산식, 대좌·패드 높이·크기·회전 | ±1 mm, 체적 0.1 % | 172 |
|
||||
| G2 기둥 철근 | 마크별 본수, 원길이 = L(커플러 포함), 반지름·각도(±0.01°), 띠철근 단 높이, 콘크리트 내부·피복 | ±1 mm | 43 |
|
||||
| G3 기초 철근 | 본수, 원길이, 층 높이, 치수 사슬 위치, 교대 패턴, 체크무늬, 내부·피복 | ±1 mm | 74 |
|
||||
| G4 코핑 철근 | 본수, 원길이, 변길이 범위 양끝, L 관례 재현, 단·교대·스터럽 위치, 내부·피복 | ±1 mm | 117 |
|
||||
| G5 받침부 | 높이(EL.'X'·h3), 크기, 경사(±0.01 %), 회전(±0.01°), 평면 중심, 겹침, 색 | ±1 mm | 184 |
|
||||
| 공통 | 철근 색(직경별), 기존 객체 지문, 원본 DWG 해시 | 0 | — |
|
||||
|
||||
### 4.3 실작업에서 발견된 검사기 결함 (앱 검사 설계 시 반영)
|
||||
| 결함 | 원인 | 대책 |
|
||||
| :--- | :--- | :--- |
|
||||
| 수평 이동을 못 잡음 | 높이·크기만 검사 | 수평 위치·절대 높이 검사를 모두 포함하고, 음성 대조로 확인 |
|
||||
| 피복이 음수로 나옴 | 부재 간 내부 접합면까지 거리를 잼 | 콘크리트 합집합 외곽면 기준 |
|
||||
| 객체를 '없음'으로 판정 | 기본 객체 목록이 숨긴 객체를 제외 | 숨김·잠금 포함 열거 |
|
||||
| 비대칭 철근 위치 오판 | 곡선 매개변수 중간점 사용 | 바운딩·형상 특징점 사용 |
|
||||
| 갈고리 끝을 높이로 잡음 | 바운딩 최고점 | 수평부 중간점 |
|
||||
| 교축방향 오판 | 긴 변 = 교축 가정 | 방향(축과의 각도)으로 판별 |
|
||||
| 길이 FAIL 오판 | 재료표 L에 커플러·겹침 포함 여부 불일치 | 형상별 L 정의를 라이브러리화 |
|
||||
|
||||
### 4.4 자기검증 한계
|
||||
생성과 검증을 같은 주체가 하면 독립 검증이 아닙니다. 앱에서는 ① 기대값 출처 분리 ② 음성 대조 ③ 재로드에 더해, 최종 단계에서 **사람의 육안 확인(뷰어 체크리스트)**을 게이트에 넣어야 합니다. 실작업에서는 헤드리스 3D 캡처가 실패해 육안 확인이 끝까지 미완이었습니다(미해결 #3).
|
||||
|
||||
---
|
||||
|
||||
## 5. 추가 입력 사항
|
||||
|
||||
### 5.1 사용자 결정 입력 (실작업 32건을 유형화)
|
||||
| 유형 | 입력 항목 | 실작업 사례 | 기본값 제안 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 범위 | 모델링 범위(콘크리트만/철근 포함), 말뚝·대좌·패드·조립용 철근(UA1)·교좌면 보강 포함 여부 | 말뚝 포함, 대좌 처음엔 제외 후 추가, UA1 제외, S1·S2 포함 | 도면에 형상 근거가 있는 것은 포함 |
|
||||
| 표현 | 철근 표현(중심선/관), 커플러·겹침 이음 표현, 색상 규칙 | 관 + 중심선, 커플러는 틈, 직경별 5색 | 관 + 중심선, 이음은 길이만 반영 |
|
||||
| 충돌 해소 | 도면 값 A/B 중 채택(표기 vs 치수 사슬, 작도 vs 재료표, 치수 vs 작도 점) | 띠철근 @120, 주철근 상단 재료표, 반지름 작도, B12 작도 28, 스터럽 폭 작도, 대좌 높이 표 | 치수 사슬 > 작도. 재료표 수량은 작도로 위치 확인 |
|
||||
| 추정 확인 | 미작도 부위 대칭·평행 이동, 갈고리 방향, 층 순서, 교대 시작, 경사 방향 | 거더선 1·2, C14 갈고리, S1 위층, ①CYCLE부터, 솔플레이트 −Y | 추정값 제시 + `[추론]` 표시 |
|
||||
| 기준 | 피복 판정 방식, 층 높이 기준, 높이 기준면(EL.'X') | 작도 위치 ±1 mm, 작도 점 높이 | 작도 위치 기준 |
|
||||
| 보고 | 보고서 독자, 산출 형식(PDF 위치) | 설계사·발주처, PDF는 출력 폴더 | — |
|
||||
| 표시 상태 | 콘크리트 숨김 등 저장 시 표시 상태 | P1-FT·P1-CP 숨김 유지 | 모두 표시 |
|
||||
|
||||
### 5.2 외부 자료 입력
|
||||
| 항목 | 필요 이유 |
|
||||
| :--- | :--- |
|
||||
| 교량 선형·측점, 교각 중심 측량좌표 | 도면에 없음 → 모델이 로컬 원점(0, 0)에 머묾 (미해결 #4) |
|
||||
| 설계기준(피복·정착·굽힘 반지름) | 도면 미표기 부위 기본값. 실작업은 박스 앱 기준(D16 이하 2d, D19 이상 3.5d) 사용 |
|
||||
| 표준 상세(받침·솔플레이트·커플러) | 커플러 형상 미표현 |
|
||||
| 디자인 지침(색·서체) | 조직 지침 없음 → 수용 기준으로 대체 |
|
||||
|
||||
### 5.3 입력 UI 요구사항
|
||||
- 결정 항목마다 도면 근거(값 A·B와 위치 이미지)와 기본값·영향을 함께 보여 주고 선택하게 한다
|
||||
- 결정은 파라미터 파일에 기록하고(결정자·일시·근거), 이후 단계와 보고서가 자동으로 참조한다
|
||||
- 결정을 바꾸면 영향받는 단계만 다시 생성·검사한다
|
||||
|
||||
---
|
||||
|
||||
## 6. 검토 예외 사항
|
||||
|
||||
### 6.1 예정된 FAIL (사용자 결정에 따른 불일치)
|
||||
| 예외 | 실작업 사례 | 처리 |
|
||||
| :--- | :--- | :--- |
|
||||
| 재료표 본수와 작도 본수 불일치를 작도로 채택 | B12 28/34 | FAIL로 기록, 보고서 '불일치' 자동 등재, 게이트는 예외 승인으로 통과 |
|
||||
| 재료표 치수 대신 작도 폭 채택 | C9~C13 원길이 | 위와 같음, 변하는 치수(범위)는 별도 PASS 검사 |
|
||||
|
||||
### 6.2 기록 전용 항목 (판정하지 않고 값만 남김)
|
||||
| 항목 | 실작업 사례 |
|
||||
| :--- | :--- |
|
||||
| 표 반올림 차 | 솔플레이트 T1/T2 ±0.4, 받침 패드 상단 −1 mm |
|
||||
| 굽힘 반영 곡선길이와 원길이 차 | P3 −493 mm 등 |
|
||||
| 피복 실측값(기준 미달 포함) | 기초 B5 58.5, S1 40.5(중심 기준 표기) |
|
||||
| 굽힘 반지름 최소값 미달 | B9 상단 갈고리 R 20.4 < 24 |
|
||||
|
||||
### 6.3 검사 대상 외 (현 단계 범위 밖)
|
||||
- 철근 간 간섭 정량 검사(교차 위치 목록만 기록) — 크로스타이 교차, 다리 겹침, 스터럽과 하면근 동일 높이 등
|
||||
- 시공성(조립 순서, 이음 위치 적정성)
|
||||
- 구조 계산 적합성
|
||||
|
||||
### 6.4 예외 승인 절차
|
||||
1. 게이트가 FAIL 목록과 함께 예외 후보(6.1~6.3 유형)를 표시
|
||||
2. 사용자가 항목별로 예외 승인 또는 수정 요청
|
||||
3. 승인 내역(사유·결정자·일시)을 결정 기록과 보고서에 자동 반영
|
||||
4. 예외 없이 남은 FAIL이 있으면 다음 단계 진행 불가
|
||||
|
||||
---
|
||||
|
||||
## 7. 비기능 요구사항
|
||||
|
||||
| 구분 | 요구사항 | 실작업 근거 |
|
||||
| :--- | :--- | :--- |
|
||||
| 변환 | ODA/LibreDWG 선택, 변환 실패 시 DXF 직접 입력 | — |
|
||||
| 3D 커널 | B-rep 불리언(차집합·합집합·교집합), 관(pipe) 생성, 체적 계산 | 버림-말뚝 차집합, 피복 판정용 합집합 |
|
||||
| 안정성 | 대량 생성 전 형상별 단건 시험, 작업 단위 분할, 장애 시 이어서 실행 | `fitRail=True` 크래시, 세션 종료 2회, 호출 300초 제한 |
|
||||
| 성능 | 철근 1,500본 규모 생성·검사가 단계당 수 분 이내 | 철근 관 1,000개 체적 계산 300초 초과 |
|
||||
| 파일 | 모델 50~70 MB(철근 포함) 처리, 경량 뷰어용 메시 별도 | v0.1.07 72 MB |
|
||||
| 재현성 | 파라미터 → 모델 재생성이 결정적(같은 입력 = 같은 결과), 스크립트·버전 보관 | 지문 비교 0.000 |
|
||||
| 버전·감사 | 판 올리기(구판 보관), 변경 이력, 결정·검사 로그 | 모델 v0.1.00~v0.1.09 |
|
||||
| 문서 오염 방지 | 파일 열기 직후 객체 수 확인, 실패 시 새 세션 | 숨김 객체가 남아 3,172객체로 오염 |
|
||||
| 보안 | 원본 도면 외부 전송 시 승인, 인증 정보 비저장 | 박스 앱 정책 |
|
||||
|
||||
---
|
||||
|
||||
## 8. 기술 기반 비교·권고
|
||||
|
||||
### 8.1 후보 비교
|
||||
| 기준 | ① 박스 웹앱 확장 | ② Rhino 플러그인·스크립트 | ③ 신규 웹앱 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 재사용 | 판독(DXF 파서·치수 사슬·시트 분할), 객체 장부, 캐시·JSON, 보고서·PDF, 뷰어 | 이번 실작업 스크립트 25종 그대로 | 낮음 |
|
||||
| 3D 품질 | JS 메시 커널 — 관·불리언·피복 판정 정밀도 제한 `[추론]` | B-rep 정밀, 불리언·관 생성 검증됨 | 커널 선택에 따름 |
|
||||
| 산출물 | 웹 뷰어 + OBJ·JSON | .3dm(BIM 연계 용이) | 선택 |
|
||||
| 배포 | 서버 1곳, 브라우저 접속 | 사용자별 Rhino 라이선스 필요, 헤드리스 불안정 | 서버 |
|
||||
| 검증 자동화 | 기존 회귀검사 체계 있음 | 실작업 검사 스크립트 있음 | 신규 |
|
||||
| 개발 비용 | 중 | 낮음(초기) / 운영 부담 | 높음 |
|
||||
|
||||
### 8.2 권고안 — 혼합 구조 `[추론, 의사결정 필요]`
|
||||
- **판독·규칙·검사 엔진**은 3D 커널과 무관한 Python 라이브러리로 분리합니다. 실작업 스크립트의 extract·verify 계열을 정리하고, 박스 앱 판독 모듈과 통합합니다.
|
||||
- **형상 생성**은 B-rep 커널에서 수행합니다. 서버형은 Rhino.Compute, 데스크톱은 Rhino 플러그인입니다. 웹 뷰어는 박스 앱 뷰어를 재사용합니다.
|
||||
- **사용자 입력(5장)·게이트(4장)·예외 승인(6장)**은 웹 UI에서 처리합니다.
|
||||
- 이유는 두 가지입니다. 실작업에서 정밀 B-rep 연산(불리언·관·체적)이 검사의 핵심이었고, 박스 앱의 판독·UI 자산은 교각에도 재사용 가치가 큽니다.
|
||||
|
||||
### 8.3 단계적 로드맵 `[추론]`
|
||||
| 단계 | 내용 | 완료 기준 |
|
||||
| :--- | :--- | :--- |
|
||||
| P0 | 실작업 스크립트 25종을 라이브러리로 재구성, 운곡교 P1 회귀 테스트 고정 | 같은 입력으로 v0.1.09와 지문 일치 |
|
||||
| P1 | CLI 파이프라인(단계·게이트·결정 파일), 보고서 자동 생성 | 5개 게이트 + 보고서 무인 실행 |
|
||||
| P2 | 웹 UI(판독 확인, 결정 입력, 예외 승인, 뷰어 육안 확인) | 사용자 1명이 처음부터 끝까지 수행 |
|
||||
| P3 | 다른 교각 도면 2~3세트로 범용화(형식별 규칙 추가) | 신규 도면에서 규칙 수정 없이 게이트 통과율 측정 |
|
||||
|
||||
---
|
||||
|
||||
## 9. 리스크·미해결
|
||||
|
||||
### 9.1 기술 리스크
|
||||
| 리스크 | 영향 | 대응 |
|
||||
| :--- | :--- | :--- |
|
||||
| 근거 도면이 1세트 | 규칙의 과적합(예: 오프셋 54.3, 층 구성) | P3에서 복수 도면 검증. 고정 상수 금지, 도면에서 매번 추정 |
|
||||
| 3D 커널 불안정 | 대량 생성 중 크래시 | 단건 시험·분할 실행·재시작 |
|
||||
| 시각 확인 자동화 실패 | 형상 오류 누락 | 뷰어 육안 체크리스트를 게이트에 포함 |
|
||||
|
||||
### 9.2 도면 품질 리스크
|
||||
실작업 도면에서 지적 22건이 나왔습니다(도면 검토보고서 v0.1.01). 범용 앱은 다음과 같은 도면 편차를 **정상 입력**으로 다뤄야 합니다.
|
||||
- 분해된 치수
|
||||
- 절반 작도
|
||||
- 표기와 치수 사슬의 충돌
|
||||
- 재료표 빈칸·상동 기호
|
||||
- 작도와 재료표의 수량·폭 불일치
|
||||
- 표 정의(EL.'X')의 생략
|
||||
|
||||
### 9.3 결정 필요 사항
|
||||
1. 기술 기반(8.2 권고안 채택 여부)
|
||||
2. 1차 대상 교각 형식 범위(원형 단주 T형 코핑만 / 확장)
|
||||
3. 산출 모델 형식(.3dm, IFC 연계 여부)
|
||||
4. 측량좌표·선형 자료의 입력 방식
|
||||
|
||||
---
|
||||
|
||||
## 부록
|
||||
|
||||
### A. 근거 파일
|
||||
| 구분 | 경로 |
|
||||
| :--- | :--- |
|
||||
| 박스 앱 분석 | `DOC/02_분석/분석_통로박스모델링과정_2026-10-07_v0.1.00.md` |
|
||||
| 판독서 | `DOC/02_분석/분석_운곡교P1교각도면판독_2026-10-07_v0.1.01.md`, `DOC/02_분석/분석_운곡교P1코핑철근판독_2026-10-07_v0.1.02.md` |
|
||||
| 설계서 | `DOC/03_설계/설계_운곡교P1교각모델링_2026-10-08_v0.1.10.md` |
|
||||
| 검증 보고서 | `DOC/05_검증/검증_운곡교P1교각모델_2026-10-08_v0.1.05.md` |
|
||||
| 도면 검토보고서 | `DOC/06_보고서/보고서_운곡교P1교각도면검토_2026-10-08_v0.1.01.md` |
|
||||
| 미해결 목록·기술노트 | `context-migration/OPEN_미해결목록.md`, `context-migration/기술노트_DWG판독_Rhino모델링환경.md` |
|
||||
| 작업 로그 | `prompt/심영표/2026-10-07/`, `prompt/심영표/2026-10-08/` |
|
||||
|
||||
### B. 실작업 스크립트 → 앱 모듈 대응
|
||||
| 앱 모듈 | 실작업 스크립트 (`Code/교각모델링/`) |
|
||||
| :--- | :--- |
|
||||
| 입력·변환 | `convert_dwg.py` |
|
||||
| 판독 | `survey_dxf.py`, `render_region.py`, `extract_outline.py`, `calc_bearing_seat.py`, `extract_bearing_seats.py`, `extract_column_rebar.py`, `extract_footing_rebar.py`, `extract_coping_rebar.py`, `extract_sole_plates.py` |
|
||||
| 생성 | `build_rhino.py`, `build_rebar_rhino.py`, `build_footing_rebar_rhino.py`, `build_coping_rebar_rhino.py`, `build_bearing_plates_rhino.py`, `apply_rebar_colors.py` |
|
||||
| 검사(게이트) | `verify_rhino.py`, `verify_rebar.py`, `verify_footing_rebar.py`, `verify_coping_rebar.py`, `verify_bearing_plates.py`, `check_outputs.py` |
|
||||
| 보고서 | `compile_rebar_schedule.py`, `check_report.py`, `md_to_pdf.py` |
|
||||
| 데이터 | `params.json`, `판독/*.json`, `검증/*.json` |
|
||||
@@ -0,0 +1,280 @@
|
||||
# 교각 모델링 앱 개선 기획서 — 「2. 입력 묶음 확인·확정」 개편
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-14 | 심영표 | 신규 작성 | 초안 `[미확정]` — D1·D2는 사용자 결정 반영, D3~D6은 결정 대기(7장) |
|
||||
|
||||
> 상태: **초안 `[미확정]`**. 코드는 고치지 않았고, 이 문서는 계획만 담습니다. 수치는 2026-10-14 현재 앱(`Code/교각모델링앱/`)과 보호 템플릿 4종을 직접 센 값입니다. `[추론]`은 확인이 필요한 판단입니다.
|
||||
|
||||
---
|
||||
|
||||
## 1. 개요
|
||||
|
||||
### 1.1 목적
|
||||
|
||||
앱 교각 화면의 「2. 입력 묶음 확인·확정」을 다음 네 가지가 되도록 고칩니다.
|
||||
|
||||
1. 도면 **표 밖 치수**(표 3종에 없는 치수·EL·위치)를 앱이 찾아 후보로 제시합니다.
|
||||
2. 묶음별 **확인**(도면 대조)을 앱이 수행하고 근거를 보여 줍니다. **확정**은 사람이 합니다(결정 D1).
|
||||
3. 같은 템플릿 안에서 **바꿔도 되는 값과 바꾸면 안 되는 값**을 구분해 화면에 표시합니다.
|
||||
4. 지금의 문제점과 해결방법을 정리해 개발 순서를 정합니다.
|
||||
|
||||
### 1.2 범위
|
||||
|
||||
| 포함 | 제외 |
|
||||
| :--- | :--- |
|
||||
| 교각 화면 2절(묶음 표·일괄 확정)과 [표 후보값]·[도면 문자 검색] 화면 | 3절 게이트 실행·승인 흐름(그대로) |
|
||||
| 값 확인 엔진(`engine/`)에 검사·탐색 추가, 확정 기록(`confirm.json`) 확장 | 새 교각 형식의 생성기·검사기(형식이 다르면 별도 Task) |
|
||||
| 보호 템플릿의 묶음 분류 메타 | 구조계산·간섭 검사·측량좌표(기존 한계 그대로) |
|
||||
|
||||
### 1.3 용어
|
||||
|
||||
| 용어 | 뜻 |
|
||||
| :--- | :--- |
|
||||
| 묶음 | `params.json`·`expected.json`의 최상위 항목 하나(예: `footing`, `G4`) |
|
||||
| 확인 | 묶음 값을 도면 원자료와 대조하는 일. 이 기획에서는 **앱이 수행** |
|
||||
| 확정 | "내가 이 값을 도면과 대조했다"는 **사람의 검토 기록**(해시로 값 변경 시 자동 무효) |
|
||||
| 표 밖 치수 | 받침 ELEVATION TABLE·솔플레이트 TABLE·철근재료표 3종에 없는 값. 정면·측면·평면·단면의 치수 문자와 작도선·철근 점에서 읽음 |
|
||||
| 앵커 | 원본 교각 판독에서 "이 값을 도면의 어디서(뷰·레이어·객체·상대 위치·문자 패턴) 읽었는가"를 적은 기록 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 현황
|
||||
|
||||
### 2.1 현재 화면과 동작
|
||||
|
||||
- 화면: 교각 화면 **「2. 입력 묶음 확인·확정」** = 묶음 표(파일·묶음·상태·확정자·확정 시각) + **[필요한 묶음 일괄 확정]** 버튼 (`web/templates/pier.html` 18~35행).
|
||||
- 동작: 사용자가 묶음을 열어 값을 도면과 **눈으로** 대조·수정하고 확정합니다. 일괄 확정은 미확정 필수 묶음에 확정자 이름·시각·해시를 **그대로 찍습니다**(`web/app.py` `confirm_all`: 값 검사 없음).
|
||||
- 값을 고치면 해시가 달라져 '변경됨 · 재확정 필요'가 되고 승인된 게이트도 '재실행 필요'가 됩니다(이 부분은 잘 동작).
|
||||
- 표 밖 치수: [도면 문자 검색](글자·정규식)과 [핸들 조회](객체 핸들의 좌표·길이·반지름)로 사람이 찾습니다. EL 문자는 목록만 보여 줍니다(`reader.el_list`). 값 자동 반영은 없습니다.
|
||||
- 표 3종은 자동 인식해 [표 후보값]에서 현재 값과 비교합니다(`reader.proposals`).
|
||||
|
||||
### 2.2 규모 (보호 템플릿 4종, 직접 집계)
|
||||
|
||||
| 템플릿 | 전체 묶음 | 참고(확정 불필요) | **확정 필요** | 확정 필요 묶음 합계 용량 | 철근 중심선 목록(손으로 못 고침)의 비중 |
|
||||
| :--- | --: | --: | --: | --: | --: |
|
||||
| 운곡교P1형 | 30 | 7 | 23 | 32 KB | 0 % (철근이 params 규칙 값) |
|
||||
| 산외교울산P1형 | 31 | 5 | 26 | 117 KB | 84 % (`coping_rebar` 98 KB) |
|
||||
| Ramp-A교P1형 | 30 | 5 | 25 | 135 KB | 89 % (`coping_rebar` 121 KB) |
|
||||
| 옥성교P1형 | 32 | 5 | 27 | 463 KB | 95 % (`coping_rebar` 301 KB + `footing_rebar` 142 KB) |
|
||||
|
||||
---
|
||||
|
||||
## 3. 문제점
|
||||
|
||||
| # | 문제 | 근거 | 영향 |
|
||||
| :-- | :--- | :--- | :--- |
|
||||
| P1 | **일괄 확정이 값을 검사하지 않음.** 확정 = 도장 | `confirm_all`은 `p.confirm()`만 호출. 화면 문구는 "값을 도면·판독서와 대조하셨습니까?" 한 줄 | 확정 기록의 신뢰가 사람의 성실에만 의존. 일괄 버튼이 쉬워 검토가 생략되기 쉬움 |
|
||||
| P2 | **템플릿 원본 값이 그대로 확정될 수 있음.** 복사 직후 값은 원본 교각의 값 | 사용설명서 5.1 주의문. 묶음 표에 '원본 값 그대로'라는 표시 없음 | 새 도면 대조 없이 확정·승인하면 **원본 교각 모델이 PASS**로 나옴(가장 위험한 실수) |
|
||||
| P3 | **근거가 안 보임.** 묶음마다 "이 값이 도면 어디서 왔는지"가 없음 | 묶음 표에 출처 열 없음. `_src` 메모는 '확정 불필요(참고)'로 숨음 | 사람이 매번 판독서·도면을 따로 열어 대조 |
|
||||
| P4 | **표 밖 치수는 전부 수작업.** 판독 스크립트를 교각마다 새로 씀 | 새 형식 1개당 판독·등록 스크립트 약 10개(`Code/옥성P1판독/` 등). 앱은 문자 검색·핸들 조회까지 | 확인 단계 병목. 오타·누락·잘못된 뷰 기준 위험 |
|
||||
| P5 | **손으로 대조할 수 없는 묶음.** 철근 중심선 목록이 용량의 84~95 % | 2.2절 | 사람이 '열어서 눈으로 확인'할 수 없으므로 확정이 형식적 |
|
||||
| P6 | **같은 템플릿에서 바꿔도 되는 값과 안 되는 값이 구분되지 않음.** 모두 같은 JSON 편집 화면 | 묶음 편집은 '형식(객체·목록·숫자) 유지'만 강제(`set_section`) | 형식을 정의하는 값(`form`, `builders`, 마크 구성)을 실수로 고쳐 생성기가 깨지거나, 값이 아닌 형식이 달라진 도면을 같은 템플릿으로 밀어 넣음 |
|
||||
| P7 | **params와 expected가 같은 후보에서 함께 채워짐.** | 사용설명서 5.3 주의문(두 줄 함께 반영 시 검사 무의미) | 검사의 독립성(독립 기대값 원칙)이 사용 습관에 의존 |
|
||||
| P8 | **확인 상태의 층이 하나.** '미확정 / 확정 / 변경됨' 3값뿐 | `store.section_state` | "앱이 확인했다", "도면에 근거 없음", "불일치 의심"을 표현할 방법이 없음 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 해결 방향
|
||||
|
||||
### 4.1 화면 개편 — 「2. 입력 묶음 확인·확정」
|
||||
|
||||
**원칙**: 앱이 확인하고 근거를 보이며, 사람은 근거를 보고 확정합니다(결정 D1). 앱은 **확정하지 않습니다**.
|
||||
|
||||
현행 표(파일·묶음·상태·확정자·확정 시각)를 아래 열로 바꿉니다.
|
||||
|
||||
| 열 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 묶음 | 파일·이름. 클릭하면 편집 화면 |
|
||||
| 변수 등급 | V1 / V2 / V3 / F (4.4절). 색과 글자 병기 |
|
||||
| 값 출처 | 표 / 표 밖 치수(도면 위치) / 판독 스크립트 / **템플릿 원본 그대로** / 사람 입력 |
|
||||
| **앱 확인** | 일치 / 주의 / 불일치 / 근거 없음 / 해당 없음(참고) + 근거 보기 |
|
||||
| 사람 확정 | 확정·미확정·변경됨, 확정자·시각 |
|
||||
|
||||
- 표 위에 한 줄 요약: "필요 27개 중 앱 확인 일치 19 · 주의 4 · 불일치 1 · 근거 없음 3 · 사람 확정 0".
|
||||
- **[일치 묶음 일괄 확정]**: 앱 확인이 '일치'인 묶음만 대상. 누르기 전 근거표를 한 번 열어야 활성화(D4 결정 대기). '주의·불일치·근거 없음'은 묶음마다 사유를 적어 개별 확정합니다.
|
||||
- '템플릿 원본 그대로'인 묶음(P2)은 앱 확인이 **'근거 없음(원본값)'**이며 일괄 확정에서 제외됩니다. 새 도면과 대조(표 후보값 반영·표 밖 치수 반영·사람 입력)해 값이 바뀌거나 근거가 붙어야 풀립니다. 새 도면 값이 우연히 원본과 같은 묶음은 '일치(원본과 동일, 근거 있음)'로 구분합니다.
|
||||
|
||||
### 4.2 도면 표 밖 치수 찾기 (결정 D2: 규칙 + 템플릿 앵커)
|
||||
|
||||
**탐색 규칙 6종** (4개 교각 도면에서 판독 스크립트가 쓴 방법을 앱 규칙으로 일반화합니다)
|
||||
|
||||
| 규칙 | 찾는 것 | 방법 | 이미 있는 것 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| R1 레벨 | 기초·기둥·코핑 EL | `EL.` 문자 + 인접 레벨선·치수선 연결 | `reader.el_list`(목록만) |
|
||||
| R2 치수 사슬 | `22@120=2.640`, `100 \| 2@100 \| 72@125=9.000` | 문자 패턴 → 치수 사슬로 파싱, 합계가 전체 치수와 맞는지 검산 | `store.chain`(입력용 파서만) |
|
||||
| R3 철근 점·선 | 철근 위치 목록 | 철근 레이어의 점 심볼·선의 좌표(뷰 기준) → 위치 목록, R2와 대조 | 없음(스크립트) |
|
||||
| R4 콘크리트 외곽 | 코핑 정면 외곽 점 목록 | 콘크리트 레이어 선 → 중심선(y = 0) 단면 점열 | 없음(스크립트) |
|
||||
| R5 뷰 기준 | 정면·측면·평면 각각의 기준점·좌표 변환(예: z = 도면 y − 309,179.8) | 뷰 제목 문자('정면도' 등)·축척·EL 문자로 기준 후보 | 없음(스크립트에 상수) |
|
||||
| R6 표 수량 대조 | 재료표 N과 작도 점·선 개수 | R3 결과 개수 = 재료표 수량이면 근거 강화(옥성교: 스터럽 106 = 39 + 27 + 40) | `reader.proposals` 일부 |
|
||||
|
||||
**앵커(템플릿 원본의 판독 위치 기억)**
|
||||
|
||||
- 앵커 한 줄 = `{값 경로, 뷰, 도면 레이어, 객체 종류, 기준 대비 상대 위치 또는 문자 패턴, 변환 규칙}`. 원본 교각의 판독 스크립트가 값을 읽을 때 같이 남기는 형식으로 정합니다(소급 추출 범위는 D6).
|
||||
- 새 도면에서 같은 레이어·뷰·상대 위치·문자 패턴을 따라가 **후보**를 만들고, 규칙 R1~R6의 검산 결과로 **신뢰 등급**을 붙입니다.
|
||||
|
||||
| 신뢰 등급 | 조건 | 화면 |
|
||||
| :--- | :--- | :--- |
|
||||
| A | 앵커 일치 + 검산(사슬 합계·재료표 수량) 일치 | 후보 + 근거, 반영 가능 |
|
||||
| B | 앵커 일치, 검산 없음 또는 일부 불일치 | 후보 + 주의 |
|
||||
| C | 규칙만 일치, 앵커 없음(형식이 다른 도면 등) | 후보 목록만, 반영 시 사유 필요 |
|
||||
| 없음 | 어떤 규칙도 일치하지 않음 | **'근거 없음'으로 표시, 억지 후보를 만들지 않음** |
|
||||
|
||||
- 출력 = [표 후보값]과 같은 비교 표에 '표 밖 치수' 구역을 추가: 현재 값 / 후보 / 도면 위치(D1·좌표·핸들) / 신뢰 등급 / [도면 보기](`dxftools.render`와 같은 확대 이미지). 선택해 반영하는 것은 사람입니다(자동 반영 없음).
|
||||
- **한계**: 규칙과 앵커는 4개 교각의 도면 틀(운곡교 P1·P2, 산외교 울산 P1, Ramp-A교 P1, 옥성교 P1)에서만 검증됩니다. 틀이 다르면 등급 C 또는 '없음'이 나오는 것이 **정상 동작**입니다.
|
||||
|
||||
### 4.3 입력 묶음 확인·확정을 앱이 수행하기 (결정 D1: 앱 확인 + 사람 확정)
|
||||
|
||||
**앱 확인 8종** (묶음마다 해당하는 것만 수행, 결과는 일치·주의·불일치·근거 없음·해당 없음)
|
||||
|
||||
| # | 확인 | 방법 | 막는 문제 |
|
||||
| :-- | :--- | :--- | :--- |
|
||||
| C1 | 출처 있음 | 값마다 표·표 밖 치수·스크립트·사람 입력 중 어디서 왔는지 기록 여부 | P3 |
|
||||
| C2 | 도면 재대조 | 표 후보값·표 밖 치수 후보와 현재 값 비교 | P4 |
|
||||
| C3 | 템플릿 원본 잔존 | 현재 값이 템플릿 원본과 같은데 새 도면 근거가 없는 항목 수 | **P2** |
|
||||
| C4 | 내부 정합 | 치수 사슬 합 = 전체 치수, 본수 = 재료표 N, 직경 = 재료표, 위치 목록 길이 = 사슬 개수 | P5 |
|
||||
| C5 | params ↔ expected 독립 | expected 값이 params에서 복사됐는지(두 값이 같고 근거도 같은 한 후보) | **P7** |
|
||||
| C6 | 범위·단위 | EL(m×1000)·mm 단위 상식 범위, 음수·0·순서 역전 | 오타 |
|
||||
| C7 | 변수 등급 위반 | F(고정) 항목이 템플릿 원본과 달라졌는지, V3(생성 변수)가 생성 스크립트 없이 손으로 고쳐졌는지 | **P6** |
|
||||
| C8 | 재생성 일치(V3) | 판독 스크립트로 재생성한 목록의 해시와 현재 해시 | P5 |
|
||||
|
||||
**상태와 기록 (기존 `confirm.json` 호환)**
|
||||
|
||||
```
|
||||
미확인 → 앱 확인(일치|주의|불일치|근거 없음) → 사람 확정(확정자·시각·근거 해시)
|
||||
↑ 값이 바뀌면 둘 다 자동 무효(기존 해시 방식 유지)
|
||||
```
|
||||
|
||||
- `confirm.json`의 확정 기록은 그대로 두고, 앱 확인은 `autocheck.json`(묶음 해시·결과·근거 목록·검사 버전·시각)에 별도로 둡니다. **앱 확인은 확정 기록을 만들지 않습니다.**
|
||||
- 게이트 실행 조건은 지금처럼 '필요 묶음이 사람 확정됨'입니다(변경 없음). 앱 확인은 조건이 아니라 **판단 자료**입니다.
|
||||
- 보고서 초안 8장(검증 방법)에 "앱 확인 결과 요약"을 추가해 사람 확정 근거가 남게 합니다.
|
||||
|
||||
**앱이 스스로 확정하지 않는 이유 (결정 D1 근거)**
|
||||
|
||||
1. 이 앱의 검증 구조는 **생성과 검사의 독립**에 기대고 있습니다. 앱이 값을 만들고(후보 반영) 같은 앱이 확정하면 검토자가 없어집니다.
|
||||
2. 앱 확인 '일치'는 "후보를 만든 규칙과 값이 같다"이지 "도면이 맞다"가 아닙니다(규칙이 틀린 도면에서 거짓 일치 가능).
|
||||
3. 확정은 책임 기록입니다. 앱이 근거를 모아 주면 사람의 확정이 **빨라지되 의미는 유지**됩니다.
|
||||
|
||||
### 4.4 같은 템플릿에서 변수 가능과 불가능 구분
|
||||
|
||||
**4단계 분류** (묶음마다, 필요하면 필드마다 표시)
|
||||
|
||||
| 등급 | 뜻 | 예 | 앱에서의 처리 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| **V1 값 변수** | 같은 형식에서 도면마다 달라지는 숫자·문자 값 | 기초·버림 크기, 기둥 지름·높이, 코핑 치수·EL, 말뚝 개수·간격·길이, 받침 표 값, 직경, fck | 화면 편집 가능, 앱 확인 대상 |
|
||||
| **V2 목록 변수** | 같은 형식에서 도면마다 달라지는 위치·점 목록 | 철근 위치 목록, 치수 사슬, 코핑 정면 외곽 점 | 치수 사슬 입력 가능, 앱 확인 대상(C4) |
|
||||
| **V3 생성 변수** | 값이 도면마다 다르지만 **판독 스크립트가 만든** 큰 목록 | `coping_rebar.bars`(98~301 KB), `footing_rebar.bars`(옥성) | 화면 직접 편집 **차단**, 판독 스크립트 재실행 안내, 재생성 일치(C8) |
|
||||
| **F 고정** | 형식을 정의하는 값. 바꾸면 같은 템플릿이 아님 | `scope`, `builders`, `checkers`, 각 묶음의 `form`·`shape`·`kind`, 철근 마크 체계, 게이트 검사기 이름 | 편집 시 **경고(D3: 차단 또는 경고)**, 바꾸면 '형식 변경 — 새 템플릿 필요' 표시 |
|
||||
|
||||
**같은 템플릿에서 바꿔도 되는가** (예시, `[추론]` 항목은 시험 후 확정)
|
||||
|
||||
| 변경 | 판정 | 이유 |
|
||||
| :--- | :--- | :--- |
|
||||
| 기초 크기·두께, 기둥 지름·높이, 말뚝 개수·간격·길이 | 가능(V1) | 생성기가 값으로 받음 |
|
||||
| 받침 표 값(EL.'X', h1~h3, A·B, S, L·T) | 가능(V1) | 표 후보값으로 이미 지원 |
|
||||
| 철근 간격·개수·직경(재료표) | 가능(V1·V2) | 치수 사슬 입력 |
|
||||
| 코핑 상면 단 수·받침 개수 변경 | 조건부 `[추론]` | 검사기 기대값·음성 시험 대상이 개수에 묶여 있음(OPEN #19 A7: 받침 10개 전제) |
|
||||
| 코핑 철근 중심선 목록 | 스크립트 필요(V3) | 사람이 좌표 수만 개를 고칠 수 없음 |
|
||||
| 하면 곡선 ↔ 직선 경사, 평면 사각 유무, 기초판 유무, 기둥 단면 형식 | **불가(F)** | 생성기·검사기가 다름 → 다른 템플릿 |
|
||||
| 철근 형상 종류(U형 → 폐합 등), 마크 체계 | **불가(F)** | 생성기·expected 스키마가 정함 |
|
||||
| 게이트 범위(`scope`)·생성기·검사기 이름 | **불가(F)** | 형식 정의 |
|
||||
|
||||
**새 도면이 이 템플릿으로 가능한지 판별하는 체크리스트** (교각 만들기 화면에 질문으로 제공, 예/아니오)
|
||||
1. 기초 형식(확대기초+말뚝 / 직접기초 / 기초판 없는 단일 말뚝)이 같은가
|
||||
2. 기둥 단면 형식(원형 / 기타)이 같은가
|
||||
3. 코핑 하면 형상(곡선 / 직선 경사 / 나팔형)과 평면 형식(직각 / 사각 / 볼록 끝면)이 같은가
|
||||
4. 받침 배치 구조(받침마다 대좌 / 앞뒤 공유 대좌)가 같은가
|
||||
5. 철근 형상 종류가 재료표 형식 열과 같은가
|
||||
6. 철근 생성 방식(규칙 값 / 철근별 중심선)이 같은가
|
||||
|
||||
하나라도 '아니오'면 "같은 템플릿으로 만들 수 없음 — 가장 가까운 템플릿 + 생성기·검사기 추가 필요"로 안내하고, 억지로 진행하면 묶음 표에 '형식 불일치 경고'를 상시 표시합니다.
|
||||
|
||||
**구현**: 보호 템플릿에 `variability.json`(묶음·필드 경로 → 등급)을 추가합니다. 편집 화면과 앱 확인 C7이 이 파일을 읽습니다. 4개 템플릿 분류는 부록 A.
|
||||
|
||||
---
|
||||
|
||||
## 5. 문제점과 해결방법
|
||||
|
||||
| 문제 | 해결방법 | 기대 효과 | 난이도 | 우선순위 |
|
||||
| :--- | :--- | :--- | :--: | :--: |
|
||||
| P1 일괄 확정이 검사 안 함 | 앱 확인(C1~C8) + '일치 묶음만 일괄 확정' + 근거표 열람 조건(D4) | 일괄 확정이 도장이 아닌 근거 기반 확정이 됨 | 중 | 1 |
|
||||
| P2 템플릿 원본값 확정 위험 | C3 '템플릿 원본 잔존' + 일괄 확정 제외 + 묶음 표에 '원본값' 표시 | 원본 모델이 PASS로 나오는 사고 방지 | **하** | **1** |
|
||||
| P3 근거가 안 보임 | 값 출처 열 + 근거 보기(도면 위치·표 행·스크립트·사슬 검산) | 판독서를 따로 열 필요 감소 | 중 | 2 |
|
||||
| P4 표 밖 치수 수작업 | 규칙 R1~R6 + 앵커 + 신뢰 등급 후보 표(결정 D2) | 새 도면 확인 시간 단축, 오타·누락 감소 | **상** | 3 |
|
||||
| P5 손으로 대조 불가 | V3 분류 + C4·C8(내부 정합·재생성 일치) + 편집 차단 | 확정이 '요약된 검산 결과'에 근거 | 중 | 2 |
|
||||
| P6 변수·고정 미구분 | 4단계 분류 + `variability.json` + 판별 체크리스트 + 형식 불일치 경고 | 형식이 다른 도면을 같은 템플릿에 밀어 넣는 실수 방지 | 중 | 2 |
|
||||
| P7 params·expected 동시 채움 | C5(독립성) + 후보 반영 화면에서 params 줄 별도 선택 안내 강화 | 검사 독립성 유지 | 하 | 2 |
|
||||
| P8 확인 상태 1층 | `autocheck.json` 별도 층(앱 확인), 확정 기록은 불변 | "앱이 확인", "근거 없음", "불일치 의심" 표현 가능 | 하 | 1 |
|
||||
|
||||
---
|
||||
|
||||
## 6. 구현 계획
|
||||
|
||||
| 단계 | 내용 | 주요 변경 | 시험·판정 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| **A 분류·표시** | `variability.json` 작성(4템플릿), 묶음 표에 변수 등급·값 출처 열, '템플릿 원본 그대로' 표시(C3) | `web/templates/pier.html`, `web/store.py`, `data/_템플릿/*/variability.json` | 4템플릿에서 분류 100 %, 새 교각(템플릿 복사 직후) 전 묶음이 '원본값' 표시 |
|
||||
| **B 앱 확인 엔진** | C1~C8 구현, `autocheck.json`, 근거표 화면, '일치 묶음 일괄 확정'(D4), 보고서 8장 요약 | `engine/verify.py`(신설), `web/app.py`, 템플릿, `engine/report.py` | 5개 교각 자기 데이터 전 묶음 '일치'(거짓 불일치 0), 값을 일부러 바꾸면 '불일치'(거짓 일치 0, 음성 시험), 기존 회귀 9종 FAIL 0 |
|
||||
| **C 표 밖 치수 탐색** | 규칙 R1~R6, 앵커 형식·추출 도구, 후보 표 구역, 도면 보기 | `engine/reader.py`, `engine/anchors.py`(신설), 판독 스크립트 앵커 기록 | 4개 도면에서 원본 params 값 재현율(등급 A·B 비율)·거짓 후보 0건 집계, 틀이 다른 도면에서 '없음' 정상 표시 |
|
||||
| **D 통합·문서** | 일괄 확정 문구·흐름, 사용설명서 개정(5.3·5.4·9장), 회귀 전체 | 사용설명서 v0.2.08, 시험 `tools/test_confirm_check.py` | 웹 E2E 포함 전체 회귀 PASS |
|
||||
|
||||
- 각 단계는 **정지·승인**(사용자) 후 진행합니다(HITL).
|
||||
- 확정·게이트 승인은 어느 단계에서도 앱이 대신하지 않습니다. 시험은 별도 시험 폴더에서만 확정 흐름을 실행합니다(실제 교각 데이터 보호: 웹 일괄 실행이 Ramp-A·울산·옥성 게이트 보고서를 '재로드 안 함' 상태로 덮어쓴 일이 있음, 원인(시험 또는 앱 사용) 미확인, OPEN #25).
|
||||
- 수용 기준(착수 전 확정): ① 모든 필수 묶음에 앱 확인 상태가 있다 ② '근거 없음'을 숨기지 않는다 ③ 거짓 일치 0·거짓 불일치 0(4개 도면 기준) ④ 앱이 확정 기록을 만들지 않는다 ⑤ 기존 시험 FAIL 0.
|
||||
|
||||
---
|
||||
|
||||
## 7. 리스크·결정 사항
|
||||
|
||||
### 7.1 리스크
|
||||
|
||||
| # | 리스크 | 대응 |
|
||||
| :-- | :--- | :--- |
|
||||
| R1 | 앱 확인 '일치'를 "도면이 맞다"로 오해 | 근거 보기에서 '무엇과 무엇이 같은가'를 문장으로 표시, 신뢰 등급 병기 |
|
||||
| R2 | 규칙·앵커가 4개 도면에 과적합 | 등급 C·'없음'을 정상으로 표시, 새 형식 도면마다 앵커 추가 |
|
||||
| R3 | 앵커 소급 추출 비용(원본 4교각) | D6 결정(신규부터 vs 소급) |
|
||||
| R4 | 앱 확인 규칙이 생성 스크립트와 같은 논리여서 순환 | 도면 원자료(DXF·문자 색인)를 직접 읽는 경로만 사용, 스크립트 재생성 일치(C8)는 '독립성 낮음'으로 표시 |
|
||||
| R5 | 일괄 확정이 다시 도장화 | 일치만 대상, 근거표 열람 조건, 주의·불일치는 사유 필수 |
|
||||
| R6 | 변수 등급 오분류 | `variability.json`은 템플릿 원본 교각 담당자가 확정, 분류 변경은 별도 Task |
|
||||
|
||||
### 7.2 결정 사항
|
||||
|
||||
| # | 내용 | 상태 | 권고 |
|
||||
| :-- | :--- | :--- | :--- |
|
||||
| D1 | 확정 주체 | **결정 2026-10-14 / 심영표: 앱 확인 + 사람 확정** | — |
|
||||
| D2 | 표 밖 치수 탐색 방식 | **결정 2026-10-14 / 심영표: 규칙 + 템플릿 앵커** | — |
|
||||
| D3 | F(고정) 항목 편집 시 처리 | **결정 대기** | 경고 + 사유 입력(차단은 생성기 개발자 모드에서만) |
|
||||
| D4 | 일괄 확정 조건 | **결정 대기** | '일치' 묶음만, 근거표를 한 번 열어야 활성화 |
|
||||
| D5 | 착수 범위·순서 | **결정 대기** | A → B 먼저(위험 큰 P1·P2 해소), C는 B 검증 뒤 |
|
||||
| D6 | 앵커 소급 추출 | **결정 대기** | 옥성교·Ramp-A(최근, 판독 스크립트 최신)부터, 나머지는 필요 시 |
|
||||
|
||||
---
|
||||
|
||||
## 부록 A. 보호 템플릿 묶음 분류 (등급 초안, 담당자 확정 전)
|
||||
|
||||
| 묶음 | 운곡교P1형 | 울산형 | Ramp-A형 | 옥성교형 |
|
||||
| :--- | :-: | :-: | :-: | :-: |
|
||||
| `pier_id` | F | F | F | F |
|
||||
| `scope`·`builders`·`checkers`·`negative` (실행 설정) | F (없음=기본) | F | F | F |
|
||||
| `lean_concrete`·`footing`·`column`·`materials` | V1 | V1 | V1(기초 없음) | V1 |
|
||||
| `piles` / `pile` | V1 | — | V1(`pile` 구간) | V1 |
|
||||
| `coping` | V1 + 점 목록 V2 (`form` F) | V1 + V2 (`form` F) | V1 + V2 (`form` F) | V1 + V2 (`form`·`skew_deg` 구조는 F) |
|
||||
| `bearing_seats`·`sole_plates` | V1 + 위치 V2 (대좌 구조 F) | V1 + V2 | V1 + V2 | V1 + V2 (대좌 공유 구조 F) |
|
||||
| `rebar_marks` | 직경 V1, 마크 체계 F | 동일 | 동일 | 동일 |
|
||||
| `column_rebar` | V1·V2 (`form` F) | V1·V2 | V1·V2 | V1·V2 |
|
||||
| `footing_rebar` | V1·V2 | V1·V2 | — (`shaft_rebar` V1·V2) | **V3** (중심선 목록) |
|
||||
| `coping_rebar` | V1·V2 (규칙 값) | **V3** | **V3** | **V3** |
|
||||
| `expected.G1~G5` | V1·V2 (**params와 독립 입력**) | 동일 | 동일 | 동일 |
|
||||
| `expected.planned_fail`·`rebar_palette` | 사람 결정 기록(교각별) | 동일 | 동일 | 동일 |
|
||||
| `display`·`_schema`·`_meta`·`*_src`·`hitl_decisions*` | F / 참고 | 동일 | 동일 | 동일 |
|
||||
|
||||
> 이 표는 묶음 수준의 초안입니다. 필드 수준 분류(`variability.json`)는 A단계에서 템플릿마다 작성하고 담당자가 확정합니다.
|
||||
|
||||
## 부록 B. 근거 파일
|
||||
|
||||
| 구분 | 경로 |
|
||||
| :--- | :--- |
|
||||
| 화면·동작 | `Code/교각모델링앱/web/templates/pier.html`, `web/app.py`(`confirm_all`, `unconfirmed`), `web/store.py`(`GATE_SECTIONS`, `section_state`, `confirm`, `set_section`) |
|
||||
| 표 판독·후보 | `engine/reader.py`(`table_candidates`, `field_candidates`, `proposals`, `el_list`, `entity_info`) |
|
||||
| 사용 방법 | `DOC/04_실행/실행_T형교각모델링앱사용설명서_2026-10-14_v0.2.07.md` §4~5, §9 |
|
||||
| 일반화 이력 | `context-migration/OPEN_미해결목록.md` #19·#23·#24·#25, `DOC/02_분석/분석_운곡교P2교각도면판독_2026-10-12_v0.1.00.md` §7 |
|
||||
| 표 밖 치수 판독 사례 | `Code/옥성P1판독/extract_g*.py`, `DOC/02_분석/분석_옥성교P1교각도면판독_2026-10-14_v0.1.07.md` |
|
||||
@@ -0,0 +1,680 @@
|
||||
# 교각 모델링 앱 개선 기획서 — 「2. 입력 묶음 확인·확정」 개편
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-14 | 심영표 | 신규 작성 | 초안 `[미확정]` — D1~D6 결정 반영(7.2절) |
|
||||
| v0.1.01 | 2026-10-15 | 심영표 | 7.2절 D3~D6을 권고안대로 결정 반영 | 사용자 지시 "권고안대로" |
|
||||
| v0.1.02 | 2026-10-15 | 심영표 | 4.4절 템플릿 구분 기준 재정의(각도=값, 기초=말뚝 유무, 도면 먼저 추천) | 사용자 결정 3건(OPEN #30 ①②④) |
|
||||
| v0.1.03 | 2026-10-16 | 심영표 | A단계(분류·표시) 구현 결과 6.1절 추가 | 사용자 "개편 구현 진행" 지시; B단계는 사용자 승인 후 |
|
||||
| v0.1.04 | 2026-10-16 | 심영표 | B단계(앱 확인 엔진·근거표·일치 묶음 일괄 확정) 구현 결과 6.2절 추가, Prism 적용 시점 결정 반영 | 사용자 "B단계 착수" + "Prism은 B단계 새 화면부터, 기존 화면 교체는 D단계" |
|
||||
| v0.1.05 | 2026-10-19 | 심영표 | 이전 방식 일괄 확정 제거 반영, C단계 1차(앵커 학습·따라가기, R1·R2·R5) 구현 결과 6.3절 추가 | 사용자 "이전방식 일괄 확정은 지금 제거하고, C단계 착수" |
|
||||
| v0.1.06 | 2026-10-19 | 심영표 | C단계 2차 결과 6.4절 추가(표 값 교차 확인, 운곡교 P3·P4 실사용 확인, R3·R4 기하 앵커 시험 결과 = 미채택) | 사용자 "C단계 2차 착수, 운곡교 P3·P4에 앵커를 불러와 실제 후보 확인" |
|
||||
| v0.1.07 | 2026-10-19 | 심영표 | D단계(전 화면 Prism 교체, 사용설명서 v0.2.12, 전체 회귀, 운곡교 P3·P4 A등급 반영) 결과 6.5절 추가 | 사용자 "D단계 착수, 운곡교 P3·P4 후보 반영" |
|
||||
| v0.1.08 | 2026-10-20 | 심영표 | 운곡교 P3·P4 실사용 결과와 앱 개선점 6.6절 추가(OPEN #34·#35) | 사용자 "앱의 개선점을 알려줘" → "진행해줘" |
|
||||
| v0.1.09 | 2026-10-20 | 심영표 | 개선 ②③④⑥ 구현 결과 6.7절 추가 | 사용자 "#34의 2·3·4·6번 순으로 진행" |
|
||||
| v0.1.10 | 2026-10-20 | 심영표 | 개선 ①⑤ 구현 결과 6.8절 추가 | 사용자 "①(읽기 도구 통합), ⑤(일괄 실행 중단 표시)를 진행해줘" |
|
||||
| v0.1.11 | 2026-10-20 | 심영표 | 검토 요약 확정(한 화면 검토 + 한 번 확정) 6.9절 추가 | 사용자 "확정 판정이 오래 걸리고 확인하기 어렵다 → 앱이 일괄 처리, 사용자는 일괄 검토" 제안 → 권고안 진행 |
|
||||
| v0.1.12 | 2026-10-20 | 심영표 | 6.9절에 후속 변경 추가(도면에서 읽기에 표 값 통합, 검토 요약 모두 체크·주의 표시) | 사용자 "템플릿 원본 그대로도 모두 도면에서 읽기로 바꾸고, 미확정도 일괄 확정" |
|
||||
| v0.1.13 | 2026-10-20 | 심영표 | 운곡교 P4 복구 결과와 앱 수정 계획 6.10절 추가 | 사용자 "앱을 수정계획을 정리해줘" (P4 결정 소실 사고 기반) |
|
||||
|
||||
| v0.1.14 | 2026-10-20 | 심영표 | W4(원본 잔존 검사 확대) 상세 계획 6.11절 추가, 실측 근거 스크립트 보관 | 사용자 "「원본 잔존 검사 확대」에 대한 계획을 세워줘" |
|
||||
|
||||
> 상태: **초안 `[미확정]`**. 코드는 고치지 않았고, 이 문서는 계획만 담습니다. 수치는 2026-10-14 현재 앱(`Code/교각모델링앱/`)과 보호 템플릿 4종을 직접 센 값입니다. `[추론]`은 확인이 필요한 판단입니다.
|
||||
|
||||
---
|
||||
|
||||
## 1. 개요
|
||||
|
||||
### 1.1 목적
|
||||
|
||||
앱 교각 화면의 「2. 입력 묶음 확인·확정」을 다음 네 가지가 되도록 고칩니다.
|
||||
|
||||
1. 도면 **표 밖 치수**(표 3종에 없는 치수·EL·위치)를 앱이 찾아 후보로 제시합니다.
|
||||
2. 묶음별 **확인**(도면 대조)을 앱이 수행하고 근거를 보여 줍니다. **확정**은 사람이 합니다(결정 D1).
|
||||
3. 같은 템플릿 안에서 **바꿔도 되는 값과 바꾸면 안 되는 값**을 구분해 화면에 표시합니다.
|
||||
4. 지금의 문제점과 해결방법을 정리해 개발 순서를 정합니다.
|
||||
|
||||
### 1.2 범위
|
||||
|
||||
| 포함 | 제외 |
|
||||
| :--- | :--- |
|
||||
| 교각 화면 2절(묶음 표·일괄 확정)과 [표 후보값]·[도면 문자 검색] 화면 | 3절 게이트 실행·승인 흐름(그대로) |
|
||||
| 값 확인 엔진(`engine/`)에 검사·탐색 추가, 확정 기록(`confirm.json`) 확장 | 새 교각 형식의 생성기·검사기(형식이 다르면 별도 Task) |
|
||||
| 보호 템플릿의 묶음 분류 메타 | 구조계산·간섭 검사·측량좌표(기존 한계 그대로) |
|
||||
|
||||
### 1.3 용어
|
||||
|
||||
| 용어 | 뜻 |
|
||||
| :--- | :--- |
|
||||
| 묶음 | `params.json`·`expected.json`의 최상위 항목 하나(예: `footing`, `G4`) |
|
||||
| 확인 | 묶음 값을 도면 원자료와 대조하는 일. 이 기획에서는 **앱이 수행** |
|
||||
| 확정 | "내가 이 값을 도면과 대조했다"는 **사람의 검토 기록**(해시로 값 변경 시 자동 무효) |
|
||||
| 표 밖 치수 | 받침 ELEVATION TABLE·솔플레이트 TABLE·철근재료표 3종에 없는 값. 정면·측면·평면·단면의 치수 문자와 작도선·철근 점에서 읽음 |
|
||||
| 앵커 | 원본 교각 판독에서 "이 값을 도면의 어디서(뷰·레이어·객체·상대 위치·문자 패턴) 읽었는가"를 적은 기록 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 현황
|
||||
|
||||
### 2.1 현재 화면과 동작
|
||||
|
||||
- 화면: 교각 화면 **「2. 입력 묶음 확인·확정」** = 묶음 표(파일·묶음·상태·확정자·확정 시각) + **[필요한 묶음 일괄 확정]** 버튼 (`web/templates/pier.html` 18~35행).
|
||||
- 동작: 사용자가 묶음을 열어 값을 도면과 **눈으로** 대조·수정하고 확정합니다. 일괄 확정은 미확정 필수 묶음에 확정자 이름·시각·해시를 **그대로 찍습니다**(`web/app.py` `confirm_all`: 값 검사 없음).
|
||||
- 값을 고치면 해시가 달라져 '변경됨 · 재확정 필요'가 되고 승인된 게이트도 '재실행 필요'가 됩니다(이 부분은 잘 동작).
|
||||
- 표 밖 치수: [도면 문자 검색](글자·정규식)과 [핸들 조회](객체 핸들의 좌표·길이·반지름)로 사람이 찾습니다. EL 문자는 목록만 보여 줍니다(`reader.el_list`). 값 자동 반영은 없습니다.
|
||||
- 표 3종은 자동 인식해 [표 후보값]에서 현재 값과 비교합니다(`reader.proposals`).
|
||||
|
||||
### 2.2 규모 (보호 템플릿 4종, 직접 집계)
|
||||
|
||||
| 템플릿 | 전체 묶음 | 참고(확정 불필요) | **확정 필요** | 확정 필요 묶음 합계 용량 | 철근 중심선 목록(손으로 못 고침)의 비중 |
|
||||
| :--- | --: | --: | --: | --: | --: |
|
||||
| 운곡교P1형 | 30 | 7 | 23 | 32 KB | 0 % (철근이 params 규칙 값) |
|
||||
| 산외교울산P1형 | 31 | 5 | 26 | 117 KB | 84 % (`coping_rebar` 98 KB) |
|
||||
| Ramp-A교P1형 | 30 | 5 | 25 | 135 KB | 89 % (`coping_rebar` 121 KB) |
|
||||
| 옥성교P1형 | 32 | 5 | 27 | 463 KB | 95 % (`coping_rebar` 301 KB + `footing_rebar` 142 KB) |
|
||||
|
||||
---
|
||||
|
||||
## 3. 문제점
|
||||
|
||||
| # | 문제 | 근거 | 영향 |
|
||||
| :-- | :--- | :--- | :--- |
|
||||
| P1 | **일괄 확정이 값을 검사하지 않음.** 확정 = 도장 | `confirm_all`은 `p.confirm()`만 호출. 화면 문구는 "값을 도면·판독서와 대조하셨습니까?" 한 줄 | 확정 기록의 신뢰가 사람의 성실에만 의존. 일괄 버튼이 쉬워 검토가 생략되기 쉬움 |
|
||||
| P2 | **템플릿 원본 값이 그대로 확정될 수 있음.** 복사 직후 값은 원본 교각의 값 | 사용설명서 5.1 주의문. 묶음 표에 '원본 값 그대로'라는 표시 없음 | 새 도면 대조 없이 확정·승인하면 **원본 교각 모델이 PASS**로 나옴(가장 위험한 실수) |
|
||||
| P3 | **근거가 안 보임.** 묶음마다 "이 값이 도면 어디서 왔는지"가 없음 | 묶음 표에 출처 열 없음. `_src` 메모는 '확정 불필요(참고)'로 숨음 | 사람이 매번 판독서·도면을 따로 열어 대조 |
|
||||
| P4 | **표 밖 치수는 전부 수작업.** 판독 스크립트를 교각마다 새로 씀 | 새 형식 1개당 판독·등록 스크립트 약 10개(`Code/옥성P1판독/` 등). 앱은 문자 검색·핸들 조회까지 | 확인 단계 병목. 오타·누락·잘못된 뷰 기준 위험 |
|
||||
| P5 | **손으로 대조할 수 없는 묶음.** 철근 중심선 목록이 용량의 84~95 % | 2.2절 | 사람이 '열어서 눈으로 확인'할 수 없으므로 확정이 형식적 |
|
||||
| P6 | **같은 템플릿에서 바꿔도 되는 값과 안 되는 값이 구분되지 않음.** 모두 같은 JSON 편집 화면 | 묶음 편집은 '형식(객체·목록·숫자) 유지'만 강제(`set_section`) | 형식을 정의하는 값(`form`, `builders`, 마크 구성)을 실수로 고쳐 생성기가 깨지거나, 값이 아닌 형식이 달라진 도면을 같은 템플릿으로 밀어 넣음 |
|
||||
| P7 | **params와 expected가 같은 후보에서 함께 채워짐.** | 사용설명서 5.3 주의문(두 줄 함께 반영 시 검사 무의미) | 검사의 독립성(독립 기대값 원칙)이 사용 습관에 의존 |
|
||||
| P8 | **확인 상태의 층이 하나.** '미확정 / 확정 / 변경됨' 3값뿐 | `store.section_state` | "앱이 확인했다", "도면에 근거 없음", "불일치 의심"을 표현할 방법이 없음 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 해결 방향
|
||||
|
||||
### 4.1 화면 개편 — 「2. 입력 묶음 확인·확정」
|
||||
|
||||
**원칙**: 앱이 확인하고 근거를 보이며, 사람은 근거를 보고 확정합니다(결정 D1). 앱은 **확정하지 않습니다**.
|
||||
|
||||
현행 표(파일·묶음·상태·확정자·확정 시각)를 아래 열로 바꿉니다.
|
||||
|
||||
| 열 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 묶음 | 파일·이름. 클릭하면 편집 화면 |
|
||||
| 변수 등급 | V1 / V2 / V3 / F (4.4절). 색과 글자 병기 |
|
||||
| 값 출처 | 표 / 표 밖 치수(도면 위치) / 판독 스크립트 / **템플릿 원본 그대로** / 사람 입력 |
|
||||
| **앱 확인** | 일치 / 주의 / 불일치 / 근거 없음 / 해당 없음(참고) + 근거 보기 |
|
||||
| 사람 확정 | 확정·미확정·변경됨, 확정자·시각 |
|
||||
|
||||
- 표 위에 한 줄 요약: "필요 27개 중 앱 확인 일치 19 · 주의 4 · 불일치 1 · 근거 없음 3 · 사람 확정 0".
|
||||
- **[일치 묶음 일괄 확정]**: 앱 확인이 '일치'인 묶음만 대상. 누르기 전 근거표를 한 번 열어야 활성화(D4 결정 대기). '주의·불일치·근거 없음'은 묶음마다 사유를 적어 개별 확정합니다.
|
||||
- '템플릿 원본 그대로'인 묶음(P2)은 앱 확인이 **'근거 없음(원본값)'**이며 일괄 확정에서 제외됩니다. 새 도면과 대조(표 후보값 반영·표 밖 치수 반영·사람 입력)해 값이 바뀌거나 근거가 붙어야 풀립니다. 새 도면 값이 우연히 원본과 같은 묶음은 '일치(원본과 동일, 근거 있음)'로 구분합니다.
|
||||
|
||||
### 4.2 도면 표 밖 치수 찾기 (결정 D2: 규칙 + 템플릿 앵커)
|
||||
|
||||
**탐색 규칙 6종** (4개 교각 도면에서 판독 스크립트가 쓴 방법을 앱 규칙으로 일반화합니다)
|
||||
|
||||
| 규칙 | 찾는 것 | 방법 | 이미 있는 것 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| R1 레벨 | 기초·기둥·코핑 EL | `EL.` 문자 + 인접 레벨선·치수선 연결 | `reader.el_list`(목록만) |
|
||||
| R2 치수 사슬 | `22@120=2.640`, `100 \| 2@100 \| 72@125=9.000` | 문자 패턴 → 치수 사슬로 파싱, 합계가 전체 치수와 맞는지 검산 | `store.chain`(입력용 파서만) |
|
||||
| R3 철근 점·선 | 철근 위치 목록 | 철근 레이어의 점 심볼·선의 좌표(뷰 기준) → 위치 목록, R2와 대조 | 없음(스크립트) |
|
||||
| R4 콘크리트 외곽 | 코핑 정면 외곽 점 목록 | 콘크리트 레이어 선 → 중심선(y = 0) 단면 점열 | 없음(스크립트) |
|
||||
| R5 뷰 기준 | 정면·측면·평면 각각의 기준점·좌표 변환(예: z = 도면 y − 309,179.8) | 뷰 제목 문자('정면도' 등)·축척·EL 문자로 기준 후보 | 없음(스크립트에 상수) |
|
||||
| R6 표 수량 대조 | 재료표 N과 작도 점·선 개수 | R3 결과 개수 = 재료표 수량이면 근거 강화(옥성교: 스터럽 106 = 39 + 27 + 40) | `reader.proposals` 일부 |
|
||||
|
||||
**앵커(템플릿 원본의 판독 위치 기억)**
|
||||
|
||||
- 앵커 한 줄 = `{값 경로, 뷰, 도면 레이어, 객체 종류, 기준 대비 상대 위치 또는 문자 패턴, 변환 규칙}`. 원본 교각의 판독 스크립트가 값을 읽을 때 같이 남기는 형식으로 정합니다(소급 추출 범위는 D6).
|
||||
- 새 도면에서 같은 레이어·뷰·상대 위치·문자 패턴을 따라가 **후보**를 만들고, 규칙 R1~R6의 검산 결과로 **신뢰 등급**을 붙입니다.
|
||||
|
||||
| 신뢰 등급 | 조건 | 화면 |
|
||||
| :--- | :--- | :--- |
|
||||
| A | 앵커 일치 + 검산(사슬 합계·재료표 수량) 일치 | 후보 + 근거, 반영 가능 |
|
||||
| B | 앵커 일치, 검산 없음 또는 일부 불일치 | 후보 + 주의 |
|
||||
| C | 규칙만 일치, 앵커 없음(형식이 다른 도면 등) | 후보 목록만, 반영 시 사유 필요 |
|
||||
| 없음 | 어떤 규칙도 일치하지 않음 | **'근거 없음'으로 표시, 억지 후보를 만들지 않음** |
|
||||
|
||||
- 출력 = [표 후보값]과 같은 비교 표에 '표 밖 치수' 구역을 추가: 현재 값 / 후보 / 도면 위치(D1·좌표·핸들) / 신뢰 등급 / [도면 보기](`dxftools.render`와 같은 확대 이미지). 선택해 반영하는 것은 사람입니다(자동 반영 없음).
|
||||
- **한계**: 규칙과 앵커는 4개 교각의 도면 틀(운곡교 P1·P2, 산외교 울산 P1, Ramp-A교 P1, 옥성교 P1)에서만 검증됩니다. 틀이 다르면 등급 C 또는 '없음'이 나오는 것이 **정상 동작**입니다.
|
||||
|
||||
### 4.3 입력 묶음 확인·확정을 앱이 수행하기 (결정 D1: 앱 확인 + 사람 확정)
|
||||
|
||||
**앱 확인 8종** (묶음마다 해당하는 것만 수행, 결과는 일치·주의·불일치·근거 없음·해당 없음)
|
||||
|
||||
| # | 확인 | 방법 | 막는 문제 |
|
||||
| :-- | :--- | :--- | :--- |
|
||||
| C1 | 출처 있음 | 값마다 표·표 밖 치수·스크립트·사람 입력 중 어디서 왔는지 기록 여부 | P3 |
|
||||
| C2 | 도면 재대조 | 표 후보값·표 밖 치수 후보와 현재 값 비교 | P4 |
|
||||
| C3 | 템플릿 원본 잔존 | 현재 값이 템플릿 원본과 같은데 새 도면 근거가 없는 항목 수 | **P2** |
|
||||
| C4 | 내부 정합 | 치수 사슬 합 = 전체 치수, 본수 = 재료표 N, 직경 = 재료표, 위치 목록 길이 = 사슬 개수 | P5 |
|
||||
| C5 | params ↔ expected 독립 | expected 값이 params에서 복사됐는지(두 값이 같고 근거도 같은 한 후보) | **P7** |
|
||||
| C6 | 범위·단위 | EL(m×1000)·mm 단위 상식 범위, 음수·0·순서 역전 | 오타 |
|
||||
| C7 | 변수 등급 위반 | F(고정) 항목이 템플릿 원본과 달라졌는지, V3(생성 변수)가 생성 스크립트 없이 손으로 고쳐졌는지 | **P6** |
|
||||
| C8 | 재생성 일치(V3) | 판독 스크립트로 재생성한 목록의 해시와 현재 해시 | P5 |
|
||||
|
||||
**상태와 기록 (기존 `confirm.json` 호환)**
|
||||
|
||||
```
|
||||
미확인 → 앱 확인(일치|주의|불일치|근거 없음) → 사람 확정(확정자·시각·근거 해시)
|
||||
↑ 값이 바뀌면 둘 다 자동 무효(기존 해시 방식 유지)
|
||||
```
|
||||
|
||||
- `confirm.json`의 확정 기록은 그대로 두고, 앱 확인은 `autocheck.json`(묶음 해시·결과·근거 목록·검사 버전·시각)에 별도로 둡니다. **앱 확인은 확정 기록을 만들지 않습니다.**
|
||||
- 게이트 실행 조건은 지금처럼 '필요 묶음이 사람 확정됨'입니다(변경 없음). 앱 확인은 조건이 아니라 **판단 자료**입니다.
|
||||
- 보고서 초안 8장(검증 방법)에 "앱 확인 결과 요약"을 추가해 사람 확정 근거가 남게 합니다.
|
||||
|
||||
**앱이 스스로 확정하지 않는 이유 (결정 D1 근거)**
|
||||
|
||||
1. 이 앱의 검증 구조는 **생성과 검사의 독립**에 기대고 있습니다. 앱이 값을 만들고(후보 반영) 같은 앱이 확정하면 검토자가 없어집니다.
|
||||
2. 앱 확인 '일치'는 "후보를 만든 규칙과 값이 같다"이지 "도면이 맞다"가 아닙니다(규칙이 틀린 도면에서 거짓 일치 가능).
|
||||
3. 확정은 책임 기록입니다. 앱이 근거를 모아 주면 사람의 확정이 **빨라지되 의미는 유지**됩니다.
|
||||
|
||||
### 4.4 같은 템플릿에서 변수 가능과 불가능 구분
|
||||
|
||||
**4단계 분류** (묶음마다, 필요하면 필드마다 표시)
|
||||
|
||||
| 등급 | 뜻 | 예 | 앱에서의 처리 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| **V1 값 변수** | 같은 형식에서 도면마다 달라지는 숫자·문자 값 | 기초·버림 크기, 기둥 지름·높이, 코핑 치수·EL, 말뚝 개수·간격·길이, 받침 표 값, 직경, fck | 화면 편집 가능, 앱 확인 대상 |
|
||||
| **V2 목록 변수** | 같은 형식에서 도면마다 달라지는 위치·점 목록 | 철근 위치 목록, 치수 사슬, 코핑 정면 외곽 점 | 치수 사슬 입력 가능, 앱 확인 대상(C4) |
|
||||
| **V3 생성 변수** | 값이 도면마다 다르지만 **판독 스크립트가 만든** 큰 목록 | `coping_rebar.bars`(98~301 KB), `footing_rebar.bars`(옥성) | 화면 직접 편집 **차단**, 판독 스크립트 재실행 안내, 재생성 일치(C8) |
|
||||
| **F 고정** | 형식을 정의하는 값. 바꾸면 같은 템플릿이 아님 | `scope`, `builders`, `checkers`, 각 묶음의 `form`·`shape`·`kind`, 철근 마크 체계, 게이트 검사기 이름 | 편집 시 **경고(D3: 차단 또는 경고)**, 바꾸면 '형식 변경 — 새 템플릿 필요' 표시 |
|
||||
|
||||
**같은 템플릿에서 바꿔도 되는가** (예시, `[추론]` 항목은 시험 후 확정)
|
||||
|
||||
| 변경 | 판정 | 이유 |
|
||||
| :--- | :--- | :--- |
|
||||
| 기초 크기·두께, 기둥 지름·높이, 말뚝 개수·간격·길이 | 가능(V1) | 생성기가 값으로 받음 |
|
||||
| 받침 표 값(EL.'X', h1~h3, A·B, S, L·T) | 가능(V1) | 표 후보값으로 이미 지원 |
|
||||
| 철근 간격·개수·직경(재료표) | 가능(V1·V2) | 치수 사슬 입력 |
|
||||
| 코핑 상면 단 수·받침 개수 변경 | 조건부 `[추론]` | 검사기 기대값·음성 시험 대상이 개수에 묶여 있음(OPEN #19 A7: 받침 10개 전제) |
|
||||
| 코핑 철근 중심선 목록 | 스크립트 필요(V3) | 사람이 좌표 수만 개를 고칠 수 없음 |
|
||||
| 평면 skew(사각)·받침 회전·기초 회전 등 **각도** | 가능(V1) `[2026-10-15 결정]` | 각도는 템플릿이 아닌 값. 옥성교(skew 18°)·새재1교(0°) 검사기는 하나로 통합(선행: 두 교각 시험 재실행) |
|
||||
| 말뚝 개수·간격·배치 | 가능(V1·V2) | 말뚝 **유무**만 형식 |
|
||||
| 하면 곡선 ↔ 직선 경사, 기초의 말뚝 유무, 기둥 단면 형식, 대좌 공유 여부 | **불가(F)** | 생성기·검사기가 다름 → 다른 템플릿 |
|
||||
| 철근 형상 종류(U형 → 폐합 등), 마크 체계 | **불가(F)** | 생성기·expected 스키마가 정함 |
|
||||
| 게이트 범위(`scope`)·생성기·검사기 이름 | **불가(F)** | 형식 정의 |
|
||||
|
||||
**새 도면이 이 템플릿으로 가능한지 판별하는 체크리스트** (교각 만들기 화면에 질문으로 제공, 예/아니오)
|
||||
1. 기초 형식(말뚝 유무: 기초판+말뚝 / 기초판만 / 기초판 없는 단일 말뚝)이 같은가
|
||||
2. 기둥 단면 형식(원형 / 기타)이 같은가
|
||||
3. 코핑 하면 형상(곡선 / 직선 경사 / 나팔형)이 같은가. 평면의 사각·직각과 각도는 **문항이 아니라 값 확인**(skew·회전 각도 입력)으로 옮긴다 `[2026-10-15 결정]`
|
||||
4. 받침 배치 구조(받침마다 대좌 / 앞뒤 공유 대좌)가 같은가
|
||||
5. 철근 형상 종류가 재료표 형식 열과 같은가
|
||||
6. 철근 생성 방식(규칙 값 / 철근별 중심선)이 같은가
|
||||
|
||||
하나라도 '아니오'면 "같은 템플릿으로 만들 수 없음 — 가장 가까운 템플릿 + 생성기·검사기 추가 필요"로 안내하고, 억지로 진행하면 묶음 표에 '형식 불일치 경고'를 상시 표시합니다.
|
||||
|
||||
**도면 먼저 추천 (2026-10-15 결정)**: 교각 만들기 화면의 순서를 "도면 올리기 → 추천 순위(근거) → 템플릿 선택 → 6문항 확인"으로 바꾼다. 도면의 단서(말뚝·PILE 문자, Ø, 재료표 형식 열, 받침 표 행 수, 정면도 R 문자)로 문항 값을 추정해 미리 채우고 템플릿을 일치 문항 수로 순위 매긴다. 사람이 바꿀 수 있고, 맞는 템플릿이 없으면 "판단 불가"로 표시한다. R·각도 문자는 정면도·평면도 영역으로 한정해 철근 굽힘 반경 r 등과 구분한다. 논의 근거: `context-migration/템플릿구분기준과도면기반추천_논의.md`.
|
||||
|
||||
**구현**: 보호 템플릿에 `variability.json`(묶음·필드 경로 → 등급)을 추가합니다. 편집 화면과 앱 확인 C7이 이 파일을 읽습니다. 4개 템플릿 분류는 부록 A.
|
||||
|
||||
---
|
||||
|
||||
## 5. 문제점과 해결방법
|
||||
|
||||
| 문제 | 해결방법 | 기대 효과 | 난이도 | 우선순위 |
|
||||
| :--- | :--- | :--- | :--: | :--: |
|
||||
| P1 일괄 확정이 검사 안 함 | 앱 확인(C1~C8) + '일치 묶음만 일괄 확정' + 근거표 열람 조건(D4) | 일괄 확정이 도장이 아닌 근거 기반 확정이 됨 | 중 | 1 |
|
||||
| P2 템플릿 원본값 확정 위험 | C3 '템플릿 원본 잔존' + 일괄 확정 제외 + 묶음 표에 '원본값' 표시 | 원본 모델이 PASS로 나오는 사고 방지 | **하** | **1** |
|
||||
| P3 근거가 안 보임 | 값 출처 열 + 근거 보기(도면 위치·표 행·스크립트·사슬 검산) | 판독서를 따로 열 필요 감소 | 중 | 2 |
|
||||
| P4 표 밖 치수 수작업 | 규칙 R1~R6 + 앵커 + 신뢰 등급 후보 표(결정 D2) | 새 도면 확인 시간 단축, 오타·누락 감소 | **상** | 3 |
|
||||
| P5 손으로 대조 불가 | V3 분류 + C4·C8(내부 정합·재생성 일치) + 편집 차단 | 확정이 '요약된 검산 결과'에 근거 | 중 | 2 |
|
||||
| P6 변수·고정 미구분 | 4단계 분류 + `variability.json` + 판별 체크리스트 + 형식 불일치 경고 | 형식이 다른 도면을 같은 템플릿에 밀어 넣는 실수 방지 | 중 | 2 |
|
||||
| P7 params·expected 동시 채움 | C5(독립성) + 후보 반영 화면에서 params 줄 별도 선택 안내 강화 | 검사 독립성 유지 | 하 | 2 |
|
||||
| P8 확인 상태 1층 | `autocheck.json` 별도 층(앱 확인), 확정 기록은 불변 | "앱이 확인", "근거 없음", "불일치 의심" 표현 가능 | 하 | 1 |
|
||||
|
||||
---
|
||||
|
||||
## 6. 구현 계획
|
||||
|
||||
| 단계 | 내용 | 주요 변경 | 시험·판정 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| **A 분류·표시** | `variability.json` 작성(4템플릿), 묶음 표에 변수 등급·값 출처 열, '템플릿 원본 그대로' 표시(C3) | `web/templates/pier.html`, `web/store.py`, `data/_템플릿/*/variability.json` | 4템플릿에서 분류 100 %, 새 교각(템플릿 복사 직후) 전 묶음이 '원본값' 표시 |
|
||||
| **B 앱 확인 엔진** | C1~C8 구현, `autocheck.json`, 근거표 화면, '일치 묶음 일괄 확정'(D4), 보고서 8장 요약 | `engine/verify.py`(신설), `web/app.py`, 템플릿, `engine/report.py` | 5개 교각 자기 데이터 전 묶음 '일치'(거짓 불일치 0), 값을 일부러 바꾸면 '불일치'(거짓 일치 0, 음성 시험), 기존 회귀 9종 FAIL 0 |
|
||||
| **C 표 밖 치수 탐색** | 규칙 R1~R6, 앵커 형식·추출 도구, 후보 표 구역, 도면 보기 | `engine/reader.py`, `engine/anchors.py`(신설), 판독 스크립트 앵커 기록 | 4개 도면에서 원본 params 값 재현율(등급 A·B 비율)·거짓 후보 0건 집계, 틀이 다른 도면에서 '없음' 정상 표시 |
|
||||
| **D 통합·문서** | 일괄 확정 문구·흐름, 사용설명서 개정(5.3·5.4·9장), 회귀 전체 | 사용설명서 v0.2.08, 시험 `tools/test_confirm_check.py` | 웹 E2E 포함 전체 회귀 PASS |
|
||||
|
||||
- 각 단계는 **정지·승인**(사용자) 후 진행합니다(HITL).
|
||||
|
||||
### 6.1 구현 현황 (2026-10-16)
|
||||
|
||||
**A단계 분류·표시 — 구현 완료, 사용자 승인 대기**
|
||||
|
||||
| 항목 | 구현 |
|
||||
| :--- | :--- |
|
||||
| 변수 등급 분류 | `engine/variability.py`(규칙 표 + 묶음 내용으로 V3 판정: 철근 `bars` 목록 100개 이상), 보호 템플릿 6종에 `variability.json`(초안) 작성 — `tools/make_variability.py`. 템플릿 저장·교각 생성 때 자동 작성·복사 |
|
||||
| 묶음 표 | 「변수 등급」「값 출처」 열 추가. 값 출처는 등급 파일의 일반 출처(표 / 표 밖 치수 / 판독 스크립트 / 사람 입력 / 템플릿 고정) |
|
||||
| 템플릿 원본 그대로(C3) | 교각 생성 시 묶음별 해시를 `pier.json`의 `origin`에 기록 → 값이 그대로면 표에 '▲ 템플릿 원본 그대로'. 필수 묶음 중 원본인 것은 표 위에 목록 경고 |
|
||||
| F 항목 편집(D3) | F 묶음 또는 묶음 안의 고정 필드(`column.shape`, `coping.form` 등)를 바꾸면 **사유 입력 필수**, `edit_log.json`에 기록. 차단하지 않음 |
|
||||
| V3 편집 | 화면에서 저장 거부, 판독 스크립트 재실행 안내 |
|
||||
| 시험 | `tools/test_variability.py` 전부 PASS(분류 100 %, 부록 A 일치, 신규 교각 26/26 원본 표시·수정 시 해제, F 사유·V3 차단, 기록 없는 기존 교각은 주장하지 않음) |
|
||||
|
||||
**기획과 다르게 한 점·한계**
|
||||
|
||||
1. 「값 출처」는 **일반 출처**입니다. 묶음 값이 실제로 도면의 어디서 왔는지(C1·C2 근거)는 B·C단계 몫입니다.
|
||||
2. **기존 교각**(2026-10-16 이전 생성)은 템플릿 복사 기록이 없어 '원본 그대로' 여부를 판단하지 않습니다(표시도 안 함). 새로 만드는 교각부터 적용됩니다.
|
||||
3. `variability.json`은 묶음 수준 초안입니다. 필드 수준 분류와 담당자 확정(R6)은 남아 있습니다.
|
||||
4. 시안의 Prism 시각 디자인(UX1~UX3)은 아직 앱에 적용하지 않았습니다(기존 화면 스타일 유지). 적용 시점은 사용자 결정 대기.
|
||||
5. 「앱 확인」 열·요약 띠·일괄 확정 근거표는 B단계입니다.
|
||||
|
||||
### 6.2 B단계 구현 현황 (2026-10-16)
|
||||
|
||||
**앱 확인 엔진 `engine/verify.py` — 구현 완료, 사용자 승인 대기**
|
||||
|
||||
| 항목 | 구현 |
|
||||
| :--- | :--- |
|
||||
| 앱 확인 C1~C8 | C1 출처 기록, C2 도면 재대조(ELEVATION·솔플레이트·재료표 후보 vs 현재 값), C3 템플릿 원본 잔존, C4 내부 정합(철근 수량 vs 재료표 수량; 계획 FAIL은 '주의'), C5 params/expected 독립, C6 범위·단위, C7 변수 등급 위반(F 항목), C8 재생성(연결된 스크립트 없음 → 해당 없음) |
|
||||
| 상태 판정 | 불일치(검사 하나라도 실패) > 근거 없음(템플릿 원본 그대로, 독립 근거 없음) > 일치(표 대조 일치) / 주의(수량만 확인, 계획된 예외 등) / 해당 없음(참고·사람 결정 기록). F 묶음은 템플릿 원본(기록 없는 기존 교각은 보호 템플릿들)과 같으면 일치 |
|
||||
| 저장 | `autocheck.json`(묶음 해시·결과·근거 목록·검사 버전) — `confirm.json`과 별도, **앱은 확정 기록을 만들지 않음**. 값·도면·검사 버전이 바뀌면 자동 재실행(약 1초) |
|
||||
| 화면(Prism) | 묶음 표 위 **요약 띠**(필요 N개 중 일치·주의·불일치·근거 없음·해당 없음·사람 확정), 「앱 확인」 열 + 근거 한 줄, **근거 보기**(8종 검사별 결과·비교 내용·도면 위치), **일치 묶음 일괄 확정**(근거표를 끝까지 내려야 활성, 대상 목록 해시 표식, 이름 필수), 앱 확인이 일치가 아닌 묶음은 개별 확정 시 **사유 필수**(확정 기록에 사유·당시 앱 확인 상태 저장) |
|
||||
| 보고서 | 8장에 「8.1 입력 묶음 앱 확인 결과 요약」(묶음별 앱 확인·근거·사람 확정·사유) |
|
||||
| Prism | `web/static/prism.css`(시안 pier.css에서 `.prism` 범위로 생성, `tools/make_prism_css.py`)를 새 화면(요약 띠·표·근거 보기·일괄 확정)에만 적용. 기존 화면 교체는 D단계 |
|
||||
|
||||
**실제 교각 6종 결과** (`tools/report_autocheck.py`, 필요 묶음 기준)
|
||||
|
||||
| 교각 | 일치 | 주의 | 불일치 | 근거 없음 | 해당 없음 |
|
||||
| :--- | --: | --: | --: | --: | --: |
|
||||
| Ramp-A교P1 | 11 | 2 | 0 | 9 | 3 |
|
||||
| 산외교울산P1 | 12 | 4 | 0 | 7 | 3 |
|
||||
| 산외교울산P2 | 12 | 4 | 0 | 8 | 3 |
|
||||
| 새재1교P1 | 9 | 4 | 0 | 10 | 3 |
|
||||
| 옥성교P1 | 9 | 4 | 0 | 11 | 3 |
|
||||
| 운곡교P1 | 9 | 0 | 0 | 11 | 3 |
|
||||
| (참고) 운곡교P3·P4 | 0~1 | 0~1 | **8** | 11 | 3 |
|
||||
|
||||
- **거짓 불일치 0**: 모델링된 교각의 자기 데이터에서 불일치 0건. 운곡교 P3·P4(P1 값을 복사만 한 교각)는 표 대조에서 **불일치 8건**으로 정확히 잡힙니다.
|
||||
- **거짓 일치 0**(시험): 받침 h1 +5 → 불일치, expected 값 +1 → 불일치, 코핑 철근 1본 삭제 → 불일치, 두께 −5 → 불일치. 수량만 확인한 철근 목록은 '일치'가 아니라 '주의'.
|
||||
- 근거 없음이 많은 이유: 기초·기둥·코핑 치수, 철근 위치·좌표, EL은 **표 밖 치수**라 앱이 아직 대조하지 못합니다(C단계). 숨기지 않고 '근거 없음'으로 표시합니다.
|
||||
|
||||
**기획과 다르게 한 점·한계 (B단계)**
|
||||
|
||||
1. 기획의 수용 기준 "5개 교각 자기 데이터 전 묶음 '일치'"는 **달성하지 못함** — 표 밖 치수 묶음은 C단계 전에는 일치가 될 수 없고 '근거 없음'입니다(거짓 일치를 만들지 않기 위해). 거짓 불일치 0·거짓 일치 0은 달성.
|
||||
2. C8(재생성 일치)은 앱에 생성 스크립트가 연결되어 있지 않아 '해당 없음'입니다.
|
||||
3. ~~이전 방식 일괄 확정은 접힌 항목으로 유지~~ → **2026-10-19 제거**(사용자 결정). `confirm_all` 경로와 화면 항목을 없앴고, 묶음은 [일치 묶음 일괄 확정] 또는 근거 보기에서 하나씩(일치가 아니면 사유 필수) 확정합니다. 이 경로를 쓰던 시험 9종은 `tools/testlib.confirm_required`(묶음마다 사유를 붙여 개별 확정)로 바꿨습니다. P1 '확정 = 도장' 문제 해소.
|
||||
4. 개별 확정(`section/.../confirm`)은 앱 확인이 일치가 아니면 사유가 서버에서 강제됩니다. 이에 맞춰 시험 4곳이 사유를 넣도록 바뀌었습니다.
|
||||
5. 기존 교각의 C3(템플릿 원본)은 판단하지 않고, F 묶음만 보호 템플릿과 비교합니다.
|
||||
6. 육안 확인: 임시 서버+헤드리스 Edge로 요약 띠·표·근거 보기·일괄 확정 화면을 캡처해 확인했습니다(`검증/ui_check_shots/`).
|
||||
|
||||
### 6.3 C단계 1차 구현 현황 (2026-10-19)
|
||||
|
||||
**표 밖 치수 탐색: 앵커 학습·따라가기 — 구현 완료, 사용자 승인 대기** (R1 레벨·R2 치수 사슬·R5 뷰 기준 구현, R3·R4 미구현)
|
||||
|
||||
| 항목 | 구현 |
|
||||
| :--- | :--- |
|
||||
| 앵커 학습 `engine/anchors.py` | 모델링된 교각의 숫자 필드(V1·V2 묶음, 1 m 이상)마다, 값과 같은 도면 치수·EL 문자(레이어·도면·좌표)를 기록. 같은 값이 1~6곳에서 나올 때만 앵커. 같은 파일 안에서 다른 종류 필드가 같은 값을 가지면(예: 두께와 지름 2500) '공유'로 표시해 A등급에서 뺌 |
|
||||
| 따라가기(R5) | 새 도면과 앵커 도면에 공통인 문자(제목·라벨)로 뷰별 이동량을 구하고(가까운 5개 중앙값), 예측 위치 반경 1,200 mm 안에서 같은 레이어·같은 종류의 문자를 후보로 취함. **도면 틀 일치율**(공통 문자 비율)이 70 % 미만이면 모든 후보를 C로 낮춤 |
|
||||
| 신뢰 등급 | A = 2곳 이상 따라가 모두 같고 이동 편차 작음 / B = 2곳 이상 일치 또는 1곳 / C = 서로 다름·틀이 다른 도면. 후보가 없으면 '없음'(억지 후보를 만들지 않음) |
|
||||
| R1 레벨 | 'EL. 38.916' 형식 문자를 앵커 종류 EL로 처리(z 계열 필드) |
|
||||
| R2 치수 사슬 | `n@간격=합계` 문자를 파싱해 개수 × 간격 = 합계 검산. 맞지 않으면 묶음 표 위 경고와 후보 화면 목록(도면 보기 링크) |
|
||||
| 저장 | 보호 템플릿 6종에 `anchors.json`(`tools/make_anchors.py`, 앵커 도면은 각 템플릿의 원본 교각). 교각 생성 시 복사, 앵커 없는 교각은 후보 화면에서 템플릿을 골라 불러옴. 앵커가 자기 도면에서 나왔으면(`sources` 해시 일치) 근거로 쓰지 않음 |
|
||||
| 화면(Prism) | [표 후보값]에 「표 밖 치수 후보」 구역: 요약 띠(후보·다름·A·B·C 수, 틀 일치율), 표(반영·대상·현재·후보·등급·근거 n곳 중 m곳·도면 위치·**도면 보기**), 반영 사유(C 필수). 도면 보기 = 해당 위치 확대 PNG(`engine/render.py`) |
|
||||
| 반영 규칙 | 같은 도면 문자에서 나온 후보를 params와 expected에 함께(한 번에 또는 따로) 반영 불가(P7), C등급은 사유 필수, 이미 같은 값은 반영 안 함, 반영·이전 값·등급·위치를 `anchor_log.json`에 기록, 바뀐 묶음은 재확정. 앱이 스스로 반영하지 않음 |
|
||||
| 앱 확인 연동 | 새 검사 **C2b 표 밖 치수 재대조**: A 후보가 현재 값과 다르면 불일치, B가 다르면 주의, A가 같고 앵커 필드의 60 % 이상 대조되면 일치(강한 근거), 일부만이면 주의. 자기 도면 앵커는 제외 |
|
||||
|
||||
**검증 결과** (`tools/test_anchors.py`, 실제 교각 9종 도면)
|
||||
|
||||
| 항목 | 결과 |
|
||||
| :--- | :--- |
|
||||
| 같은 도면 틀(울산 P1↔P2, 운곡교 P1↔P2) A등급 | **45건 중 틀린 후보 0건**, 값이 바뀐 필드를 A로 정확히 복원한 것 13건 |
|
||||
| 같은 도면 틀 B등급 | 451건 중 388건 일치(86 %), 틀린 후보 약 14 % — 경고로 표시 |
|
||||
| 같은 도면 틀 C등급 | 48건 중 12건 일치 — 목록만, 반영 시 사유 필요 |
|
||||
| 다른 도면 틀(36쌍) | **A·B 후보 0건**(틀 일치율 < 70 % → 전부 C) |
|
||||
| R2 사슬 검산 | 9개 도면 중 **운곡교 P4 도면의 사슬 2건이 불일치**(`62@125=7.250`은 계산 7,750, `29@250=7.750`은 계산 7,250 — 합계가 서로 바뀐 것으로 보임). 나머지 8개 도면은 0건 |
|
||||
| 새 교각 시험 | 템플릿 운곡교P1형 + 운곡교 P2 도면: 후보 146건, A 11건(다른 값 7건 — 모두 운곡교 P2 모델링 값과 일치), 후보가 다른 묶음 6개가 앱 확인에서 불일치 |
|
||||
| 시험 중 사고 | 처음 시험이 `store`를 환경변수 설정 전에 불러와 실제 `data/`에 시험 교각 2개를 만들었음 → 즉시 삭제, 시험은 `PIERAPP_DATA` 설정 뒤에 불러오도록 수정하고 `data/`를 건드리지 않는지 단언 추가 |
|
||||
|
||||
**기획과 다르게 한 점·한계 (C단계 1차)**
|
||||
|
||||
1. **R3(철근 점·선)·R4(콘크리트 외곽 점열)는 미구현.** 철근 위치 목록·코핑 외곽 점열은 앵커로 읽을 수 없어 여전히 '근거 없음'입니다. 스칼라 치수·EL 문자로 읽히는 필드만 후보가 됩니다.
|
||||
2. 수용 기준 "거짓 후보 0건"은 **A등급에서만 달성**(같은 틀 45건 중 0건). B등급은 약 14 %가 틀립니다(단, B는 경고 표시이고 앱 확인에서도 주의까지만 반영).
|
||||
3. 앵커는 단일 숫자 문자와 값이 같은 필드만 학습합니다. 계산해서 얻는 값(예: 사슬 합, EL 차)은 앵커가 없습니다. 1 m 미만 값은 대상이 아닙니다.
|
||||
4. D6(소급 추출: 옥성교·Ramp-A교부터)에 따라 만들었으나, 학습이 자동이라 **보호 템플릿 6종 모두**에 앵커를 만들었습니다.
|
||||
5. 같은 도면 틀이어야 작동합니다. 틀이 다른 도면(다른 설계 회사 도면 등)은 후보가 C등급 이하로 떨어지는 것이 정상 동작입니다.
|
||||
6. 기존 교각 9종은 앵커가 없어 후보 화면에서 템플릿을 골라 불러와야 합니다(자동 선택 안 함).
|
||||
7. 육안 확인: 임시 서버+헤드리스 Edge로 후보 화면을 캡처해 확인(`검증/ui_check_shots/candidates.png`).
|
||||
|
||||
### 6.4 C단계 2차 결과 (2026-10-19)
|
||||
|
||||
**① 운곡교 P3·P4에 운곡교P1형 앵커를 불러와 실제 후보 확인** (`tools/report_anchor_pier.py`, 실제 `data/운곡교P3·P4`에 `anchors.json` 복사 — 값은 하나도 반영하지 않음)
|
||||
|
||||
- 두 교각의 현재 값은 `운곡교p2`를 복사한 것이고(`pier.json`의 template 항목), 도면은 P3·P4 자신의 것입니다. 도면 틀 일치율 0.77(≥ 0.70, 같은 틀로 인정).
|
||||
- 후보 146건 중 현재 값과 다른 것 91건(P3) · 102건(P4).
|
||||
|
||||
| 단계 | P3 | P4 |
|
||||
| :--- | :--- | :--- |
|
||||
| 표 교차 확인 전 | A 11 · B 116 · C 19 | A 9 · B 118 · C 19 |
|
||||
| **표 교차 확인 후** | **A 56**(표 값과도 일치 47) · B 65 · C 25(표 값과 달라 낮춘 것 18) | A 54(47) · B 67 · C 25(18) |
|
||||
|
||||
- 표 값이 있는 필드만 비교하면 B등급은 34건 중 23건(68 %)만 맞았습니다. 틀린 것은 대부분 **같은 값을 공유하는 마크의 재료표 길이**(P3·P4·P5의 L이 서로 같아 후보가 서로 바뀜)였고, 표 교차 확인으로 모두 C로 내려갑니다.
|
||||
- 화면 확인: 후보 구역 최상단에 표 값과도 일치하는 A등급이 나열되고(받침 EL, 철근 길이·수량, 기초 EL, 기둥 높이), 앱 확인에서 불일치가 P3 10개·P4 11개로 표시됩니다(표 후보 8개 묶음 + 앵커 A 후보 묶음)(`검증/ui_check_shots/candidates_P3.png`, `pier_P3.png`).
|
||||
- 이 후보는 **아직 반영하지 않았습니다.** 반영 여부는 사용자가 [표 후보값] 화면에서 결정합니다(P3·P4는 모델링 전이고, 반영 후에도 앵커가 못 읽는 철근 위치 목록·코핑 외곽 등은 직접 판독해야 합니다).
|
||||
|
||||
**② 표 값 교차 확인 구현** (`engine/anchors.cross_check`, 화면에 "표 값과도 일치" / "표 값 X와 다름 — 표를 따르세요")
|
||||
|
||||
- 표(ELEVATION·솔플레이트·재료표) 값이 있는 필드: 앵커 후보가 표와 같으면 **A**, 다르면 표 값을 병기하고 **C**. 표 값이 없는 필드는 그대로.
|
||||
- 같은 도면 틀 4쌍 시험: A등급 45건 → **165건, 전부 맞음**(128건이 표로 확인, 47건은 표와 달라 C로 하향).
|
||||
|
||||
**③ R3·R4(기하 앵커) 시험 결과 — 채택하지 않음**
|
||||
|
||||
- 시도: 앵커가 없는 숫자 필드(≥ 1 m)에 대해 콘크리트·철근·중심선 레이어의 선분 길이가 같은 값인지 찾아, 새 도면에서 같은 위치·방향의 선분 길이를 후보로 삼음(울산 P1↔P2, 운곡교 P1↔P2).
|
||||
- 결과: A등급 15~18건/쌍이 **값이 바뀐 필드를 하나도 복원하지 못했고**(바뀐 값 복원 0건), 같은 값이 우연히 맞은 것과 철근 위치 목록(좌표인데 길이로 잘못 대응)의 오답 A가 2~7건 섞임. 위치 목록·외곽 점열은 길이가 아니라 **뷰 기준점 대비 좌표**이므로 뷰 기준점(R5)을 도면 틀마다 확정해야 하는데, 이는 현재 구조(문자 기반 이동량)로는 신뢰할 수 있게 구할 수 없었습니다.
|
||||
- 결론: 철근 점·선(R3)과 콘크리트 외곽 점열(R4)은 **여전히 '근거 없음'**으로 두고 판독 스크립트(사람)로 읽습니다. 억지 후보를 만들지 않는 방침 유지. 시도 코드는 보관하지 않고 결과만 기록(프로토타입 삭제).
|
||||
|
||||
**④ 화면 편의**: A등급 중 현재 값과 다른 후보를 expected만 / params만 한 번에 선택(두 파일 동시 선택은 P7 때문에 제공하지 않음).
|
||||
|
||||
**한계 (C단계 2차)**
|
||||
|
||||
1. 표 교차 확인은 표가 있는 필드만 개선합니다. 표 밖 필드의 B등급 정확도(약 86 %)는 그대로입니다.
|
||||
2. R3·R4 미구현 상태 유지 — 철근 위치·코핑 외곽 묶음은 앱 확인에서 계속 '근거 없음'이 됩니다.
|
||||
3. P3·P4의 후보를 반영하지 않은 상태라 두 교각의 앱 확인은 불일치 10~11개 그대로입니다(반영 후 다시 확인).
|
||||
|
||||
|
||||
|
||||
- 확정·게이트 승인은 어느 단계에서도 앱이 대신하지 않습니다. 시험은 별도 시험 폴더에서만 확정 흐름을 실행합니다(실제 교각 데이터 보호: 웹 일괄 실행이 Ramp-A·울산·옥성 게이트 보고서를 '재로드 안 함' 상태로 덮어쓴 일이 있음, 원인(시험 또는 앱 사용) 미확인, OPEN #25).
|
||||
- 수용 기준(착수 전 확정): ① 모든 필수 묶음에 앱 확인 상태가 있다 ② '근거 없음'을 숨기지 않는다 ③ 거짓 일치 0·거짓 불일치 0(4개 도면 기준) ④ 앱이 확정 기록을 만들지 않는다 ⑤ 기존 시험 FAIL 0.
|
||||
|
||||
---
|
||||
|
||||
### 6.5 D단계 결과 (2026-10-19)
|
||||
|
||||
**① 전 화면 Prism 교체**: `web/templates/base.html`을 Prism 틀(위쪽 띠·본문)로 바꾸고 `web/static/prism-app.css`를 추가해, 옛 화면의 표·버튼·입력칸·안내 문구가 Prism 토큰(색·간격·Pretendard)을 따르게 했습니다(템플릿별 개별 수정 없이 공통 틀로 교체). 상태 표시는 색과 함께 글자·기호를 씁니다. 형식 불일치 경고는 계속 닫을 수 없습니다. 어두운 테마는 시험하지 않았습니다.
|
||||
|
||||
**② 사용설명서 v0.2.12**: 앱 확인·근거 보기·일치 묶음 일괄 확정·변수 등급·표 밖 치수 후보·도면 먼저 추천·6번째 템플릿을 반영하고, 이전 방식 일괄 확정 설명을 삭제했습니다.
|
||||
|
||||
**③ 운곡교 P3·P4 후보 반영(A등급, 파일 하나씩)**: `tools/apply_anchor_a.py`로 앱의 후보 반영 경로를 거쳐 expected 쪽 A등급 후보를 반영했습니다(P3 29필드, P4 34필드, 반영 전 params·expected·confirm.json은 `backup/before_anchor_A_*`에 보관, 기록은 `anchor_log.json`). params 쪽 A등급 후보는 같은 도면 문자를 expected에 이미 썼기 때문에 P7 규칙으로 막혀 반영하지 못했습니다. 그 결과 묶음 단위 앱 확인 불일치는 P3 10·P4 11로 그대로이고, 필드 단위 expected 차이 줄은 69→52(P3), 75→63(P4)로 줄었습니다. 남은 불일치는 A등급 후보가 아닌 값(표 후보·params 독립 판독이 필요한 값)입니다.
|
||||
|
||||
**④ 회귀**: fast 15/15 PASS, Rhino 그룹 결과는 OPEN #26에 기록합니다.
|
||||
|
||||
**남은 결정**: 표 후보(expected 쪽) 검토 후 반영 여부, params 독립 판독, 운곡교 P4 도면 판(OPEN #33).
|
||||
|
||||
---
|
||||
|
||||
### 6.6 운곡교 P3·P4 실사용 결과와 앱 개선점 (2026-10-20)
|
||||
|
||||
**결과 요약**
|
||||
|
||||
| 교각 | 입력 | 게이트 결과 | 검사 | 계획된 FAIL | 계획 외 FAIL |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| 운곡교 P3 | 도면에서 읽은 값으로 params·expected 갱신(77곳 + 표 후보 105건 + 2차 48곳) | G1~G5 모두 PASS·승인 | 578/585 | 7 (B12, C9~C13 원래 길이 5건, C13 규칙) | 0 |
|
||||
| 운곡교 P4 | `apply_pier_read.py` 로 144곳 + 표 후보 118건 | G1~G5 모두 PASS·승인 | 577/585 | 8 (B11, B12, C9~C13 원래 길이 5건, C13 규칙) | 0 |
|
||||
|
||||
- 첫 실행 → 최종 실행의 계획 외 FAIL: P3 G1 34·G2 7·G3 5·G4 28 → 0, P4 G1 18·G2 10·G3 22·G5 10(허위 G4 PASS) → 0.
|
||||
- 새 도구: `tools/verify_pier_geometry.py`(도면 값 55항목을 params 와 비교; P1·P3 55/55 로 재현 확인), `tools/apply_pier_read.py`(읽은 값을 params·expected 에 반영; P1·P3 `--dry` 로 재현 확인), `tools/infer_footing_rebar.py`(기초 철근 층 규칙; P1 재현), `tools/extract_coping_outline.py`.
|
||||
- 읽을 수 있는 값: 표 3종(받침·솔플레이트·재료표), 치수 글자, 코핑 외곽·철근 단·C15·C16, 받침 위치·회전, 기초·말뚝·기둥, 기초 철근 층(규칙 + 재료표 개수 일치), 기둥 철근(후프·결속). 읽을 수 없거나 가정: 스터럽 좌측 윗면, c14 좌측 규칙, 결속철근 끝 높이, 설계 의도.
|
||||
|
||||
**앱 개선점 (OPEN #34, 효과 큰 순)**
|
||||
|
||||
| # | 개선 | 근거(실제 사례) |
|
||||
| :--- | :--- | :--- |
|
||||
| 1 | 도면 읽기 도구를 후보 화면에 통합, 템플릿 재현 검증 포함 | P3 수작업 77곳, P4 144곳 |
|
||||
| 2 | params↔expected 일관성 검사(Rhino 실행 전) | 게이트 1회 약 150초, P3 실패의 대부분이 옛 값 혼재 |
|
||||
| 3 | 필드 단위 '템플릿 원본 그대로 남음' 검사 | P3: 앱 확인 불일치 0인데 게이트 40여 건 실패 |
|
||||
| 4 | 표 칸에서 학습한 앵커의 거짓 후보 제거 | P3·P4: 재료표 S1 길이 칸 '3.800' 을 G3 사슬 끝으로 오인 |
|
||||
| 5 | 일괄 실행 중단 시 중간 결과·이전 승인 요약 구분 표시 | P4: `display.py` 오류 후 승인 요약이 이전 실행 것으로 남음 |
|
||||
| 6 | 점 좌표를 키로 쓰는 목록 정합 검사 | P3: `hooks_up` 옛 좌표로 G4 코핑 밖 점 56개 |
|
||||
| 7 | 확정 사유 최소 품질 | 사유 'asf', 'afs', '12' |
|
||||
| 8 | 임시 등록 '설계자 확인 대기' 상태 관리, 해당 없음 항목 자동 탐지 | P2 의 G3 B9 551/493 항목이 P3·P4 에 남음 |
|
||||
| 9 | 보고서에 독립 근거 구분 표시 | PASS = 내부 일관성(params·expected 가 같은 읽기에서 나온 값 다수) |
|
||||
| 10 | P1 규칙 가정 단계(스터럽 좌측 윗면, c14 좌측 규칙)의 도면 읽기 | P4: 규칙이 틀려 재료표 역산값으로 교체 |
|
||||
| 11 | 도면 파일 해시·개정 번호 기록·비교 | P4 D2 사슬 오류: 사용자 CAD 판과 올린 파일 불일치 의심 |
|
||||
| 12 | 다른 도면 틀·형식(울산·새재1교)에서의 일반성 확인 | 교각 2개·템플릿 1개로만 확인 |
|
||||
|
||||
**설계자 확인 대상**(OPEN #35): P3 C13, P4 B11·B12·C9·C13, D2 사슬(#33). 모두 임시 등록이며 보고서에 '설계자 확인 전'으로 표시해야 한다.
|
||||
|
||||
**이번 작업에서 생긴 오류(재발 방지)**: `apply_pier_read.py` 가 pier_id 를 바꾸면서 `display.hidden_ids` 를 바꾸지 않아 P4 일괄 실행이 마지막 단계에서 중단됨 → 스크립트 수정(개선 3·6 과 같은 종류: 파생 값의 동시 갱신 누락).
|
||||
|
||||
---
|
||||
|
||||
### 6.7 개선 ②③④⑥ 구현 결과 (2026-10-20)
|
||||
|
||||
| 개선 | 구현 | 시험 결과 |
|
||||
| :--- | :--- | :--- |
|
||||
| ② params↔expected 일관성(C9) | `engine/consistency.py`: 같은 양을 나타내는 두 파일 값의 규칙 103~106건(기초·말뚝·기둥, 코핑 윗면 단·하면, 받침 피치·열 위치, 코핑 철근 단·C15·C16·루프·스터럽 하단, 후프·결속 사슬, 기초 철근 층·B9·B10, 재료표 사본). 다르면 해당 묶음이 불일치(b). 규칙의 경로가 없는 교각(새재1교 등)은 건너뜀 | 완성된 P1·P3·P4: 불일치 0. P3 최초 백업 상태(`before_stage2`): 54건 모두 검출, expected G1~G4 전부 불일치. P4 `before_table_apply`: 16건 검출. 다른 형식 4종: 거짓 불일치 0 |
|
||||
| ③ 필드 단위 원본 잔존(C3b) | 교각 생성 시 `origin_values.json` 기록(이전 교각은 `tools/make_origin_values.py`로 초기 백업에서 재구성). 바뀐 묶음 안에서 높이로 보이는 값(10~60 m, z·단 높이·점 좌표의 z)이 기록값 그대로이면 주의(w) | P3 `before_hooks_up` 상태에서 `hooks_up` 좌표 4개를 정확히 지목. 완성된 상태: 경고 0(처음에는 길이 12400·12000 등을 높이로 오인해 경고가 많았으나 높이 키로 제한) |
|
||||
| ④ 거짓 앵커 | `engine/anchors.py` `TABLE_RULE="single"`: 후보를 따라간 근거가 재료표 칸 **하나**뿐이면 C등급(`table_only`). 두 방식(`none`: 표 칸을 아예 제외)과 비교 | P3·P4 확인값 기준 B등급 오답: 끔 10/65 · single 2/39 · none 3/29. A등급 오답 0 유지. 부작용: P3에서 expected:G2(일치→주의)·params:column_rebar(일치→근거 없음) 2개 묶음의 근거가 줄어듦(표 칸 하나로 맞던 B등급 후보) |
|
||||
| ⑥ 점 좌표 목록 | C9 규칙: `c14.hooks_up`의 각 점이 `c14.points`에 있어야 함 | 최초 오류(P3 `before_hooks_up`)의 4점 모두 검출, 점 하나를 옮기면 해당 항목만 깨짐 |
|
||||
|
||||
**검사 환경 정리**: 실제 사용 중 `운곡교p2`(휴지통으로 이동)에 의존하던 시험 5종(`test_open19`·`test_rampa`·`test_saejae`·`test_okseong`·`test_ulsan_p2`)과 `test_anchors`를 `tools/testlib.pier_dir`(휴지통 최신 복사본, 대소문자 구분)로 바꿈. `test_autocheck`는 P3가 완성 값을 갖게 되어 최초 백업(다른 교각 값) 상태로 시험하도록 바꿈. 회귀 fast 16/16 PASS(`test_consistency` 추가).
|
||||
|
||||
**남은 개선**: ① 읽기 도구 통합, ⑤ 일괄 실행 중단 표시, ⑦ 확정 사유 품질, ⑧ 임시 등록 관리, ⑨ 독립 근거 구분 표시, ⑩~⑫.
|
||||
|
||||
---
|
||||
|
||||
### 6.8 개선 ①⑤ 구현 결과 (2026-10-20)
|
||||
|
||||
| 개선 | 구현 | 시험 결과 |
|
||||
| :--- | :--- | :--- |
|
||||
| ① 읽기 도구 통합 | `engine/geomread.py`: P3·P4 모델링 때 따로 만든 읽기 도구(코핑 외곽·철근 선·원, 기초·말뚝·기둥 글자, 받침 폴리라인, 재료표, 기초 철근 규칙)를 하나로 합친 순수 함수 `read()`(부작용 없음, 사본과 변경 목록 반환)와 `apply_selected()`. `engine/footing_rule.py`(기초 철근 규칙). 화면 「도면에서 읽기」(`/pier/<이름>/geomread`): 묶음별 현재/읽은 값/근거 표, 체크한 줄만 반영, 반영 전 `backup/before_geomread_*`, `read_log.json`, 추론 줄 기본 미선택, 도면 틀 일치율 70 % 미만 또는 필요한 선·글자가 없으면 이유를 알리고 읽지 않음. `tools/apply_pier_read.py` 는 같은 읽기의 명령줄 판 | `tools/test_geomread.py` PASS: 운곡교 P1·P3 에서 읽은 값 = 현재 값(변경 0), P4 는 추론 줄 1건만, 초기 P4 백업(P1 복사)에서 144건 제안이 검증된 P4 값과 모두 같음(표시 선택 `hidden_ids` 제외), 다른 도면 틀 2종 거절, 화면에서 고른 줄만 기록·백업·로그·확정 무효화 |
|
||||
| ⑤ 일괄 실행 중단 표시 | `batch.json` 에 `started`·`reason`(error/fail/blocked, 서버 중단은 killed)·`error`·`gate`, 게이트 결과에 `at`. 게이트 화면: 중단 이유 안내, 결과 시각과 '이전 실행 결과' 표시, 중단되기 전에 계산된 검사기 원본(`<게이트>.json` 이 기록(`_gate.json`)보다 새로울 때)을 '중단된 실행의 임시 결과'로 표시(승인·보고서에 쓰이지 않음), 입력이 바뀐 뒤의 승인은 '승인 기록은 이전 입력 것(무효)' | `tools/test_batch_notice.py` PASS: 오류·FAIL·조건 미충족·서버 중단 안내, 이전 실행 결과 표시, 임시 결과, 무효 승인 표시, 완료된 실행에는 안내 없음, 실제 작업자(`_batch`)에 가짜 Rhino 를 연결해 세 중단 경로의 기록 확인 |
|
||||
|
||||
**선택과 한계**
|
||||
- 읽기 결과를 params 와 expected 에 함께 채우는 것은 두 파일의 독립성을 떨어뜨림 → 화면 문구와 앱 확인 C9 설명으로 알림, 표(재료표) 값은 표 후보값 화면에서 따로 대조.
|
||||
- 표시 선택 `display.hidden_ids` 는 교각 이름이 바뀌면 템플릿의 숨김을 새 이름으로 옮겨 제안(P4 는 사용자가 비움으로 정함).
|
||||
- 읽기 규칙의 범위: 운곡교 도면 틀 1종, 교각 4개. 좌측 스터럽 윗면(추론)·c14 좌측 규칙·결속철근 끝 높이는 P1 규칙 가정.
|
||||
- 환경: 일괄 실행 오류 시 중간 결과가 `<게이트>.json` 으로 남는 것을 이용(별도 저장 없음).
|
||||
|
||||
**남은 개선**: ⑦ 확정 사유 품질, ⑧ 임시 등록 관리, ⑨ 독립 근거 구분 표시, ⑩ P1 규칙 가정 단계 읽기, ⑪ 도면 해시·개정 번호, ⑫ 다른 도면 틀 일반성.
|
||||
|
||||
---
|
||||
|
||||
### 6.9 검토 요약 확정 (2026-10-20)
|
||||
|
||||
**문제**: 묶음 20~23개를 하나씩 확정하는 데 시간이 오래 걸리고, 사유가 비거나('12', 'asf') 무엇이 바뀌었는지 보기 어려웠다. 사용자 제안: 앱이 일괄 확정하고 사용자는 일괄 검토만 한다.
|
||||
|
||||
**결정(권고안)**: "앱이 확정"은 확정의 의미(사람이 도면과 대조했다는 기록)를 없애므로 채택하지 않고, **앱이 검토를 준비하고 사람이 한 화면에서 검토·체크해 한 번에 확정**한다(D1 유지). 근거 없음 묶음은 **항목별 체크**(a)를 요구, 기존 개별 확정 화면은 예외 처리용으로 유지.
|
||||
|
||||
| 요소 | 구현 |
|
||||
| :--- | :--- |
|
||||
| 화면 | `/pier/<이름>/review` (교각 화면 [검토 요약으로 확정]). 확정이 필요한 묶음을 네 구역으로: 불일치(확정 불가), 주의·근거 없음(항목별 체크), 사람 결정 기록(체크), 일치(근거 훑어보기 + 구역 체크 1회) |
|
||||
| 앱이 준비하는 것 | `engine/review.py`: 바뀐 것(교각 생성 시점 값 기록 `origin_values.json` 대비 변경 값 수와 예), 앱이 확인하지 못한 것(근거 없음·주의 검사 항목), 값의 출처(`read_log.json`·`anchor_log.json` 이력), 사유 자동 작성(`auto_reason`) |
|
||||
| 사람이 하는 것 | 도면과 대조한 묶음에 체크, 목록 끝까지 읽기(표식 `review_view.json` = 그때 목록의 해시), 확정자 이름, 공통 의견(선택) |
|
||||
| 기록 | 묶음별 확정 기록에 사유(앱 확인·변경·출처·의견 포함), 확정 당시 앱 확인 상태, 이름. 앱은 체크가 없으면 아무것도 확정하지 않음 |
|
||||
| 안전장치 | 이름·끝까지 읽기·체크 없으면 거절, 값이 바뀌면 표식 무효, 불일치는 요청에 id 가 들어와도 확정하지 않음 |
|
||||
|
||||
**시험** `tools/test_review.py`(PASS): 화면 조회만으로는 확정 0, 표식·이름 없으면 거절, 체크 없으면 0, 일치 구역은 구역 체크로만, B·D 는 체크한 것만, 불일치는 거절, 기록에 사유·앱 확인 상태·이름, 값이 바뀌면 표식 무효, 불일치를 고치면 모든 필수 묶음이 이 화면으로 확정되어 게이트가 열림. 회귀 fast 19/19.
|
||||
|
||||
**후속 변경 (같은 날)**: ① 「도면에서 읽기」가 표 값(받침·솔플레이트·재료표 후보)을 같은 화면에 "표 값" 구역으로 포함(`geomread.table_changes`), 반영은 `reader.apply_proposals` 와 같은 규칙, 받침마다 다른 솔플레이트 길이는 `{번호: 값}` 으로 정규화 — 새 교각에서 템플릿 원본 값이 한 화면으로 모두 도면 값이 됨(시험: 초기 P4 백업 + 읽기 + 표 행 = 검증된 P4 의 표 관련 필드, 알려진 예외는 앵커 값·`tie_offset` 상수·낡은 직경 기록). ② 「검토 요약 확정」에 [모두 체크]·[모두 해제] 버튼, 주의 표시(템플릿 원본 그대로·설계자 확인 전 임시 등록 포함)를 칩과 확정 사유에 기록, 주의 표시가 있으면 모두 체크 시 확인창. 불일치 묶음은 여전히 확정 불가, 이름·끝까지 읽기·체크 없이는 확정되지 않음. 앞서 제안한 '낮은 위험/높은 위험 두 단계' 대신 사용자 요청에 따라 일괄 체크 + 주의 표시로 구현(위험도별 분류는 미구현).
|
||||
|
||||
**한계**: 체크는 사용자의 선언이라 실제 대조 여부는 앱이 확인할 수 없다. 사유의 "무엇을 어떻게 대조했는지"는 공통 의견에 적어야 남는다. 앞으로 앱 확인 'C10 도구 읽기 이력'을 근거(출처, 독립 검증 아님)로 연결하면 근거 없음 항목이 줄 수 있다(미구현).
|
||||
|
||||
### 6.10 운곡교 P4 복구 결과와 앱 수정 계획 (2026-10-20)
|
||||
|
||||
> 상태: **계획 `[미확정]`** — 코드는 고치지 않았다. 아래 W1~W8은 사용자 승인 후 PDCA 순서로 구현한다.
|
||||
|
||||
#### 6.10.1 사고 경위와 복구
|
||||
|
||||
| 시각 | 사실 |
|
||||
| :--- | :--- |
|
||||
| 09:08 | 첫 P4 G1~G5 통과·승인 → 11:20 사용자가 삭제(휴지통 `운곡교P4_20261020_112015`) |
|
||||
| 11:22~12:01 | 템플릿에서 다시 만든 판에 읽기·결정 반영 → 12:01 삭제(휴지통 `운곡교P4_20261020_121116`) |
|
||||
| 12:11 | 템플릿(운곡교P1형)에서 또 새로 만들고 읽기 279건 반영 → 12:12 검토 요약으로 5개 게이트 묶음 일괄 확정 |
|
||||
| 12:15 | 일괄 실행: G5만 통과, G1~G4 **계획 외 FAIL 11건**으로 G1에서 중단 |
|
||||
| 복구 | 휴지통 판의 `expected.json`·`params.json` 복원(현재 판 백업 `data/운곡교P4/backup/before_restore_decisions_20261020/`). 임시 폴더 시험: G1 171/171·G2 42/42·G3 71/73(계획 2)·G4 110/116(계획 6)·G5 183/183, 계획 외 0 |
|
||||
|
||||
12:11 판에서 템플릿 값으로 되돌아가 있던 곳(결정 소실 6곳): ① 앵커 `rear_first_from_tip` 1198 → 1232 ② `tie_offset` 22.5 → 17.5 ③ 좌측 스터럽 윗면 40447([추론]) ④ 코핑 상단 `a` 11856/11881/11905 → 11855/11880/11904 ⑤ c14 높이 .5 → .1 ⑥ 계획된 FAIL B11·C13 누락, B12 사유가 P1 값(28/34)으로 복귀. 1232는 기준 템플릿 운곡교P1형의 값이며 교각마다 다르다(P1 1232·P2 1223·P3 1212·P4 1198).
|
||||
|
||||
#### 6.10.2 원인 (반복될 수 있는 실패)
|
||||
|
||||
| # | 원인 | 근거 |
|
||||
| :-- | :--- | :--- |
|
||||
| C1 | 사람의 결정(앵커 채택, 계획된 FAIL, 역산값)이 교각 데이터 안에만 있어 교각을 지우면 같이 사라지고, 새 교각에 다시 적용할 수단이 없다 | 6곳 소실 |
|
||||
| C2 | 앱이 알고 있는 후보(B등급 1198)가 읽기에 자동 반영되지 않고, 경고만 남은 채 확정됨 | G1 확정 사유 `현재 1232 ≠ 도면 1198` |
|
||||
| C3 | 원본 잔존 검사(C3b)가 높이로 보이는 값만 비교해 `tie_offset`·`a` 등을 놓침 | 12:15 FAIL |
|
||||
| C4 | params와 expected가 서로 다른 값을 가리켜도 실행 전에 막지 못함(모델은 1198, 기준값은 1232) | G1 후열 패드 중심 X 5건 |
|
||||
| C5 | 계획된 FAIL이 템플릿(P1) 승인 상태로 상속되고, 새 교각에 필요한 항목은 사람이 추가해야 함 | B11·C13 누락 |
|
||||
| C6 | 게이트 실패가 어느 입력 필드 때문인지 앱이 알려 주지 않아 휴지통 판과 수동 비교가 필요했음 | 이번 복구 |
|
||||
|
||||
#### 6.10.3 가능과 불가능의 경계
|
||||
|
||||
| 값의 종류 | 앱이 채울 수 있나 | 방식 |
|
||||
| :--- | :--- | :--- |
|
||||
| 표·글자·치수(재료표, ELEVATION TABLE, 사슬) | 가능 | 도면에서 읽기(같은 틀 A등급 165건 전부 정답) |
|
||||
| 식이 정해진 계산값 | 가능(식 확인 후) | 규칙으로 다시 계산, 출처 「계산」 표시 |
|
||||
| 도면에 없는 역산·추론값 | 제안만 가능 | 사람이 채택, 결정 기록에 남겨 재적용 |
|
||||
| 선·점으로 그린 기하(R3·R4) | 불가능 | 시험에서 미채택(오답 A 2~7건/쌍) |
|
||||
| 도면끼리 충돌하는 값 | 불가능 | 사람이 선택, 계획된 FAIL·설계자 확인 대기 |
|
||||
| 다른 도면 틀 | 불가능 | 앵커 새로 학습 |
|
||||
|
||||
모든 묶음이 읽기로 채워지지는 않는다(P4: `tol_mm`·`rebar_palette`·`planned_fail`·`materials`는 읽기 0건). 게이트 시작에는 자기 묶음 확정과 이전 게이트 승인이 필요하나, 확정은 사람의 선언일 뿐 값의 정확성을 보장하지 않는다(P4 12:15).
|
||||
|
||||
#### 6.10.4 수정 항목
|
||||
|
||||
설계 원칙: 앱이 준비하고 사람이 한 화면에서 체크해 한 번에 확정한다는 기존 결정(D1, 6.9절)을 유지한다. 확정 부담을 늘리지 않고, **앱이 더 많이 채우고 사실로 확인되는 모순만 차단**한다.
|
||||
|
||||
| # | 수정 | 해결하는 원인 | 내용 |
|
||||
| :-- | :--- | :--- | :--- |
|
||||
| W1 | 실행 전 관문 | C4·C2 | 일괄 실행 전에 params↔expected 불일치(사실)와 후보≠현재 값을 모아 보여 주고, 불일치는 실행을 막고 후보 차이는 확인을 받는다. 기존 C9(`engine/consistency.py`)에 앵커 대상 필드를 추가하고 검사 항목 → 깨질 게이트 항목을 예측한다 |
|
||||
| W2 | 읽기에 후보 빠짐없이 | C2 | 앱이 아는 B등급 이상 후보 중 현재 값과 다른 것을 「도면에서 읽기」 화면에 기본 선택으로 올린다(추론 줄은 지금처럼 기본 미선택) |
|
||||
| W3 | 결정 기록 분리 | C1·C5 | `decisions.json`에 사람 결정(앵커 채택, 계획된 FAIL, 역산·추론값과 사유)을 읽기 이력과 따로 보관, 교각 삭제 시 휴지통에 함께 이동. 「이전 결정 다시 적용」 화면에서 같은 도면 틀일 때만 기본 선택, 고른 것만 반영 |
|
||||
| W4 | 원본 잔존 검사 확대 | C3 | C3b를 변수 등급 V1·V2 숫자 필드 전체로 넓혀 템플릿 값 그대로인 필드를 「확인 필요」로 모은다. 파생값(`a`, c14 높이)이 어떤 입력에서 나오는지 식을 먼저 조사 |
|
||||
| W5 | 실패 → 입력 필드 연결 | C6 | 계획 외 FAIL마다 원인 후보 필드를 표시(예: `rear pad centre X` → `G1.seats.rear_first_from_tip`), 「계획된 FAIL로 등록」 버튼(사유 필수) |
|
||||
| W6 | 계획된 FAIL 상속 상태 | C5 | 템플릿에서 상속된 항목은 「미승인(상속)」으로 표시하고 게이트 결과로 해당 여부를 대조 (OPEN #34 ⑧과 통합) |
|
||||
| W7 | 재현 시험 | 전체 | 검증된 첫 P4를 정답으로 「템플릿 + 읽기 + 재적용한 결정」 결과가 같은지 비교하는 `tools/test_pier_rebuild.py`. 이번 6곳 소실을 잡아야 통과 |
|
||||
| W8 | 템플릿 승격 | C1 | 같은 도면 틀에서 결정이 반복되면(C13 L 28.966, B12 32/38) 「운곡교P3·P4형」 템플릿 후보로 올린다. 사용자 승인 필수, 설계자 확인 대기 항목은 상속 상태 유지 |
|
||||
|
||||
시험 방식: 각 항목마다 P4 12:11 판(결정 소실 상태)을 입력으로 쓰는 음성 시험과, 완성된 P1·P3·P4에서 거짓 차단 0건을 확인하는 양성 시험을 둔다.
|
||||
|
||||
#### 6.10.5 순서와 결정 필요 사항
|
||||
|
||||
| 단계 | 항목 | 이유 |
|
||||
| :--- | :--- | :--- |
|
||||
| 1 | W1·W2 | 변경이 작고 이번 사고의 직접 원인을 막는다(같은 화면) |
|
||||
| 2 | W3·W7 | 근본 대책과 그 검증 |
|
||||
| 3 | W5·W6 | 실패 해석과 계획된 FAIL 정리 |
|
||||
| 4 | W4·W8 | 파생식 조사·템플릿 승인이 필요해 뒤로 미룸 |
|
||||
|
||||
| # | 결정 필요 | 권고 |
|
||||
| :-- | :--- | :--- |
|
||||
| D7 | 이전 결정의 자동 재적용 범위 | 같은 도면 틀일 때만 기본 선택, 나머지는 목록에서 고름 |
|
||||
| D8 | 기존 교각에 결정 기록을 소급할지 | 새 교각부터만 적용 |
|
||||
| D9 | 미확정 상태의 시험 실행(승인 없이 임시 폴더에만 결과)을 앱에 둘지 | 둔다. 승인 기록은 남기지 않음 |
|
||||
| D10 | W4의 파생식 조사를 1~3단계 뒤로 미룰지 | 미룬다 |
|
||||
|
||||
**미해소(P4 승인)**: 복구한 값은 아직 확정되지 않았다. 미확정 5개 묶음(`expected:planned_fail`·G1·G2·G4, `params:coping_rebar`)을 검토 요약에서 재확정하고, 일괄 실행·G4·G5 승인 후 보고서 초안을 쓴다(OPEN #37).
|
||||
|
||||
### 6.11 W4 원본 잔존 검사 확대 계획 (2026-10-20)
|
||||
|
||||
> 상태: **계획 `[미확정]`** — 코드는 고치지 않았다. 실측 스크립트: `Code/교각모델링앱/tools/analysis_w4_residual_sizing.py`.
|
||||
|
||||
#### 6.11.1 목적
|
||||
|
||||
새 교각을 템플릿에서 만든 뒤 **도면 값으로 바뀌어야 하는데 템플릿 값 그대로 남은 필드**를 150초짜리 게이트 실행 전에 찾아 사람에게 보여 준다.
|
||||
|
||||
#### 6.11.2 현행 C3b와 한계
|
||||
|
||||
`engine/verify.py` `stale_fields_check`: ① 키 이름이 높이처럼 생긴 필드(`height_like`)만 ② 값이 10~60 m ③ 같은 묶음에서 그런 값이 3개 이상 바뀐 경우에만 ④ 생성 시점 값(`origin_values.json`)과 같으면 경고(w, 실패 아님). 그래서 높이가 아닌 값(`tie_offset`, 앵커 `rear_first_from_tip`, 코핑 상단 `a`)은 비교 대상이 아니다.
|
||||
|
||||
#### 6.11.3 실측 (P4 12:11 판 = 결정 소실 상태, 정답 = 복원한 P4)
|
||||
|
||||
| 항목 | 값 |
|
||||
| :--- | :--- |
|
||||
| 템플릿 숫자 필드 / P1~P3에서 교각마다 달라진 필드 | 1,676 / 958 |
|
||||
| 12:11 판에서 템플릿 값 그대로인 숫자 필드 | 767 |
|
||||
| 현행 C3b가 잡은 후보 | **0건** |
|
||||
| 「템플릿 값 그대로 + 교각마다 달라지는 필드」(단순 확대) | 88건 중 실제 틀림 5건 → **정밀도 6 %** (거짓 경보 83건) |
|
||||
| 위 기준 + 3교각 모두 서로 다른 값 | 2건 중 1건(`rear_first_from_tip`) → 정밀도 50 %, 놓침 많음 |
|
||||
|
||||
해석: **통계만으로 확대하면 경보가 94 % 거짓이라 쓸 수 없다.** 거짓 경보 대부분은 P4가 P1과 같은 구조라 맞게 같은 값인 필드(받침 이동 검사, 기초 철근 층, 솔플레이트 표 등)다. 실제로 게이트를 깬 필드는 소수(`rear_first_from_tip`, `tie_offset`, 코핑 상단 `a` 3개)다. 한편 c14 높이(.1 대 .5)와 계획된 FAIL 차이는 템플릿 잔존이 아니다(c14는 0.4 mm 차이로 게이트는 통과, 계획된 FAIL은 목록 항목 누락) → W3·W5·W6 몫이다.
|
||||
|
||||
필드별 이력(검증된 교각): `tie_offset` P1·템플릿 17.5, P2·P3·P4 22.5 / `a` P1·P2 11855·11880·11904, P3 11856·11880·11905, P4 11856·11881·11905 / `rear_first_from_tip` 1232·1223·1212·1198(전부 다름). 즉 교각마다 달라지는 폭이 작은(1~5 mm) 값은 사람이 눈으로 놓치기 쉽다.
|
||||
|
||||
#### 6.11.4 설계 — 통계 경보 대신 단계별 확인
|
||||
|
||||
| # | 내용 | 효과·비고 |
|
||||
| :-- | :--- | :--- |
|
||||
| W4a | **교각별 확인 목록(watch-list)**: `variability.json`에 필드 단위로 「교각마다 달라지며 템플릿 값이면 확인 필요」를 지정. 초기 목록은 이력으로 실증된 필드(위 3개와 `G2.schedule_L` 등)로 시작. 템플릿 값 그대로면 앱 확인 「주의」(C3b 확장), W1 실행 전 관문에 연결 | 정밀도가 높은 소수 목록. 새 교각이 검증될 때 도구가 후보 추가를 제안하고 담당자가 승인 |
|
||||
| W4b | **통계 후보는 경보가 아니라 묶음 요약**: 「교각마다 달라지는 필드 N개가 템플릿 값 그대로」를 묶음 단위로 접어 보여 주고 필드 목록은 펼쳐 볼 때만 표시 | 거짓 94 %를 경보로 쓰지 않으면서 훑어볼 수 있게 함 |
|
||||
| W4c | **읽기 후보 연동**(W2): 목록·통계 후보 중 도면에서 후보(앵커·표)가 있는 필드는 「도면에서 읽기」 화면에 기본 선택으로 올림 | `rear_first_from_tip`은 B등급 후보가 있었다 |
|
||||
| W4d | **파생값 조사**: `a`, `tie_offset` 등이 어떤 입력·도면 글자에서 나오는지 P1~P4 값과 도면 문자로 조사. 식이 확인되면 계산값으로 제안(출처 「계산」), 못 찾으면 W4a 목록에 남김 | 현재 식을 모름. 조사 결과에 따라 W4a 목록이 줄어듦 |
|
||||
| W4e | **교각 그룹별 기본값 승격**(W8 연계): `tie_offset` 22.5처럼 P2 이후 전부 같은 값은 템플릿 P1 값(17.5)이 오히려 예외이므로, 같은 도면 틀 그룹 템플릿에서 기본값을 바꾸는 후보로 제안 | 승인 필수 |
|
||||
|
||||
#### 6.11.5 판정 규칙 (C3b 확장안)
|
||||
|
||||
| 조건 | 판정 |
|
||||
| :--- | :--- |
|
||||
| W4a 목록 필드가 생성 시점 값 그대로 | **주의(w)**, 검토 요약의 해당 묶음에 필드명·템플릿 값·교각별 이력 표시 |
|
||||
| 위 값이 읽기 후보(A·B등급)와 다름 | 주의 + 읽기 후보로 제시 |
|
||||
| 통계 후보(W4b) | 정보(건수만), 판정에 영향 없음 |
|
||||
| 묶음 전체가 그대로 | 기존 C3 |
|
||||
|
||||
실패(불일치)로 판정하지 않는다: 같은 값이 맞을 수도 있고(P2~P4 `a` 11880 등), 근거 없이 막으면 6.9절의 일괄 검토 흐름을 해치기 때문이다. 막는 것은 W1(params↔expected 사실 불일치)이 맡는다.
|
||||
|
||||
#### 6.11.6 시험
|
||||
|
||||
| 시험 | 기준 |
|
||||
| :--- | :--- |
|
||||
| 음성(잡아야 함) | P4 12:11 판에서 `rear_first_from_tip`·`tie_offset`·`a` 3개 모두 주의로 표시 |
|
||||
| 양성(거짓 경보 억제) | 완성된 P1·P2·P3·P4에서 W4a 목록 경보 0건 (값이 도면 값이면) |
|
||||
| 통계 후보 | 12:11 판 기준 건수만 표시, 판정 불변 |
|
||||
| 회귀 | `tools/test_autocheck.py`·`test_consistency.py`·`test_review.py` 통과, 기존 C3b 동작 유지 |
|
||||
| 신규 | `tools/test_stale_watchlist.py` |
|
||||
|
||||
#### 6.11.7 순서와 결정 필요
|
||||
|
||||
1. W4d 파생값 조사(코드 변경 없음, 결과를 보고) → 2. W4a·W4b 구현 → 3. W4c(W2 구현 시 함께) → 4. W4e(W8 승인 시).
|
||||
|
||||
| # | 결정 필요 | 권고 |
|
||||
| :-- | :--- | :--- |
|
||||
| D11 | 초기 watch-list 필드 범위 | 게이트를 실제로 깬 3개 + `G2.schedule_L`로 시작해 사고 때마다 추가 |
|
||||
| D12 | 통계 후보(W4b)를 화면에 둘지 | 묶음 요약만 두고 경보 아님 |
|
||||
| D13 | 템플릿 값 그대로를 실패가 아닌 주의로 둘지 | 주의 유지(차단은 W1 사실 불일치만) |
|
||||
|
||||
---
|
||||
|
||||
## 7. 리스크·결정 사항
|
||||
|
||||
### 7.1 리스크
|
||||
|
||||
| # | 리스크 | 대응 |
|
||||
| :-- | :--- | :--- |
|
||||
| R1 | 앱 확인 '일치'를 "도면이 맞다"로 오해 | 근거 보기에서 '무엇과 무엇이 같은가'를 문장으로 표시, 신뢰 등급 병기 |
|
||||
| R2 | 규칙·앵커가 4개 도면에 과적합 | 등급 C·'없음'을 정상으로 표시, 새 형식 도면마다 앵커 추가 |
|
||||
| R3 | 앵커 소급 추출 비용(원본 4교각) | D6 결정(신규부터 vs 소급) |
|
||||
| R4 | 앱 확인 규칙이 생성 스크립트와 같은 논리여서 순환 | 도면 원자료(DXF·문자 색인)를 직접 읽는 경로만 사용, 스크립트 재생성 일치(C8)는 '독립성 낮음'으로 표시 |
|
||||
| R5 | 일괄 확정이 다시 도장화 | 일치만 대상, 근거표 열람 조건, 주의·불일치는 사유 필수 |
|
||||
| R6 | 변수 등급 오분류 | `variability.json`은 템플릿 원본 교각 담당자가 확정, 분류 변경은 별도 Task |
|
||||
|
||||
### 7.2 결정 사항
|
||||
|
||||
| # | 내용 | 상태 | 권고 |
|
||||
| :-- | :--- | :--- | :--- |
|
||||
| D1 | 확정 주체 | **결정 2026-10-14 / 심영표: 앱 확인 + 사람 확정** | — |
|
||||
| D2 | 표 밖 치수 탐색 방식 | **결정 2026-10-14 / 심영표: 규칙 + 템플릿 앵커** | — |
|
||||
| D3 | F(고정) 항목 편집 시 처리 | **결정 2026-10-15 / 심영표: 권고안** | 경고 + 사유 입력(차단은 생성기 개발자 모드에서만) |
|
||||
| D4 | 일괄 확정 조건 | **결정 2026-10-15 / 심영표: 권고안** | '일치' 묶음만, 근거표를 한 번 열어야 활성화 |
|
||||
| D5 | 착수 범위·순서 | **결정 2026-10-15 / 심영표: 권고안** | A → B 먼저(위험 큰 P1·P2 해소), C는 B 검증 뒤 |
|
||||
| D6 | 앵커 소급 추출 | **결정 2026-10-15 / 심영표: 권고안** | 옥성교·Ramp-A(최근, 판독 스크립트 최신)부터, 나머지는 필요 시 |
|
||||
|
||||
---
|
||||
|
||||
## 부록 A. 보호 템플릿 묶음 분류 (등급 초안, 담당자 확정 전)
|
||||
|
||||
| 묶음 | 운곡교P1형 | 울산형 | Ramp-A형 | 옥성교형 |
|
||||
| :--- | :-: | :-: | :-: | :-: |
|
||||
| `pier_id` | F | F | F | F |
|
||||
| `scope`·`builders`·`checkers`·`negative` (실행 설정) | F (없음=기본) | F | F | F |
|
||||
| `lean_concrete`·`footing`·`column`·`materials` | V1 | V1 | V1(기초 없음) | V1 |
|
||||
| `piles` / `pile` | V1 | — | V1(`pile` 구간) | V1 |
|
||||
| `coping` | V1 + 점 목록 V2 (`form` F) | V1 + V2 (`form` F) | V1 + V2 (`form` F) | V1 + V2 (`form`·`skew_deg` 구조는 F) |
|
||||
| `bearing_seats`·`sole_plates` | V1 + 위치 V2 (대좌 구조 F) | V1 + V2 | V1 + V2 | V1 + V2 (대좌 공유 구조 F) |
|
||||
| `rebar_marks` | 직경 V1, 마크 체계 F | 동일 | 동일 | 동일 |
|
||||
| `column_rebar` | V1·V2 (`form` F) | V1·V2 | V1·V2 | V1·V2 |
|
||||
| `footing_rebar` | V1·V2 | V1·V2 | — (`shaft_rebar` V1·V2) | **V3** (중심선 목록) |
|
||||
| `coping_rebar` | V1·V2 (규칙 값) | **V3** | **V3** | **V3** |
|
||||
| `expected.G1~G5` | V1·V2 (**params와 독립 입력**) | 동일 | 동일 | 동일 |
|
||||
| `expected.planned_fail`·`rebar_palette` | 사람 결정 기록(교각별) | 동일 | 동일 | 동일 |
|
||||
| `display`·`_schema`·`_meta`·`*_src`·`hitl_decisions*` | F / 참고 | 동일 | 동일 | 동일 |
|
||||
|
||||
> 이 표는 묶음 수준의 초안입니다. 필드 수준 분류(`variability.json`)는 A단계에서 템플릿마다 작성하고 담당자가 확정합니다.
|
||||
|
||||
## 부록 B. 근거 파일
|
||||
|
||||
| 구분 | 경로 |
|
||||
| :--- | :--- |
|
||||
| 화면·동작 | `Code/교각모델링앱/web/templates/pier.html`, `web/app.py`(`confirm_all`, `unconfirmed`), `web/store.py`(`GATE_SECTIONS`, `section_state`, `confirm`, `set_section`) |
|
||||
| 표 판독·후보 | `engine/reader.py`(`table_candidates`, `field_candidates`, `proposals`, `el_list`, `entity_info`) |
|
||||
| 사용 방법 | `DOC/04_실행/실행_T형교각모델링앱사용설명서_2026-10-14_v0.2.07.md` §4~5, §9 |
|
||||
| 일반화 이력 | `context-migration/OPEN_미해결목록.md` #19·#23·#24·#25, `DOC/02_분석/분석_운곡교P2교각도면판독_2026-10-12_v0.1.00.md` §7 |
|
||||
| 표 밖 치수 판독 사례 | `Code/옥성P1판독/extract_g*.py`, `DOC/02_분석/분석_옥성교P1교각도면판독_2026-10-14_v0.1.07.md` |
|
||||
@@ -0,0 +1,569 @@
|
||||
# T형 교각 모델링 앱 화면 PRD — 「입력 묶음 확인·확정」 개편 중심
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-15 | 심영표 | 신규 작성 — 기획서 v0.1.00의 기능을 구현하는 화면 13종의 요구사항 | 초안 `[미확정]`. 코드는 고치지 않음. 결정 대기 항목은 11장 |
|
||||
| v0.1.01 | 2026-10-15 | 심영표 | 11.1절 D3~D6을 권고안대로 결정 반영 | 사용자 지시 "권고안대로" |
|
||||
| v0.1.02 | 2026-10-15 | 심영표 | 11.2절 UX1~UX6 결정 반영 | 사용자 지시(UX1 대체, UX2 변경, UX3 내장, UX4 승인, UX5 제외, UX6 제작) |
|
||||
|
||||
> 상태: **초안 `[미확정]`**. 근거는 `DOC/01_기획/기획_입력묶음확인확정개편_2026-10-14_v0.1.00.md`(이하 기획서)와 현행 앱(`Code/교각모델링앱/web/`)이다. 화면 디자인 규칙은 같은 폴더의 `design.md`가 정하고, 그 근거는 `RAG/design system_v0.1.1`(Prism)이다. `[추론]`은 확인이 필요한 판단이다.
|
||||
|
||||
---
|
||||
|
||||
## 1. 문서 개요
|
||||
|
||||
### 1.1 목적
|
||||
|
||||
기획서가 제안한 네 가지 기능을 사용자가 실제로 쓸 수 있는 **화면 단위의 요구사항**으로 바꾼다.
|
||||
|
||||
| 기획서 기능 | 이 문서의 화면 |
|
||||
| :--- | :--- |
|
||||
| 「2. 입력 묶음 확인·확정」 개편 (4.1) | S03, S04, S10 |
|
||||
| 앱이 수행하는 확인과 근거 제시 (4.3) | S04, S05, S12 |
|
||||
| 도면 표 밖 치수 찾기 (4.2) | S07, S08 |
|
||||
| 같은 템플릿에서 변수 가능과 불가능 구분 (4.4) | S02, S06, S13 |
|
||||
|
||||
### 1.2 범위
|
||||
|
||||
| 포함 | 제외 |
|
||||
| :--- | :--- |
|
||||
| 교각 작업 화면의 1~4단계(도면·묶음·게이트·보고서) 중 변경이 필요한 화면 | 게이트 실행·승인의 동작 자체(그대로) |
|
||||
| 신규 화면 5종(S02, S05, S08, S10, S13)과 S04의 요약 띠 | 새 교각 형식의 생성기·검사기 |
|
||||
| 화면 공통 어휘(상태·등급·출처)와 문안 | 모바일·태블릿 화면(로컬 데스크톱 전용) |
|
||||
| 수용 기준과 시험 방법 | 서버·엔진의 내부 구현(필요한 자료 계약만 6장에 기술) |
|
||||
|
||||
### 1.3 사용자와 전제
|
||||
|
||||
| 구분 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 주 사용자 | 담당자(교각 도면을 모델링하는 구조엔지니어). 한 번에 한 사람이 사용한다 |
|
||||
| 보조 사용자 | 검토자(보고서와 확정 기록을 읽는 사람). 읽기 전용 |
|
||||
| 환경 | 사용자 PC의 로컬 Flask 앱. 화면 폭 1280px 이상 데스크톱. 인터넷 없이 동작한다 |
|
||||
| 전제 | 확정과 게이트 승인은 **사람의 검토 기록**이다. 앱은 어느 화면에서도 대신하지 않는다 |
|
||||
| 언어 | 화면 문구는 한국어, 코드·API·키 이름은 영어 |
|
||||
|
||||
### 1.4 용어
|
||||
|
||||
기획서 1.3절의 용어(묶음·확인·확정·표 밖 치수·앵커)를 그대로 쓴다. 이 문서에서 추가하는 용어는 다음과 같다.
|
||||
|
||||
| 용어 | 뜻 |
|
||||
| :--- | :--- |
|
||||
| 근거 | 앱 확인 한 건이 어떤 두 값을 비교해 어떤 결과가 나왔는지 적은 한 문장과 그 출처 |
|
||||
| 원본값 | 템플릿 원본 교각에서 복사한 뒤 새 도면 근거 없이 그대로인 값 |
|
||||
| 변수 등급 | V1 값 변수 · V2 목록 변수 · V3 생성 변수 · F 고정 (기획서 4.4) |
|
||||
| 작업대 | 교각 한 개의 작업 화면 전체(S03). 1~4단계를 한곳에서 진행한다 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 제품 원칙
|
||||
|
||||
| ID | 원칙 | 화면에 미치는 영향 |
|
||||
| :--- | :--- | :--- |
|
||||
| **PP-1** | **앱은 확인하고, 사람은 확정한다.** 앱 확인은 확정 기록을 만들지 않는다 | 확정 버튼은 사람의 이름 입력과 클릭으로만 동작한다. 어느 화면에도 자동 확정이 없다 |
|
||||
| **PP-2** | **근거 없음을 숨기지 않는다.** 억지 후보를 만들지 않는다 | '근거 없음'은 일치와 같은 비중으로 표시하고 요약 띠에 개수를 낸다 |
|
||||
| **PP-3** | **원본 값 그대로 확정되는 사고를 막는다.** (기획서 P2) | '원본값' 표시를 묶음 표에 상시 노출하고 일괄 확정에서 제외한다 |
|
||||
| **PP-4** | **색만으로 구분하지 않는다.** | 모든 상태는 글자와 형태를 함께 쓴다(Prism BD-1) |
|
||||
| **PP-5** | **판정 위에 근거를 둔다.** 결론을 먼저, 경위를 뒤에 | 각 화면의 첫 영역이 결론(요약 띠·판정)이고 근거는 이어서 둔다 |
|
||||
| **PP-6** | **값을 바꾸면 이전 판단이 무효가 된다.** (현행 해시 방식 유지) | 앱 확인·사람 확정·게이트 승인 모두 '재확인 필요'를 같은 어휘로 표시한다 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 화면 목록
|
||||
|
||||
### 3.1 화면 지도
|
||||
|
||||
```
|
||||
S01 교각 목록 ──┬─ S02 새 교각 적합성 판별 ── (만들기)
|
||||
│
|
||||
└─ S03 교각 작업대 (1 도면 · 2 입력 묶음 · 3 게이트 · 4 보고서)
|
||||
├─ 1 도면 ── S09 도면 문자 검색·핸들 조회
|
||||
├─ 2 묶음 ── S04 입력 묶음 확인·확정
|
||||
│ ├─ S05 근거 보기 ── S06 값 편집
|
||||
│ ├─ S07 표 후보값·표 밖 치수 ── S08 도면 보기
|
||||
│ └─ S10 일괄 확정 확인
|
||||
├─ 3 게이트 ── S11 게이트
|
||||
└─ 4 보고서 ── S12 검토보고서 초안
|
||||
S13 변수 등급 안내 (템플릿별, S01·S02·S06에서 진입)
|
||||
```
|
||||
|
||||
### 3.2 화면 일람
|
||||
|
||||
| ID | 화면 | 구분 | 패턴 | 해결하는 문제(기획서) | 단계 |
|
||||
| :--- | :--- | :--- | :--- | :--- | :-: |
|
||||
| S01 | 교각 목록 | 변경 | W5 | P6 (템플릿 형식 설명 노출) | A |
|
||||
| S02 | 새 교각 적합성 판별 | **신규** | W3 | P6 | A |
|
||||
| S03 | 교각 작업대 | 변경 | W1 + W2 | P1~P3, P8 (진행 요약) | A·B |
|
||||
| S04 | 입력 묶음 확인·확정 | **변경(핵심)** | W5 | P1, P2, P3, P5, P6, P8 | A·B |
|
||||
| S05 | 근거 보기 | **신규** | W5 | P3, P5, P7 | B |
|
||||
| S06 | 값 편집 | 변경 | W3 | P6, P7 | A |
|
||||
| S07 | 표 후보값·표 밖 치수 | 변경 | W5 | P4, P7 | C |
|
||||
| S08 | 도면 보기 | **신규** | 모달 | P3, P4 | C |
|
||||
| S09 | 도면 문자 검색·핸들 조회 | 유지(토큰 적용) | W3 + W5 | — | — |
|
||||
| S10 | 일괄 확정 확인 | **신규** | 모달 | P1 | B |
|
||||
| S11 | 게이트 | 유지 + 소변경 | W2 | 앱 확인 요약 링크만 추가 | D |
|
||||
| S12 | 검토보고서 초안 | 변경 | W4 | 8장에 앱 확인 요약 | B·D |
|
||||
| S13 | 변수 등급 안내 | **신규** | W4 | P6 | A |
|
||||
|
||||
단계는 기획서 6장의 A 분류·표시, B 앱 확인 엔진, C 표 밖 치수 탐색, D 통합·문서이다. 화면은 해당 단계가 끝나야 켜진다. 아직 구현되지 않은 단계의 열은 화면에 나타나지 않는다(빈 열을 두지 않는다).
|
||||
|
||||
---
|
||||
|
||||
## 4. 공통 요구사항
|
||||
|
||||
### 4.1 화면 골격
|
||||
|
||||
| 항목 | 요구 |
|
||||
| :--- | :--- |
|
||||
| 헤더 | 서비스명, 화면 ID, 교각 이름, 마지막 저장 시각, 실행 환경(로컬)을 한 줄에 둔다 |
|
||||
| 좌측 레일 | 1280px 이상에서 교각 안의 단계 내비게이션(1 도면 · 2 입력 묶음 · 3 게이트 · 4 보고서)과 단계별 완료 표시를 둔다 |
|
||||
| 본문 폭 | 연속 문장은 38em 이내. 표는 가로 스크롤을 허용한다 |
|
||||
| 언어 | 안내·근거·오류 문장은 규정문체(평서 종결 `~한다`)를 쓴다. 버튼 레이블은 동사로 시작하고 8자 이내로 쓴다 |
|
||||
| 폭 | 1280px에서 표 외 가로 스크롤이 없다 |
|
||||
|
||||
### 4.2 상태 어휘 (전 화면 공통)
|
||||
|
||||
모든 상태는 **글자 + 형태 + 색**을 함께 쓴다. 형태와 색의 대응은 `design.md` 6장이 정한다.
|
||||
|
||||
| 어휘 | 값 | 표시 위치 |
|
||||
| :--- | :--- | :--- |
|
||||
| **앱 확인** | 일치 · 주의 · 불일치 · 근거 없음 · —(해당 없음) · 확인 안 함 | S03, S04, S05, S10, S12 |
|
||||
| **사람 확정** | 확정 · 미확정 · 변경됨 | S03, S04, S05, S10, S12 |
|
||||
| **변수 등급** | V1 · V2 · V3 · F | S04, S05, S06, S13 |
|
||||
| **값 출처** | 표 · 표 밖 치수 · 판독 스크립트 · 원본값 · 사람 입력 | S04, S05 |
|
||||
| **신뢰 등급** | A · B · C · 없음 | S07, S08 |
|
||||
| **게이트 판정** | PASS · FAIL · 계획 FAIL · 재실행 필요 | S03, S11, S12 |
|
||||
|
||||
규칙은 다음과 같다.
|
||||
|
||||
- 상태 글자는 6자 이내다. 설명이 필요하면 상태 옆이 아니라 근거 문장(S05)에 쓴다.
|
||||
- 값이 바뀌면 앱 확인과 사람 확정이 함께 '변경됨 · 재확인 필요'가 된다. 표시 어휘를 두 개로 나누지 않는다.
|
||||
- '해당 없음'은 배지가 아니라 `—`로 쓴다. '확인 안 함'은 배지가 아니라 [확인 실행] 버튼으로 대신한다.
|
||||
|
||||
### 4.3 오류·빈 상태·진행 표시
|
||||
|
||||
| 상황 | 요구 |
|
||||
| :--- | :--- |
|
||||
| 오류 | 무엇이·왜·어떻게 3요소와 기호를 함께 쓴다. 예: "도면 색인이 없다. DWG 변환이 끝나지 않았다. 1단계에서 도면을 다시 올린다" |
|
||||
| 빈 상태 | 원인 + 다음 행동 한 문장(60자 이내). 예: "올린 도면이 없다. DWG 파일을 올린다" |
|
||||
| 진행 | 2초를 넘는 작업(앱 확인, 게이트)은 진행 표시를 보이고 `aria-live`로 낭독한다. 중요 결과를 토스트로만 알리지 않는다 |
|
||||
| 파괴적 동작 | 삭제·승인 반려·형식 변경 확정은 확인 절차를 거친다 |
|
||||
|
||||
### 4.4 접근성·시험
|
||||
|
||||
| 항목 | 기준 |
|
||||
| :--- | :--- |
|
||||
| 표준 | WCAG 2.2 AA를 목표로 한다 |
|
||||
| 키보드 | 전 기능을 키보드만으로 조작한다. 탭 순서가 시각 순서와 같다 |
|
||||
| 히트 영역 | 44px 이상. 인접 간격 8px 이상 |
|
||||
| 표 | `caption`, `th scope`, 고정 헤더. 상태 셀은 글자를 포함한다 |
|
||||
| 색 | 그레이스케일로 인쇄해도 모든 상태를 구분할 수 있다 |
|
||||
|
||||
---
|
||||
|
||||
## 5. 화면별 요구사항
|
||||
|
||||
각 화면은 **목적 → 진입 → 구성 → 행동 → 상태 → 수용 기준** 순서로 쓴다. 문안은 예시이며 최종 문구는 디자인 시안에서 확정한다.
|
||||
|
||||
### S01 교각 목록 (변경)
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 목적 | 교각을 고르고 새 교각을 만든다. 현행 화면의 기능을 유지한다 |
|
||||
| 구성 | ① 교각 표(교각·형식·만든 날·템플릿·진행 요약) ② 새 교각 영역 ③ 보호 템플릿 표 |
|
||||
| 변경 | 교각 표에 **진행 요약** 열(예: 묶음 27 중 사람 확정 12, 게이트 3/5 승인)을 추가한다. 템플릿 표의 '형식 설명' 열에 [변수 등급 보기](S13) 링크를 둔다 |
|
||||
| 행동 | [새 교각 만들기] → S02, 교각 이름 → S03, 삭제(확인 절차) |
|
||||
| 수용 기준 | 진행 요약이 실제 `confirm.json`·게이트 승인 기록과 100% 일치한다 |
|
||||
|
||||
### S02 새 교각 적합성 판별 (신규)
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 목적 | 새 도면이 선택한 템플릿으로 모델링 가능한 형식인지 교각을 만들기 전에 판별한다 (기획서 4.4 체크리스트 6문항) |
|
||||
| 진입 | S01의 [새 교각 만들기] |
|
||||
| 구성 | ① **도면 올리기** ② **추천 순위(근거 표시, 맞는 것이 없으면 "판단 불가")** ③ 이름·템플릿 선택(추천 1위 기본) ④ 6문항(추정 답 미리 채움, 사람이 변경) ⑤ 각도 값 확인(skew·받침 회전·기초 회전) ⑥ 결과 판정 영역 ⑦ [교각 만들기] |
|
||||
| 6문항 | 기초 형식(말뚝 유무) · 기둥 단면 형식 · 코핑 하면 형상 · 받침 배치 구조 · 철근 형상 종류 · 철근 생성 방식. 평면 사각·직각과 각도는 문항이 아니라 ⑤의 값으로 확인한다 |
|
||||
| 추천 | 도면 단서로 문항 값을 추정하고 5개 템플릿과 일치 문항 수로 순위를 낸다. 단서와 도면 위치를 근거로 보인다. 추정은 확정이 아니며 사람이 바꾼다. 교각 폴더는 [교각 만들기] 시점에 생성한다 |
|
||||
| 추정 범위 `[구현 2026-10-15]` | 6문항 중 **3문항만 추정**한다: 기초 형식(도면의 '말뚝' 문자 유무) · 코핑 하면 형상(정면도 R 문자: 10 m 이상 곡선, 1~10 m 나팔형(약함), 없으면 직선 경사, 작은 R은 평면 모서리로 제외) · 받침 개수(ELEVATION TABLE 행 수). 기둥 단면·철근 형상·철근 생성 방식은 도면 문자로 판별할 근거가 없어 '미확인'으로 두고 사람이 답한다. 근거마다 신뢰(보통·약함)를 표시한다. 규칙은 9개 도면 세트로만 확인했다 |
|
||||
| 행동 | 모든 문항에 답하면 판정이 나온다. 전부 '예'이면 "이 템플릿으로 만들 수 있다". 하나라도 '아니오'이면 "같은 템플릿으로 만들 수 없다. 가장 가까운 템플릿에 생성기·검사기를 추가해야 한다"를 보이고, 문항별로 어떤 부분이 다른지 적는다 |
|
||||
| 상태 | 미응답 문항은 오류로 표시하고 어느 문항인지 이름으로 알린다 |
|
||||
| 진행 허용 | '아니오'가 있어도 [그래도 만들기]로 진행할 수 있다. 이 경우 교각 이름 옆과 S03·S04 상단에 **형식 불일치 경고**가 상시 표시된다(경고는 닫을 수 없다) |
|
||||
| 수용 기준 | 6문항의 답이 교각 메타에 저장된다. 경고 교각의 S03·S04에서 경고가 100% 보인다 |
|
||||
| 구현 현황 | **전부 구현됨(2026-10-15)**: 추천 순위·근거, 6문항 답과 각도 값 3종(skew·받침 회전·기초 회전)을 `pier.json`의 `fit_answers`에 저장, 결과 판정 영역(답을 바꾸면 즉시 갱신, 불일치 시 버튼이 [그래도 만들기]로 바뀜), 불일치 항목을 `fit_mismatch`에 저장하고 교각의 모든 화면 상단에 닫을 수 없는 경고 표시(S03·S04 포함). 화면 시안: `시안/index.html`의 `#/new` |
|
||||
|
||||
### S03 교각 작업대 (변경)
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 목적 | 교각 한 개의 진행 상태를 한눈에 보고 다음 단계로 간다 |
|
||||
| 구성 | ① 결론 띠(다음에 할 일 한 가지) ② 1~4단계 카드 ③ 단계별 상세 진입 |
|
||||
| 결론 띠 | 현재 상태에서 가장 앞선 미완 단계를 말한다. 예: "필요 묶음 27개 중 앱 확인 일치 19 · 주의 4 · 불일치 1 · 근거 없음 3, 사람 확정 0. 2단계에서 근거를 확인한다" |
|
||||
| 1 도면 | DWG 목록(DXF 변환 상태, 해시 앞 16자), 색인 문자 수, 도면 올리기, S09·S07 링크 |
|
||||
| 2 입력 묶음 | S04의 요약(4.2절 어휘별 개수)과 [입력 묶음 열기] |
|
||||
| 3 게이트 | G1~G5 판정·승인 요약과 [게이트 열기] |
|
||||
| 4 보고서 | 초안 생성 여부와 [보고서 열기] |
|
||||
| 행동 | 단계 카드의 주 버튼은 화면에 **하나**(결론 띠가 가리키는 단계의 버튼)만 강조한다 |
|
||||
| 상태 | 도면 없음 → 1단계만 활성 안내. 형식 불일치 경고가 있으면 결론 띠 위에 경고 |
|
||||
| 수용 기준 | 결론 띠의 숫자가 S04 표의 집계와 100% 일치한다. 주 버튼이 화면에 1개다 |
|
||||
|
||||
### S04 입력 묶음 확인·확정 (변경, 핵심)
|
||||
|
||||
기획서 4.1절의 화면이다.
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 목적 | 모든 입력 묶음의 앱 확인 결과와 사람 확정 상태를 보고, 근거를 확인한 뒤 확정한다 |
|
||||
| 진입 | S03의 2단계, 레일 |
|
||||
| 구성 | ① **요약 띠** ② 도구 줄(필터·확인 실행·일괄 확정) ③ **묶음 표** ④ 형식 불일치 경고(해당 시) |
|
||||
|
||||
**① 요약 띠**
|
||||
|
||||
- 한 줄: "필요 27개 중 앱 확인 일치 19 · 주의 4 · 불일치 1 · 근거 없음 3 · 사람 확정 0".
|
||||
- 각 숫자는 필터 버튼이다(누르면 표가 해당 상태만 보인다).
|
||||
- 마지막 앱 확인 시각과 검사 버전을 함께 보인다. 값이 바뀌어 오래된 결과가 있으면 "재확인 필요 N개"를 별도 표시한다.
|
||||
|
||||
**③ 묶음 표 (열 정의)**
|
||||
|
||||
| 열 | 내용 | 비고 |
|
||||
| :--- | :--- | :--- |
|
||||
| 묶음 | 파일·이름. 누르면 S05 | 이름은 영문 키와 한글 설명 병기 |
|
||||
| 변수 등급 | V1 · V2 · V3 · F | S13 링크 |
|
||||
| 값 출처 | 표 · 표 밖 치수 · 판독 스크립트 · 원본값 · 사람 입력 | '원본값'은 강조(PP-3) |
|
||||
| 앱 확인 | 일치 · 주의 · 불일치 · 근거 없음 · — | 누르면 S05의 해당 근거로 |
|
||||
| 사람 확정 | 확정 · 미확정 · 변경됨, 확정자·시각 | |
|
||||
| 확인 | 개별 [확인 실행] | 앱 확인 결과가 오래되었거나 없을 때 |
|
||||
|
||||
- 정렬 기본값: 앱 확인이 '불일치 → 근거 없음 → 주의 → 일치' 순, 같은 상태는 파일 순. 사용자가 열 머리를 눌러 바꿀 수 있다.
|
||||
- '확정 불필요(참고)' 묶음은 표의 맨 끝 구분 영역으로 내리고 기본으로 접는다. 접힌 개수를 표시한다.
|
||||
- 숫자 열은 우측 정렬이며 등폭 숫자를 쓴다.
|
||||
|
||||
**② 도구 줄**
|
||||
|
||||
| 요소 | 동작 |
|
||||
| :--- | :--- |
|
||||
| 필터 | 앱 확인 상태·사람 확정 상태·변수 등급·출처로 좁힌다. 현재 적용 필터를 글자로 보인다 |
|
||||
| [전체 확인] | 필요 묶음 전체의 앱 확인 C1~C8을 실행한다. 진행 표시 후 요약 띠를 갱신한다 |
|
||||
| [일치분 확정] | 앱 확인이 '일치'이고 원본값이 아닌 묶음만 대상으로 S10을 연다 (기획서 D4) |
|
||||
|
||||
**상태**
|
||||
|
||||
| 상태 | 동작 |
|
||||
| :--- | :--- |
|
||||
| 앱 확인 전 | 앱 확인 열이 모두 [확인 실행]. 요약 띠는 "앱 확인 전 — [전체 확인]을 실행한다" |
|
||||
| 확인 실행 중 | 행마다 진행 표시, 결과가 나오는 대로 갱신. 실행 중에도 표 읽기는 가능 |
|
||||
| 원본값 묶음 | 앱 확인은 '근거 없음(원본값)'. 일괄 확정 대상에서 제외하고 행에 제외 사유를 쓴다 |
|
||||
| 형식 불일치 경고 | 표 상단에 닫을 수 없는 경고 띠 |
|
||||
|
||||
**수용 기준**
|
||||
|
||||
| # | 기준 |
|
||||
| :-: | :--- |
|
||||
| 1 | 필수 묶음 100%에 앱 확인 상태(또는 [확인 실행])가 있다 |
|
||||
| 2 | '근거 없음'과 '원본값'이 숨겨지지 않는다 |
|
||||
| 3 | 새로 복사한 교각(템플릿 직후)에서 값이 바뀌지 않은 묶음은 전부 '원본값'이다 |
|
||||
| 4 | 표와 요약 띠의 개수가 일치한다 |
|
||||
| 5 | 1280px 폭에서 표 외 가로 스크롤이 없다 |
|
||||
| 6 | 키보드만으로 필터·행 열기·확인 실행·일괄 확정 진입이 가능하다 |
|
||||
|
||||
### S05 근거 보기 (신규)
|
||||
|
||||
기획서 4.3절의 C1~C8 결과를 사람이 읽는 화면이다.
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 목적 | 한 묶음의 앱 확인 근거를 문장으로 읽고 확정 여부를 판단한다 |
|
||||
| 진입 | S04의 묶음 이름 또는 앱 확인 셀 |
|
||||
| 패턴 | W5 목록-상세. 좌측에 묶음 이동 목록(상태 포함), 우측에 상세 |
|
||||
|
||||
**상세 구성**
|
||||
|
||||
1. **결론**: 묶음 이름, 변수 등급, 앱 확인 결과 한 줄, 사람 확정 상태.
|
||||
2. **근거 표**: C1~C8 각각의 `검사 · 결과 · 근거 문장 · 도면 위치`. 해당 없는 검사는 `—`.
|
||||
3. **값 비교**: 현재 값과 후보 값 또는 템플릿 원본 값을 나란히 보인다(차이가 있는 항목만).
|
||||
4. **확정 영역**: 확정자 이름, 사유(주의·불일치·근거 없음이면 필수), [확정].
|
||||
|
||||
**근거 문장 규칙** (R1: "일치"를 "도면이 맞다"로 오해하지 않게)
|
||||
|
||||
- 모든 근거는 '무엇과 무엇이 같은가'를 쓴다. 예: "기둥 지름 2,200은 도면 단면도(D1, 좌표 …)의 치수 문자 '2.200'과 같다."
|
||||
- 규칙으로 만든 후보와의 비교임을 밝힌다. 예: "이 결과는 후보를 만든 규칙과 값이 같다는 뜻이다. 도면이 맞다는 판정이 아니다."
|
||||
- 검사에 쓴 방법의 독립성을 표기한다(예: C8 재생성 일치는 '독립성 낮음').
|
||||
|
||||
**행동**
|
||||
|
||||
| 행동 | 조건·동작 |
|
||||
| :--- | :--- |
|
||||
| [도면 보기] | 근거의 도면 위치마다 S08을 연다 |
|
||||
| [값 편집] | S06으로 이동 |
|
||||
| [확정] | 확정자 이름이 있고, 주의·불일치·근거 없음이면 사유가 있어야 한다. 조건이 모자라면 버튼은 활성인 채 오류 메시지를 보인다 |
|
||||
| 이전·다음 묶음 | 목록의 순서로 이동. 확정하면 다음 미확정 묶음으로 이동하는 선택지를 준다 |
|
||||
|
||||
**상태**
|
||||
|
||||
| 상태 | 동작 |
|
||||
| :--- | :--- |
|
||||
| 앱 확인 전 | 근거 표 대신 [확인 실행]과 "이 묶음은 아직 확인하지 않았다" |
|
||||
| 값 변경됨 | 결론에 "값이 바뀌었다. 이전 확인과 확정이 무효가 되었다" 표시, [다시 확인] |
|
||||
| V3 묶음 | 값 편집 대신 "판독 스크립트로 다시 만든다" 안내와 C8 결과 |
|
||||
| 원본값 | 값 비교에 "템플릿 원본과 같다. 새 도면 근거가 없다" |
|
||||
|
||||
**수용 기준**
|
||||
|
||||
| # | 기준 |
|
||||
| :-: | :--- |
|
||||
| 1 | 검사 8종 각각의 결과·문장·도면 위치가 보인다 |
|
||||
| 2 | '일치' 근거마다 비교한 두 값과 출처가 문장에 있다 |
|
||||
| 3 | 사유 없는 '주의·불일치·근거 없음' 확정이 불가능하다(오류 메시지 표시) |
|
||||
| 4 | 확정 기록에는 사람이 입력한 이름만 들어가고, 앱 확인 서버 경로는 확정 기록을 쓰지 않는다 |
|
||||
|
||||
### S06 값 편집 (변경)
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 목적 | 묶음의 값을 수정하고 저장한다. 현행 `section` 화면의 기능 유지 |
|
||||
| 변경 | ① 상단에 **변수 등급 안내**(이 묶음에서 바꿔도 되는 값과 안 되는 값) ② F 항목 편집 시 경고 ③ V3 묶음은 편집 차단 ④ 저장 뒤 앱 확인 결과가 무효가 됨을 알림 ⑤ [저장된 값으로 확정] 버튼 제거(확정은 S05·S10에서만) |
|
||||
| F 항목 | 필드 수준 등급이 F이면 편집 영역에 "형식을 정의하는 값이다. 바꾸면 같은 템플릿이 아니다" 경고. 저장하려면 사유를 입력해야 한다(기획서 D3 권고). 저장하면 묶음에 '형식 변경' 표시가 붙고 S03에 새 템플릿 필요 안내가 뜬다 |
|
||||
| V3 묶음 | 편집창 대신 읽기 전용 요약(개수·크기·해시)과 "판독 스크립트로 다시 만든다" 안내, 스크립트 경로 |
|
||||
| 입력 보조 | 치수 사슬 입력(`22@120=2.640`)을 지원하는 필드는 합계 검산 결과를 즉시 보인다 |
|
||||
| 수용 기준 | V3 묶음에서 편집 영역이 없다. F 편집은 사유 없이 저장되지 않는다. 저장 직후 S04 상태가 '변경됨'으로 바뀐다 |
|
||||
|
||||
### S07 표 후보값·표 밖 치수 (변경)
|
||||
|
||||
기획서 4.2절의 화면이다. 현행 `candidates` 화면을 확장한다.
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 목적 | 도면 표와 표 밖 치수에서 찾은 후보를 현재 값과 비교하고, 사람이 골라 반영한다 |
|
||||
| 구성 | ① 요약 띠(표 후보 N · 표 밖 치수 후보 N(A·B·C 개수) · 다름 N) ② 후보 비교 표 ③ 인식한 표 ④ EL 표기 목록 |
|
||||
| 후보 비교 표 열 | 반영(선택) · 대상 · 현재 값 · 후보 값 · 구분(표/표 밖 치수) · 상태(같음/다름) · 신뢰 등급 · 도면 위치 · 근거 |
|
||||
| 표 밖 치수 구역 | 규칙 R1~R6 중 어느 규칙이 찾았는지 '규칙' 열에 쓴다. 신뢰 등급 A·B·C·없음을 병기한다 |
|
||||
| 행동 | 행 선택 → [선택한 후보값 반영]. 등급 C는 반영 시 사유 필수. 등급 '없음'은 후보 행이 아니라 "근거 없음" 목록에 따로 나열하고 반영 버튼이 없다 |
|
||||
| params·expected 분리 | 한 후보가 params와 expected 양쪽에 반영될 수 있는 경우, 반영 대상 줄을 **둘 중 하나씩** 고르게 하고 둘을 함께 고르면 경고한다(기획서 P7) |
|
||||
| 상태 | 후보 0건 → "후보가 없다. 도면의 틀이 앱의 규칙과 다르면 정상이다. 문자 검색(S09)으로 직접 찾는다" |
|
||||
| 수용 기준 | 자동 반영이 없다. 모든 반영은 사람이 선택한 행에만 적용된다. 등급 '없음'이 후보로 둔갑하지 않는다 |
|
||||
|
||||
### S08 도면 보기 (신규)
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 목적 | 근거·후보의 도면 위치를 확대 이미지로 확인한다 (`dxftools.render`와 같은 이미지) |
|
||||
| 형태 | 모달. 대상 좌표 주변 확대 이미지에 대상 위치를 표시한다 |
|
||||
| 구성 | 이미지, 캡션(도면 이름·뷰·좌표·핸들), 확대·축소·이동, 인접 후보로 이동 |
|
||||
| 행동 | Esc로 닫는다. 닫으면 호출한 행으로 포커스가 돌아간다 |
|
||||
| 접근성 | 이미지에 대체 텍스트로 위치·객체 설명을 쓴다. 이동·확대는 버튼과 방향키 둘 다 지원한다 |
|
||||
| 수용 기준 | 모든 이미지에 캡션이 있다. 모달 안에 모달이 열리지 않는다 |
|
||||
|
||||
### S09 도면 문자 검색·핸들 조회 (유지)
|
||||
|
||||
현행 기능을 유지한다. 디자인 토큰만 새 규칙으로 바꾼다. 검색 결과 행에 [후보로 보내기]는 두지 않는다(자동 반영 금지, PP-1).
|
||||
|
||||
### S10 일괄 확정 확인 (신규)
|
||||
|
||||
기획서 4.1절 D4의 화면이다.
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 목적 | 앱 확인이 '일치'인 묶음을, 근거를 확인한 뒤 한꺼번에 확정한다 |
|
||||
| 형태 | 모달 |
|
||||
| 구성 | ① 결론("일치 묶음 19개를 확정한다. 주의·불일치·근거 없음·원본값 8개는 대상이 아니다") ② **근거표**(묶음·근거 한 줄·출처) ③ 확정자 이름 ④ [확정] ⑤ [취소] |
|
||||
| 근거표 열람 조건 | 근거표를 끝까지 보지 않으면 [확정]이 오류를 낸다. 오류는 "근거표를 먼저 확인한다. 일치 묶음의 근거를 읽지 않으면 확정할 수 없다. 근거표를 끝까지 내린다"로 알린다 (비활성화하지 않고 오류 메시지를 낸다) |
|
||||
| 제외 목록 | 대상에서 빠진 묶음과 사유(주의·불일치·근거 없음·원본값)를 같은 모달에서 보여 준다. 누르면 S05로 이동 |
|
||||
| 완료 | 확정 기록 개수와 확정자·시각을 결과로 보인다. 토스트만으로 알리지 않고 S04 요약 띠에도 반영한다 |
|
||||
| 수용 기준 | 원본값·주의·불일치·근거 없음 묶음이 대상에 0건이다. 근거표를 읽지 않은 상태에서는 확정되지 않는다. 확정자 이름이 비어 있으면 확정되지 않는다 |
|
||||
|
||||
### S11 게이트 (유지 + 소변경)
|
||||
|
||||
현행 기능을 유지한다. 변경은 두 가지이다.
|
||||
|
||||
- 게이트 실행 조건 문구에 "필요 묶음이 사람 확정됨" 외에 앱 확인 요약 링크(S04)를 추가한다. 앱 확인은 조건이 아니라 판단 자료임을 문구로 밝힌다.
|
||||
- 판정 표시를 4.2절 게이트 어휘로 통일한다.
|
||||
|
||||
### S12 검토보고서 초안 (변경)
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 변경 | 보고서 8장(검증 방법)에 **앱 확인 결과 요약**을 넣는다 |
|
||||
| 요약 내용 | 묶음별 앱 확인 상태·근거 한 줄·신뢰 등급, 사람 확정자·시각, 확정 시점의 앱 확인 검사 버전, 근거 없음·원본값 목록 |
|
||||
| 화면 | 생성한 초안을 화면에서 열람하고 MD·PDF를 받는다. 앱 확인 요약이 어느 시점 결과인지 표기한다 |
|
||||
| 수용 기준 | 보고서의 요약 숫자가 S04 요약 띠와 같다. 값이 바뀐 뒤 만든 초안과 그 이전 초안을 구분한다 |
|
||||
|
||||
### S13 변수 등급 안내 (신규)
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 목적 | 한 템플릿에서 바꿔도 되는 값과 바꾸면 안 되는 값을 문서처럼 열람한다 (기획서 4.4, 부록 A) |
|
||||
| 패턴 | W4 문서. 좌측 목차(묶음), 우측 본문 |
|
||||
| 구성 | ① 등급 4종 정의 ② 묶음별 등급 표 ③ "바꿔도 되는가" 예시 표 ④ 새 도면 판별 체크리스트 요약(S02 링크) |
|
||||
| 진입 | S01 템플릿 표, S02 템플릿 선택, S04·S06의 등급 배지 |
|
||||
| 수용 기준 | 4개 보호 템플릿 모두에 등급 표가 있다. 등급 배지에서 해당 묶음 위치로 이동한다 |
|
||||
|
||||
---
|
||||
|
||||
## 6. 자료 계약 (화면이 읽고 쓰는 파일)
|
||||
|
||||
화면 구현에 필요한 자료만 적는다. 내부 구현은 기획서 4.3~4.4절과 엔진 설계를 따른다.
|
||||
|
||||
| 파일 | 위치 | 내용 | 쓰는 주체 | 읽는 화면 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| `confirm.json` | 교각 폴더 | 사람 확정 기록(확정자·시각·해시) | **사람 조작만** | S03~S05, S10, S12 |
|
||||
| `autocheck.json` | 교각 폴더 | 묶음 해시·앱 확인 결과·근거 목록·검사 버전·시각 | 앱 확인 엔진 | S03~S05, S10, S12 |
|
||||
| `variability.json` | 템플릿 폴더 | 묶음·필드 경로 → 변수 등급 | 템플릿 담당자 | S04~S06, S13 |
|
||||
| 앵커 | 템플릿 폴더 | 값이 도면의 어디서 읽혔는지 기록 | 판독 스크립트 | S07, S08 |
|
||||
| 교각 메타 | 교각 폴더 | 적합성 6문항 답, 형식 불일치 여부 | S02 | S03, S04 |
|
||||
|
||||
`autocheck.json`의 근거 항목은 다음 필드를 가진다: `check`(C1~C8), `result`(match / caution / mismatch / no_basis / n/a), `sentence`(근거 문장), `refs`(도면 이름·뷰·좌표·핸들 또는 표 행), `confidence`(A / B / C / none), `independence`(high / low).
|
||||
|
||||
---
|
||||
|
||||
## 7. 비기능 요구
|
||||
|
||||
| 항목 | 요구 |
|
||||
| :--- | :--- |
|
||||
| 성능 | 필요 묶음 전체의 앱 확인(C1~C8, 도면 재대조 제외)을 10초 이내에 마친다 `[추론]`. 도면 재대조(C2)가 포함되면 진행 표시로 대신한다 |
|
||||
| 신뢰 | 앱 확인 서버 경로는 `confirm.json`을 쓰지 않는다. 자동화 시험이 이를 확인한다 |
|
||||
| 보호 | 시험은 실제 교각 데이터가 아닌 시험 폴더에서만 확정 흐름을 실행한다 (OPEN #25 사례) |
|
||||
| 이력 | 앱 확인 결과는 검사 버전과 시각을 남긴다. 규칙이 바뀌면 이전 결과에 '이전 버전' 표시를 붙인다 |
|
||||
| 호환 | 기존 `confirm.json`·`params.json`·`expected.json`을 바꾸지 않는다. 새 파일을 추가하는 방식이다 |
|
||||
| 테마 | 라이트를 기본으로 하고 다크 토큰을 같이 정의한다. 다크 전수 시험은 사용자 요청 시 수행한다 `[추론]` |
|
||||
|
||||
---
|
||||
|
||||
## 8. 수용 기준 요약 (기획서 6장 승계)
|
||||
|
||||
| # | 기준 | 시험 방법 |
|
||||
| :-: | :--- | :--- |
|
||||
| 1 | 모든 필수 묶음에 앱 확인 상태가 있다 | 5개 교각 데이터에서 S04 행 전수 확인 |
|
||||
| 2 | '근거 없음'을 숨기지 않는다 | 근거 없음 묶음이 표·요약 띠·S10 제외 목록에 모두 나온다 |
|
||||
| 3 | 거짓 일치 0, 거짓 불일치 0 | 4개 도면 기준. 값을 일부러 바꾼 음성 시험에서 '불일치'가 나온다 |
|
||||
| 4 | 앱이 확정 기록을 만들지 않는다 | 앱 확인 실행 전후 `confirm.json` 해시 불변 |
|
||||
| 5 | 기존 시험 FAIL 0 | 기존 회귀 시험 일괄 |
|
||||
| 6 | 화면 접근성 | 모든 상태 셀에 글자 100%, 1280px 가로 스크롤 0, 키보드 전 기능, axe 위반 0 |
|
||||
| 7 | 디자인 시스템 적합 | `design.md` 11장 점검표 전항 |
|
||||
|
||||
---
|
||||
|
||||
## 9. 단계와 화면의 대응
|
||||
|
||||
| 단계 | 켜지는 화면·기능 | 선행 |
|
||||
| :--- | :--- | :--- |
|
||||
| A 분류·표시 | S01 진행 요약, S02, S03 결론 띠(확정 기준), S04의 변수 등급·값 출처·원본값, S06 등급 안내·V3 차단, S13 | 변수 등급 파일 작성 |
|
||||
| B 앱 확인 엔진 | S04 앱 확인 열·요약 띠·전체 확인, S05, S10, S12 | A |
|
||||
| C 표 밖 치수 탐색 | S07 표 밖 치수 구역, S08, 앵커 | B 검증 후 |
|
||||
| D 통합·문서 | S11 문구, 사용설명서 개정, 회귀 | A~C |
|
||||
|
||||
---
|
||||
|
||||
## 10. 리스크
|
||||
|
||||
| # | 리스크 | 대응 |
|
||||
| :-: | :--- | :--- |
|
||||
| R1 | 사용자가 '일치'를 '도면이 맞다'로 읽는다 | S05 근거 문장에 비교 대상을 쓰고 한계 문장을 고정으로 넣는다 |
|
||||
| R2 | 요약 띠·표 숫자가 서로 어긋난다 | 같은 집계 함수를 쓰고 수용 기준 4로 시험한다 |
|
||||
| R3 | 일괄 확정이 다시 도장이 된다 | S10 근거표 열람 조건과 제외 목록, 사유 필수 |
|
||||
| R4 | 상태 어휘가 늘어나 판독이 어려워진다 | 4.2절에서 어휘를 고정하고 배지는 열마다 4종 이내 |
|
||||
| R5 | 디자인 시스템에 없는 요소가 필요하다 | `design.md` 10장의 공백 목록으로 제안하고 승인 전에는 조합 컴포넌트로 대신한다 |
|
||||
|
||||
---
|
||||
|
||||
## 11. 결정 사항
|
||||
|
||||
### 11.1 기획서에서 승계한 결정 (기획서 7.2절)
|
||||
|
||||
| # | 내용 | 상태 |
|
||||
| :-- | :--- | :--- |
|
||||
| D1 | 확정 주체: 앱 확인 + 사람 확정 | **결정 2026-10-14** |
|
||||
| D2 | 표 밖 치수 탐색: 규칙 + 템플릿 앵커 | **결정 2026-10-14** |
|
||||
| D3 | F(고정) 항목 편집 처리 | **결정 2026-10-15 / 심영표: 권고안** — 경고 + 사유 입력, 차단은 생성기 개발자 모드에서만 |
|
||||
| D4 | 일괄 확정 조건 | **결정 2026-10-15 / 심영표: 권고안** — '일치' 묶음만, 근거표 열람 뒤 확정 |
|
||||
| D5 | 착수 범위·순서 | **결정 2026-10-15 / 심영표: 권고안** — A → B 먼저, C는 B 검증 뒤 |
|
||||
| D6 | 앵커 소급 추출 | **결정 2026-10-15 / 심영표: 권고안** — 옥성교·Ramp-A교부터, 나머지는 필요 시. S07·S08에만 영향 |
|
||||
|
||||
### 11.2 화면 설계에서 새로 생긴 결정
|
||||
|
||||
| # | 내용 | 상태 |
|
||||
| :-- | :--- | :--- |
|
||||
| UX1 | 디자인 시스템 적용: 기존 R8 기준(맑은 고딕 14px·흰 배경·철근 팔레트 판정색)을 Prism 앱 프로파일(`design.md`)로 대체한다 | **결정 2026-10-15 / 심영표: 대체.** `디자인지침_경로.md` 갱신 완료 |
|
||||
| UX2 | 판정 색: Prism 상태색을 쓴다. 철근 팔레트는 Rhino 모델과 범례에만 둔다 | **결정 2026-10-15 / 심영표: 변경** |
|
||||
| UX3 | 서체: Pretendard를 앱에 내장한다 | **결정 2026-10-15 / 심영표: 내장.** 파일을 `web/static/fonts/PretendardVariable.woff2`에 배치(OFL). 적용은 A단계 구현 시 |
|
||||
| UX4 | 상태 마커(●▲■◆◇) 도형 사용 | **결정 2026-10-15 / 심영표: 승인** |
|
||||
| UX5 | 다크 테마 시험 | **결정 2026-10-15 / 심영표: 제외.** 토큰은 정의하되 시험하지 않는다 |
|
||||
| UX6 | 핵심 화면 HTML 시안 | **결정 2026-10-15 / 심영표: 제작.** `시안/index.html` (S04·S05·S07·S10 동작 시안) |
|
||||
|
||||
## 부록 A. 핵심 화면 와이어프레임 (정보 구조, 외형 아님)
|
||||
|
||||
### S04 입력 묶음 확인·확정 (1280px)
|
||||
|
||||
```
|
||||
┌ 헤더 ──────────────────────────────────────────────────────────────────────────────┐
|
||||
│ 서비스명 · S04 · 옥성교P1 · 저장 14:32 · 로컬 │
|
||||
├ 레일 ┬─────────────────────────────────────────────────────────────────────────────┤
|
||||
│ 1 도면 ✓│ 2. 입력 묶음 확인·확정 │
|
||||
│ 2 묶음 ●│ ┌ 요약 띠 ─────────────────────────────────────────────────────────────┐ │
|
||||
│ 3 게이트│ │ 필요 27개 중 일치 19 · 주의 4 · 불일치 1 · 근거 없음 3 · 사람 확정 0 │ │
|
||||
│ 4 보고서│ │ 마지막 앱 확인 14:30 · 검사 v0.1 · 재확인 필요 0 │ │
|
||||
│ │ └──────────────────────────────────────────────────────────────────────┘ │
|
||||
│ │ 필터: [전체 ▾] [전체 확인] [일치분 확정] (주 버튼 1개) │
|
||||
│ │ ┌────────────────────────────────────────────────────────────────────┐ │
|
||||
│ │ │묶음 │등급│출처 │앱 확인 │사람 확정 │확인 │ │
|
||||
│ │ │G4.stirrups │V2 │표 밖치수│● 일치 │미확정 │ │ │
|
||||
│ │ │footing │V1 │원본값 │◆ 근거 없음 │미확정 │[확인 실행] │ │
|
||||
│ │ │coping_rebar │V3 │스크립트│▲ 주의 │미확정 │ │ │
|
||||
│ │ │… │ │
|
||||
│ │ └────────────────────────────────────────────────────────────────────┘ │
|
||||
│ │ ▸ 확정 불필요(참고) 5개 (접힘) │
|
||||
└─────────┴─────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### S05 근거 보기 (1280px)
|
||||
|
||||
```
|
||||
├ 레일 ┬───────────────┬────────────────────────────────────────────────────────────┤
|
||||
│ │ 묶음 이동 │ G4.stirrups V2 목록 변수 앱 확인: ● 일치 사람: 미확정 │
|
||||
│ │ ● G4.stirrups │ ┌ 근거 표 ──────────────────────────────────────────────┐ │
|
||||
│ │ ▲ coping_rebar │ │ C1 출처 ● 일치 표 밖 치수(D1 정면도) … [도면 보기] │ │
|
||||
│ │ ◆ footing │ │ C4 내부 ● 일치 사슬 합 9,000 = 전체 치수 9,000 │ │
|
||||
│ │ … │ │ C5 독립 ● 일치 params와 expected의 근거가 다르다 │ │
|
||||
│ │ │ └────────────────────────────────────────────────────────┘ │
|
||||
│ │ │ 이 결과는 후보를 만든 규칙과 값이 같다는 뜻이다. 도면이 맞다는 판정이 아니다. │
|
||||
│ │ │ ┌ 값 비교 ┐ ┌ 확정 ─────────────────────────────────────┐ │
|
||||
│ │ │ │ … │ │ 확정자 [ ] 사유 [ ] [확정] │ │
|
||||
│ │ │ └─────────┘ └────────────────────────────────────────────┘ │
|
||||
└──────┴───────────────┴────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### S10 일괄 확정 확인 (모달)
|
||||
|
||||
```
|
||||
┌ 일치 묶음 확정 ─────────────────────────────────────────────┐
|
||||
│ 일치 19개를 확정한다. 주의 4 · 불일치 1 · 근거 없음 3 · 원본값 1은 대상이 아니다. │
|
||||
│ ┌ 근거표 (끝까지 내려 확인) ─────────────────────────────┐ │
|
||||
│ │ G4.stirrups 사슬 합 9,000 = 전체 치수 9,000 │ │
|
||||
│ │ … │ │
|
||||
│ └────────────────────────────────────────────────────────┘ │
|
||||
│ ▸ 제외된 묶음 9개 (누르면 근거 보기) │
|
||||
│ 확정자 [ ] │
|
||||
│ [취소] [확정] │
|
||||
└──────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### S07 표 후보값·표 밖 치수
|
||||
|
||||
```
|
||||
요약: 표 후보 14 · 표 밖 치수 후보 31 (A 18 · B 9 · C 4) · 다름 12 · 근거 없음 3
|
||||
┌────────────────────────────────────────────────────────────────────────────────┐
|
||||
│반영│대상 │현재 │후보 │구분 │상태│등급│도면 위치 │근거 │
|
||||
│ ☐ │footing.height │2,500 │2,500 │표 │같음│ — │D1 표 행 3 │보기 │
|
||||
│ ☑ │coping.z_tip │31,232 │31,231.5│표 밖 치수│다름│ B │D1 정면 (225817,…) │보기 │
|
||||
└────────────────────────────────────────────────────────────────────────────────┘
|
||||
[선택한 후보값 반영] 근거 없음 3개 ▸ (후보 없음, 문자 검색으로 직접 찾는다)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 부록 B. 근거 파일
|
||||
|
||||
| 구분 | 경로 |
|
||||
| :--- | :--- |
|
||||
| 기획서 | `DOC/01_기획/기획_입력묶음확인확정개편_2026-10-14_v0.1.00.md` |
|
||||
| 디자인 시스템 | `RAG/design system_v0.1.1/` (`Design.md`, `design.tokens.json`, `design.components.md`, `webapp/module.webapp.md`) |
|
||||
| 현행 화면 | `Code/교각모델링앱/web/templates/` (`index`, `pier`, `section`, `candidates`, `search`, `gates`) |
|
||||
| 화면 설계 규칙 | `DOC/01_기획/웹앱디자인시안/design.md` |
|
||||
| 디자인 지침 기록 | `context-migration/디자인지침_경로.md` (R8) |
|
||||
@@ -0,0 +1,740 @@
|
||||
# T형 교각 모델링 앱 디자인 시스템 — Prism 앱 프로파일
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-15 | 심영표 | 신규 작성 — Prism Design System v0.1.1을 교각 모델링 앱에 적용하는 프로파일(토큰·상태 체계·조합 컴포넌트·문안·점검표) | 초안 `[미확정]`. PRD v0.1.00의 화면 13종이 소비한다 |
|
||||
| v0.1.01 | 2026-10-15 | 심영표 | PRD UX1~UX6 결정 반영: R8 대체 확정, Pretendard 내장 파일 지정, 마커 도형 승인, 다크 시험 제외 | 사용자 결정 |
|
||||
|
||||
| 메타 | 값 |
|
||||
| :--- | :--- |
|
||||
| 문서 | 앱 프로파일 (Prism 4계층 중 **Layer 3 모듈의 앱 한정 보강**) |
|
||||
| 상위 | `RAG/design system_v0.1.1/` — `Design.md` 0.1.1 · `design.tokens.json` 0.1.1 · `design.foundations.md` · `design.medium.screen.md` · `design.components.md` · `webapp/module.webapp.md` 0.1.0 |
|
||||
| 브랜드 | `saman` (활성). 앱 전용 브랜드를 새로 만들지 않는다 |
|
||||
| 매체 | `screen.web` (로컬 데스크톱, 1280px 이상) |
|
||||
| 독자 | 화면을 구현하는 에이전트와 개발자(1차), 디자이너(2차) |
|
||||
| 짝 문서 | `PRD.md` (같은 폴더) — 이 문서의 규칙이 어느 화면에서 쓰이는지는 PRD 5장이 정한다 |
|
||||
|
||||
---
|
||||
|
||||
## 1. 위치와 우선순위
|
||||
|
||||
### 1.1 목적
|
||||
|
||||
PRD의 13개 화면을 **같은 부품과 같은 규칙으로** 만들도록 디자인을 시스템으로 묶는다. 이 문서는 Prism을 대체하지 않고, Prism이 정하지 않은 앱 고유의 부분(상태 어휘의 형태 부호, 조합 컴포넌트, 문안)만 더한다.
|
||||
|
||||
### 1.2 값 충돌 우선순위
|
||||
|
||||
Prism `Design.md` 1.4절을 그대로 따른다.
|
||||
|
||||
| 순위 | 출처 |
|
||||
| :-: | :--- |
|
||||
| 1 | 사용자의 명시적 지시(해당 화면 한정) |
|
||||
| 2 | `design.tokens.json` 정식값 |
|
||||
| 3 | Prism 각 `.md`의 표·수치 |
|
||||
| 4 | **이 문서** — Prism과 충돌하면 Prism이 이긴다 |
|
||||
|
||||
> 이 문서의 어느 규칙이 Prism과 충돌하면 이 문서를 고친다. 충돌을 해소하려고 Prism 값을 바꾸지 않는다.
|
||||
|
||||
### 1.3 기존 기준(R8)과의 관계
|
||||
|
||||
`context-migration/디자인지침_경로.md`의 R8(2026-10-12)은 조직 디자인 지침이 없던 때의 대체 수용 기준이다(맑은 고딕 14px, 흰 배경, 철근 팔레트 판정색). R8은 2026-10-15에 **대체되었다**(PRD 11.2절 UX1, `디자인지침_경로.md` 갱신). 두 기준이 같이 적용되는 기간을 두지 않는다.
|
||||
|
||||
R8에서 **유지하는** 조건은 세 가지이다.
|
||||
|
||||
| R8 조건 | 이 문서에서 |
|
||||
| :--- | :--- |
|
||||
| 색과 글자를 함께 쓴다(색만으로 구분 금지) | 6장으로 강화(형태 부호 추가) |
|
||||
| 1280px 폭에서 표 외 가로 스크롤 없음 | 4.2절 |
|
||||
| 화면 문구 한국어 | 9장 |
|
||||
|
||||
철근 팔레트(D32 적·D29 주황 등)는 **Rhino 모델 철근과 범례 전용**이다. 화면의 판정·상태 표시에는 쓰지 않는다.
|
||||
|
||||
---
|
||||
|
||||
## 2. 모듈 선언
|
||||
|
||||
```yaml
|
||||
module:
|
||||
id: pier-app
|
||||
name: T형 교각 모델링 앱
|
||||
base_module: webapp # RAG/design system_v0.1.1/webapp/module.webapp.md
|
||||
brand: saman
|
||||
medium: screen
|
||||
medium_variant: screen.web
|
||||
dual_medium: false
|
||||
format: desktop-first # lg(1240~1599) 기준 설계, md 이하는 지원하되 시험 제외
|
||||
min_width_px: 1280
|
||||
columns: 12
|
||||
type_set: compact
|
||||
patterns: [w1-shell, w2-dashboard, w3-form, w4-document, w5-list-detail]
|
||||
color_theme: [light, dark] # light 기본, dark는 토큰만 정의
|
||||
accessibility: WCAG 2.2 AA
|
||||
depends_on: { design_system: 0.1.1, webapp_module: 0.1.0 }
|
||||
```
|
||||
|
||||
화면별 패턴 배정(Prism webapp 10절 1단계)은 PRD 3.2절 일람의 '패턴' 열을 따른다.
|
||||
|
||||
---
|
||||
|
||||
## 3. 토큰
|
||||
|
||||
### 3.1 원칙
|
||||
|
||||
| ID | 규칙 |
|
||||
| :--- | :--- |
|
||||
| **TK-1** | 산출물 CSS는 **변수 정의부 밖에 HEX·px 리터럴을 두지 않는다** (Prism W1·W2). 보더·헤어라인도 stroke 토큰을 쓴다 |
|
||||
| **TK-2** | 3.2절 `prism.sys` 블록은 Prism `webapp` 3절의 정본을 **그대로** 옮긴 것이다. 값을 고치지 않는다 |
|
||||
| **TK-3** | 3.3절 `comp` 토큰은 `sys`·`ref`만 참조한다. 리터럴을 두지 않는다 |
|
||||
| **TK-4** | `ref` 토큰(원색)은 컴포넌트에서 직접 참조하지 않는다 |
|
||||
| **TK-5** | 철근 팔레트는 UI 토큰이 아니다. Rhino 범례 이미지로만 쓴다 |
|
||||
| **TK-6** | 새 토큰이 필요하면 `comp` 계층에 추가하고 이 문서의 버전을 올린다. `sys` 이하는 건드리지 않는다 |
|
||||
|
||||
### 3.2 sys 토큰 (Prism 정본, 수정 금지)
|
||||
|
||||
```css
|
||||
:root {
|
||||
/* color (light) */
|
||||
--prism-bg-canvas: #F4F3F0;
|
||||
--prism-bg-card: #FFFFFF;
|
||||
--prism-text-body: #474235;
|
||||
--prism-text-heading: #1F524B;
|
||||
--prism-text-subtle: #474235;
|
||||
--prism-text-accent: #D05C26; /* 대형 전용(24px 이상 또는 19px 이상 Bold) */
|
||||
--prism-border-default: #474235;
|
||||
--prism-border-strong: #1F524B;
|
||||
--prism-status-do: #005A4E; --prism-status-do-bg: #DCEAE6;
|
||||
--prism-status-dont: #8F2A11; --prism-status-dont-bg: #F6DFDA;
|
||||
--prism-status-caution: #6B4A00; --prism-status-caution-bg: #F5E7CC;
|
||||
--prism-status-tip: #0A4E86; --prism-status-tip-bg: #DDE8F3;
|
||||
|
||||
/* space (기본 8px = 0.5rem) */
|
||||
--prism-space-025: 0.125rem; --prism-space-050: 0.25rem; --prism-space-100: 0.5rem;
|
||||
--prism-space-150: 0.75rem; --prism-space-200: 1rem; --prism-space-300: 1.5rem;
|
||||
--prism-space-400: 2rem; --prism-space-600: 3rem; --prism-space-800: 4rem;
|
||||
|
||||
/* type */
|
||||
--prism-type-caption: 0.8125rem; --prism-lh-caption: 1.55;
|
||||
--prism-type-body-sm: 0.875rem; --prism-lh-body: 1.70;
|
||||
--prism-type-body: 1rem; --prism-type-body-lg: 1.125rem;
|
||||
--prism-type-title-sm: 1.25rem; --prism-lh-title: 1.50;
|
||||
--prism-type-title: 1.625rem; --prism-type-title-lg: 2rem;
|
||||
|
||||
/* radius · stroke · z · motion · focus · measure */
|
||||
--prism-radius-sm: 4px; --prism-radius-md: 8px; --prism-radius-lg: 12px; --prism-radius-pill: 9999px;
|
||||
--prism-stroke-hairline: 1px; --prism-stroke-regular: 2px; --prism-stroke-bold: 3px;
|
||||
--prism-z-raised: 100; --prism-z-sticky: 200; --prism-z-dropdown: 300; --prism-z-scrim: 400;
|
||||
--prism-z-modal: 500; --prism-z-popover: 600; --prism-z-toast: 700; --prism-z-tooltip: 800;
|
||||
--prism-scrim: rgba(0, 0, 0, 0.32);
|
||||
--prism-motion-fast: 100ms; --prism-motion-moderate: 200ms; --prism-motion-slow: 300ms;
|
||||
--prism-ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--prism-focus-ring: 3px; --prism-focus-offset: 2px;
|
||||
--prism-measure-max: 38em;
|
||||
}
|
||||
:root[data-theme="dark"] {
|
||||
--prism-bg-canvas: #111111; --prism-bg-card: #111111;
|
||||
--prism-text-body: #F4F3F0; --prism-text-heading: #F4F3F0; /* 다크에서 그린 텍스트 금지 */
|
||||
--prism-text-subtle: #D3D3D3; --prism-text-accent: #D05C26;
|
||||
--prism-border-default: #D3D3D3; --prism-border-strong: #F4F3F0;
|
||||
--prism-status-do: #DCEAE6; --prism-status-do-bg: #005A4E;
|
||||
--prism-status-dont: #F6DFDA; --prism-status-dont-bg: #8F2A11;
|
||||
--prism-status-caution: #F5E7CC; --prism-status-caution-bg: #6B4A00;
|
||||
--prism-status-tip: #DDE8F3; --prism-status-tip-bg: #0A4E86;
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root:not([data-theme="light"]) { /* data-theme dark 블록과 같은 값 세트를 적용 */ }
|
||||
}
|
||||
```
|
||||
|
||||
Prism 토큰 파일에 있는 `--prism-dv-*`(데이터 시각화 6색), `--prism-type-display*`, `--prism-ease-enter/exit`는 이 앱에서 쓰지 않아 옮기지 않는다. 쓰게 되면 정본에서 그대로 옮긴다.
|
||||
|
||||
### 3.3 comp 토큰 (앱 전용, 이 문서가 정의)
|
||||
|
||||
모두 `sys`를 참조한다. 라이트·다크 전환은 `sys` 값이 바뀌므로 `comp`는 두 번 정의하지 않는다.
|
||||
|
||||
```css
|
||||
:root {
|
||||
/* 표면 */
|
||||
--prism-comp-surface-page: var(--prism-bg-canvas);
|
||||
--prism-comp-surface-card: var(--prism-bg-card);
|
||||
--prism-comp-surface-sunken: var(--prism-bg-canvas);
|
||||
--prism-comp-line: var(--prism-border-default);
|
||||
--prism-comp-line-strong: var(--prism-border-strong);
|
||||
|
||||
/* 상태색 4쌍의 앱 의미 */
|
||||
--prism-comp-state-good-fg: var(--prism-status-do); --prism-comp-state-good-bg: var(--prism-status-do-bg);
|
||||
--prism-comp-state-bad-fg: var(--prism-status-dont); --prism-comp-state-bad-bg: var(--prism-status-dont-bg);
|
||||
--prism-comp-state-warn-fg: var(--prism-status-caution); --prism-comp-state-warn-bg: var(--prism-status-caution-bg);
|
||||
--prism-comp-state-info-fg: var(--prism-status-tip); --prism-comp-state-info-bg: var(--prism-status-tip-bg);
|
||||
|
||||
/* 배지 */
|
||||
--prism-comp-badge-pad-y: var(--prism-space-025);
|
||||
--prism-comp-badge-pad-x: var(--prism-space-100);
|
||||
--prism-comp-badge-radius: var(--prism-radius-sm);
|
||||
--prism-comp-badge-font: var(--prism-type-caption);
|
||||
--prism-comp-badge-line-solid: var(--prism-stroke-regular);
|
||||
--prism-comp-badge-line-bold: var(--prism-stroke-bold);
|
||||
|
||||
/* 표 */
|
||||
--prism-comp-table-cell-pad-y: var(--prism-space-100);
|
||||
--prism-comp-table-cell-pad-x: var(--prism-space-150);
|
||||
--prism-comp-table-font: var(--prism-type-body-sm);
|
||||
--prism-comp-table-head-bg: var(--prism-bg-canvas);
|
||||
--prism-comp-table-rule: var(--prism-stroke-hairline);
|
||||
|
||||
/* 레이아웃 */
|
||||
--prism-comp-rail-width: 15rem; /* 240px */
|
||||
--prism-comp-header-height: 3.5rem; /* 56px */
|
||||
--prism-comp-hit-min: 2.75rem; /* 44px */
|
||||
|
||||
/* 도면 이미지 */
|
||||
--prism-comp-drawing-frame-line: var(--prism-border-default);
|
||||
}
|
||||
```
|
||||
|
||||
### 3.4 상태 시프트 토큰 (공백 — 산출 필요)
|
||||
|
||||
Prism은 hover ±4·active ±8·selected ±12의 **GRADE 시프트**를 정하지만(screen 6.2절), 시프트된 HEX 표는 토큰 파일에 없다. 이 문서는 값을 지어내지 않는다.
|
||||
|
||||
| 처리 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 지금 | hover는 보강일 뿐이므로(HV-3) 색 변화 없이도 모든 기능이 성립한다. 시안 단계에서는 hover에 밑줄 또는 보더 굵기 변화만 쓴다 |
|
||||
| 구현 전 | `design.foundations.md` 2장의 GRADE 산출식으로 green·brown·white 면의 ±4·±8·±12 HEX를 산출해 `comp` 토큰(`--prism-comp-*-hover/-active/-selected`)으로 추가한다 |
|
||||
| 책임 | 산출은 Prism 담당자 승인 사항(공백 목록 10장 G7) |
|
||||
|
||||
---
|
||||
|
||||
## 4. 레이아웃
|
||||
|
||||
### 4.1 브레이크포인트
|
||||
|
||||
Prism webapp 2절을 따른다. 임의 브레이크포인트를 두지 않는다(WA-1).
|
||||
|
||||
| BP | 범위(px) | 컬럼 | 마진 | 거터 | 이 앱에서 |
|
||||
| :--- | :--- | :-: | ---: | ---: | :--- |
|
||||
| `lg` | 1240–1599 | 12 | 32 | 24 | **설계 기준.** 1280px에서 모든 화면이 성립해야 한다 |
|
||||
| `xl` | 1600– | 12 | 24 | 24 | 컨테이너 1440 고정 |
|
||||
| `md` | 904–1239 | 8 | 32 | 24 | 지원하되 시험 제외. 레일은 상단으로 접힌다 |
|
||||
| `sm` `xs` | 0–903 | 8 · 4 | 24 · 16 | 16 | 비대상. 가로 스크롤 없이 단일 열로만 표시 |
|
||||
|
||||
### 4.2 1280px 규칙
|
||||
|
||||
| ID | 규칙 |
|
||||
| :--- | :--- |
|
||||
| **LY-1** | 1280px 폭에서 **표 외** 가로 스크롤이 없다 |
|
||||
| **LY-2** | 표는 가로 스크롤을 허용한다(MS-3 예외). 스크롤 시 첫 열(묶음 이름)과 헤더를 고정한다 |
|
||||
| **LY-3** | 연속 문장 블록은 `max-width: var(--prism-measure-max)`. 표·도면 이미지·근거 표는 제외 |
|
||||
| **LY-4** | 최상위 영역만 그리드에 맞춘다. 영역 내부는 간격 토큰으로 배치한다 (WA-4) |
|
||||
|
||||
### 4.3 앱 셸 (W1)
|
||||
|
||||
```
|
||||
┌ header (sticky, comp-header-height) ──────────────────────────────────────────┐
|
||||
│ 서비스명 │ 화면 ID · 교각 │ │ 저장 시각 · 환경(로컬) │ 테마 │
|
||||
├ rail (comp-rail-width) ┬ main ────────────────────────────────────────────────┤
|
||||
│ 교각 목록 │ 화면 제목 (h1) │
|
||||
│ ─ 교각 이름 │ 결론 영역 (요약 띠 · 판정) │
|
||||
│ 1 도면 │ 본문 영역 (표 · 비교 · 폼) │
|
||||
│ 2 입력 묶음 │ │
|
||||
│ 3 게이트 │ │
|
||||
│ 4 보고서 │ │
|
||||
└─────────────────────────┴──────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
| 요소 | 규칙 |
|
||||
| :--- | :--- |
|
||||
| header | 메타 4슬롯(화면 ID·권한·갱신 시각·환경)을 쓴다. 권한 슬롯은 로컬 앱에서 "담당자"로 고정 표시한다 |
|
||||
| rail | `stepper` 컴포넌트(단계 3~7개 규칙, SP-2)로 구현한다. 완료·현재·미완을 형태로 구분한다(SP-3) |
|
||||
| main | 첫 영역이 결론이다(PD-1). 결론 영역은 viewport당 1개 |
|
||||
| skip link | 모든 화면 첫 요소가 "본문 바로가기"다 |
|
||||
|
||||
### 4.4 패턴 적용
|
||||
|
||||
| 패턴 | 화면 | 이 앱에서의 구체화 |
|
||||
| :--- | :--- | :--- |
|
||||
| W1 앱 셸 | 전 화면 | 4.3절 |
|
||||
| W2 대시보드 | S03, S11 | 카드 그리드. 존당 stat 3개 이하. 1280px에서 3열 |
|
||||
| W3 폼 | S02, S06, S09 검색 | 1열 수직, 다열 폼 금지, 본문 폭 38em, 주 버튼 1개. 단 `S06`의 값 편집창(JSON)은 38em 예외를 둔다(코드 영역) |
|
||||
| W4 문서 | S12, S13 | 좌측 목차 4col + 본문 8col, 본문 38em |
|
||||
| W5 목록-상세 | S01, S04, S05, S07 | 목록이 7열 이상의 표이면 분할 뷰를 쓰지 않고 **전폭 표 + 별도 상세 화면**으로 나눈다. S05만 `4:8` 분할 |
|
||||
|
||||
---
|
||||
|
||||
## 5. 타이포그래피
|
||||
|
||||
### 5.1 서체
|
||||
|
||||
| 슬롯 | 값 |
|
||||
| :--- | :--- |
|
||||
| 패밀리 | Pretendard. 폴백 `-apple-system, BlinkMacSystemFont, "Noto Sans KR", "Apple SD Gothic Neo", "Malgun Gothic", sans-serif` |
|
||||
| 웨이트 | 400 · 500 · 700 |
|
||||
| 숫자 | `font-variant-numeric: tabular-nums` 전 화면 적용 (표의 수치 열은 필수) |
|
||||
| 내장 | `web/static/fonts/PretendardVariable.woff2`(OFL, 가변 폰트)를 `@font-face`로 불러온다 (PRD UX3 결정). 파일이 없으면 폴백 맑은 고딕으로 렌더되며, 이 경우에도 5.2절 크기는 유지한다 |
|
||||
|
||||
`html { font-size: ... }` 선언을 금지한다(CSS-1).
|
||||
|
||||
### 5.2 크기 사용표
|
||||
|
||||
| 용도 | 토큰 | 웨이트 | 비고 |
|
||||
| :--- | :--- | :-: | :--- |
|
||||
| 화면 제목(h1) | `type-title` | 700 | 한 화면에 1개. 20자 이내 |
|
||||
| 영역 제목(h2) | `type-title-sm` | 500 | 규정문체 명사형 |
|
||||
| 소영역 제목(h3) | `type-body-lg` | 700 | |
|
||||
| 본문 | `type-body` | 400 | 38em 이내 |
|
||||
| **표 셀** | `type-body-sm` | 400 | 표 최소 13px (TB 규정) |
|
||||
| 배지·캡션·출처 | `type-caption` | 500 | |
|
||||
| 큰 숫자(요약 띠) | `type-title` | 700 | 숫자만 키운다 |
|
||||
|
||||
### 5.3 기술 표기 (해시·핸들·좌표·키)
|
||||
|
||||
해시 앞 16자, DXF 핸들, 좌표, JSON 키는 **본문과 구분**해야 한다. Prism에는 등폭 서체가 없다(공백 G3). 임시 규칙은 다음과 같다.
|
||||
|
||||
| 규칙 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 형태 | 보더 1px(hairline)이 있는 인라인 칩. 폰트는 본문과 같고 `tabular-nums` |
|
||||
| 복사 | 칩을 누르면 복사한다. 키보드로 접근 가능하다 |
|
||||
| 줄바꿈 | 칩 내부에서 줄바꿈하지 않는다. 길면 앞 16자만 보이고 전체는 `title` 대신 도움말로 연다 |
|
||||
| 금지 | 등폭 서체 임의 지정 금지(토큰 외 서체). 승인 후 `sys` 토큰으로 편입 |
|
||||
|
||||
---
|
||||
|
||||
## 6. 상태 표시 체계
|
||||
|
||||
PRD 4.2절의 어휘를 **글자 + 형태 + 색** 세 신호로 부호화한다. 한 열에서 같은 신호를 두 상태가 공유하지 않는다.
|
||||
|
||||
### 6.1 형태 신호
|
||||
|
||||
| 신호 | 의미 |
|
||||
| :--- | :--- |
|
||||
| 선행 마커 `●` | 정상·완료·충족 |
|
||||
| 선행 마커 `▲` | 주의·확인 필요 |
|
||||
| 선행 마커 `■` | 실패·불일치 |
|
||||
| 선행 마커 `◆` | 변경됨·재실행 필요 |
|
||||
| 선행 마커 `◇` | 근거 없음(빈 마름모) |
|
||||
| 보더 실선 2px | 확정된 상태 |
|
||||
| 보더 점선 2px | 근거·확정이 없는 상태 |
|
||||
| 보더 굵게 3px | 실패 |
|
||||
|
||||
마커는 CSS로 그리는 도형이며 아이콘이 아니다(PRD UX4: 2026-10-15 승인). 이모지와 아이콘 폰트를 쓰지 않는다 (IC-3).
|
||||
|
||||
### 6.2 앱 확인
|
||||
|
||||
| 값 | 글자 | 마커 | 보더 | 전경·배경 |
|
||||
| :--- | :--- | :-: | :--- | :--- |
|
||||
| 일치 | 일치 | ● | 실선 2px | good-fg / good-bg |
|
||||
| 주의 | 주의 | ▲ | 실선 2px | warn-fg / warn-bg |
|
||||
| 불일치 | 불일치 | ■ | 굵게 3px | bad-fg / bad-bg |
|
||||
| 근거 없음 | 근거 없음 | ◇ | 점선 2px | text-body / 투명 |
|
||||
| 해당 없음 | `—` | — | — | text-body (배지 아님) |
|
||||
| 확인 안 함 | [확인 실행] 버튼 | — | — | (배지 아님) |
|
||||
|
||||
### 6.3 사람 확정
|
||||
|
||||
| 값 | 글자 | 마커 | 보더 | 전경·배경 |
|
||||
| :--- | :--- | :-: | :--- | :--- |
|
||||
| 확정 | 확정 | ● | 실선 2px | `surface-emphasis`: green 면 + white 글자 |
|
||||
| 미확정 | 미확정 | — | 점선 2px | text-body / 투명 |
|
||||
| 변경됨 | 변경됨 | ◆ | 실선 2px | warn-fg / warn-bg |
|
||||
|
||||
앱 확인(6.2)이 상태색 면을 쓰고 사람 확정(6.3)이 green 면을 쓰므로, 한 행 안에서 두 배지가 **색·형태 모두 다르다**.
|
||||
|
||||
### 6.4 변수 등급
|
||||
|
||||
| 값 | 글자 | 보더 | 면 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| V1 | V1 값 | 실선 2px | 없음 |
|
||||
| V2 | V2 목록 | 실선 2px | 없음 |
|
||||
| V3 | V3 생성 | 점선 2px | 없음 |
|
||||
| F | F 고정 | 실선 2px | green 면 + white 글자 |
|
||||
|
||||
편집 가능(V1·V2) → 스크립트 필요(V3, 점선) → 편집 불가(F, 면 채움)의 순서로 시각 무게가 커진다.
|
||||
|
||||
### 6.5 신뢰 등급
|
||||
|
||||
| 값 | 글자 | 보더 |
|
||||
| :--- | :--- | :--- |
|
||||
| A | 등급 A | 실선 2px |
|
||||
| B | 등급 B | 실선 2px + 마커 ▲ |
|
||||
| C | 등급 C | 점선 2px |
|
||||
| 없음 | 후보 구역에 행으로 나오지 않는다. '근거 없음' 목록에만 나온다 | — |
|
||||
|
||||
### 6.6 게이트 판정
|
||||
|
||||
| 값 | 글자 | 마커 | 보더 | 전경·배경 |
|
||||
| :--- | :--- | :-: | :--- | :--- |
|
||||
| PASS | PASS | ● | 실선 2px | good-fg / good-bg |
|
||||
| FAIL | FAIL | ■ | 굵게 3px | bad-fg / bad-bg |
|
||||
| 계획 FAIL | 계획 FAIL | ▲ | 실선 2px | warn-fg / warn-bg |
|
||||
| 재실행 필요 | 재실행 | ◆ | 실선 2px | info-fg / info-bg |
|
||||
|
||||
### 6.7 규칙
|
||||
|
||||
| ID | 규칙 |
|
||||
| :--- | :--- |
|
||||
| **ST-1** | 배지 텍스트는 6자 이내(BD-3). 문장을 넣지 않는다 |
|
||||
| **ST-2** | 한 열의 배지 종류는 4종 이내(BD-2). 5종 이상이 필요하면 열을 나눈다 |
|
||||
| **ST-3** | 색을 지우고(그레이스케일) 읽어도 모든 상태가 구분되어야 한다 |
|
||||
| **ST-4** | 배지 색은 악센트 경제에 세지 않는다(BD-4). 그러나 **orange는 상태에 쓰지 않는다** |
|
||||
| **ST-5** | 다크 테마에서 상태색 쌍은 `sys` 정의대로 전경·배경이 반전된다. `comp`가 따로 정의하지 않는다 |
|
||||
| **ST-6** | 배지 안에 `aria-label`로 "앱 확인: 일치"처럼 열 이름을 포함해 낭독하게 한다 |
|
||||
|
||||
---
|
||||
|
||||
## 7. 컴포넌트
|
||||
|
||||
### 7.1 Prism 컴포넌트 사용표
|
||||
|
||||
Prism이 정한 20종 중 이 앱이 쓰는 것과 쓰는 곳이다. 카탈로그에 있는 변형만 쓴다.
|
||||
|
||||
| 컴포넌트 | 변형 | 쓰는 곳 | 비고 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `header` | 1 | 전 화면 셸 | 메타 4슬롯 |
|
||||
| `eyebrow` | 2 | 화면 제목 위 단계 표기("2단계") | |
|
||||
| `rule` | 1 | 영역 구분 | |
|
||||
| `card` | 4 | S03 단계 카드, S05 값 비교 | |
|
||||
| `table` | `base` `compact` | S01, S04, S05, S07, S11 | S04는 `compact` + sticky |
|
||||
| `stat` | 1 | S03·S04 요약 띠의 숫자 | 존당 3개 이하 |
|
||||
| `specsheet` | 1 | S05 결론(묶음 메타), S03 도면 목록 | |
|
||||
| `directive` | `caution` `tip` 등 3 | 형식 불일치 경고, 원본값 경고, 한계 문장 | |
|
||||
| `badge` | 4 | 6장의 모든 상태 | |
|
||||
| `scope` | 1 | 각 화면 최상단 "적용 조건/제외 조건" | 해당 없음 즉시 이탈 |
|
||||
| `toc` | 1 | S13 좌측 목차 | |
|
||||
| `stepper` | 1 | 레일의 1~4단계 | |
|
||||
| `xref` | 1 | 화면 간 링크(S05 → S06 등) | 방향어 금지 |
|
||||
| `mediaframe` | 1 | S08 도면 이미지 | 캡션 필수 |
|
||||
| `button` | `primary` `secondary` `quiet` `danger` | 전 화면 | 화면당 primary 1개 |
|
||||
| `input` | 1 | 이름·확정자·사유·검색 | 레이블 필수 |
|
||||
| `modal` | 1 | S08, S10 | 포커스 트랩·Esc |
|
||||
| `toast` | 1 | 보조 알림 | 단독 전달 금지 |
|
||||
| `disclosure` | 1 | 참고 묶음 접기, 제외 목록 | 인쇄 시 전개 |
|
||||
| `chartframe` | — | **쓰지 않는다** | |
|
||||
|
||||
`hero`, `footer`는 미선별이며 이 앱에서 쓰지 않는다.
|
||||
|
||||
### 7.2 조합 컴포넌트 (이 문서가 정의)
|
||||
|
||||
Prism 카탈로그의 컴포넌트를 **조합·제약**해 만든 앱 전용 구성이다. 새 원시 컴포넌트가 아니므로 카탈로그 외 0건 원칙(webapp A-검증)에 어긋나지 않는다. 단, 조합이 반복되므로 이름을 붙여 일관성을 보장한다.
|
||||
|
||||
#### C-1 요약 띠 (`summary-strip`)
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 구성 | `stat`(숫자 3개 이하의 강조) + `badge`(상태별 개수) + 갱신 시각 캡션 |
|
||||
| 해부 | 결론 문장 → 상태별 개수 → 시각·버전 |
|
||||
| 규칙 | 각 개수는 필터 버튼이다(`button quiet`). 합계는 표와 같은 집계를 쓴다(PRD 수용 기준). 숫자는 등폭 |
|
||||
| 접근성 | 전체를 `role="group"` + 요약 문장 `aria-label`. 개수 변경은 `aria-live="polite"` |
|
||||
| 쓰는 곳 | S03, S04, S07 |
|
||||
|
||||
#### C-2 묶음 표 (`section-table`)
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 구성 | `table compact` + sticky 헤더 + 첫 열 고정 + 행 선택 |
|
||||
| 열 | 묶음 · 변수 등급 · 값 출처 · 앱 확인 · 사람 확정 · 확인 |
|
||||
| 규칙 | 값 출처 열은 배지가 아닌 글자다(5종, ST-2). 단 '원본값'만 `badge marked`(▲ warn)를 단다. 정렬 기본값 불일치 → 근거 없음 → 주의 → 일치. 빈 셀은 `—` (TB-4) |
|
||||
| 행 상태 | hover(보강), selected(GRADE 시프트), focus(링). 행 전체가 링크가 아니라 **묶음 이름만** 링크다 |
|
||||
| 접근성 | `caption` "입력 묶음", `th scope="col"`, 정렬 가능 열은 `aria-sort` |
|
||||
| 쓰는 곳 | S04 |
|
||||
|
||||
#### C-3 근거 행 (`evidence-row`)
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 구성 | 검사 ID(C1~C8) · 검사 이름 · 결과 배지 · 근거 문장 · 도면 위치 칩 · [도면 보기] |
|
||||
| 규칙 | 근거 문장은 40어절 이내, **비교한 두 값과 출처를 모두 쓴다**. 문장 끝에 독립성(낮음)이 있으면 괄호로 쓴다. 해당 없는 검사는 한 줄로 접는다 |
|
||||
| 한계 문장 | 표 하단에 고정 `directive tip`: "일치는 후보를 만든 규칙과 값이 같다는 뜻이다. 도면이 맞다는 판정이 아니다." |
|
||||
| 쓰는 곳 | S05, S10 근거표 |
|
||||
|
||||
#### C-4 값 비교 (`diff-row`)
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 구성 | 항목 이름 · 현재 값 · 비교 값(후보/원본) · 차이 표시 |
|
||||
| 규칙 | 차이는 색이 아닌 **글자(`다름`) + 마커 `▲`**로 표시한다. 같은 항목은 기본으로 접는다. 수치는 우측 정렬·등폭, 단위는 열 헤더에 1회(TB-6) |
|
||||
| 쓰는 곳 | S05, S07 |
|
||||
|
||||
#### C-5 확정 폼 (`confirm-form`)
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 구성 | `input`(확정자) + `input`(사유, 조건부 필수) + `button primary` |
|
||||
| 규칙 | 필수 표시는 `*`가 아니라 글자 "필수"(IN-4). 조건이 모자라도 버튼은 활성이고 클릭 시 오류 메시지를 낸다(BT-6). 오류는 무엇이·왜·어떻게 + 색·기호·텍스트 3중(IN-2·IN-3) |
|
||||
| 사유 필수 조건 | 앱 확인이 주의·불일치·근거 없음이거나 F 항목 변경일 때 |
|
||||
| 쓰는 곳 | S05, S06(F 변경 사유), S10(확정자만) |
|
||||
|
||||
#### C-6 일괄 확정 대화상자 (`bulk-confirm-dialog`)
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 구성 | `modal` + 결론 문장 + 근거표(스크롤 영역) + `disclosure`(제외 묶음) + `confirm-form` |
|
||||
| 규칙 | 근거표 스크롤 끝 도달 여부를 기록하고, 도달 전 [확정]은 오류 메시지를 낸다(비활성 아님). 포커스 트랩·Esc 닫기·배경 스크롤 잠금 (MD-1~5). 모달 안에 모달을 열지 않는다. 제외 묶음 링크는 모달을 닫고 S05로 이동한다 |
|
||||
| 쓰는 곳 | S10 |
|
||||
|
||||
#### C-7 도면 뷰 (`drawing-view`)
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 구성 | `mediaframe` + 캡션(도면·뷰·좌표·핸들 칩) + 확대·축소·이동 버튼 |
|
||||
| 규칙 | 이미지 대체 텍스트는 대상 설명, 캡션은 필수. 대상 위치 표시는 **링 + 십자선**(색 단독 금지). 이동은 방향키 지원. 새 윈도우 이미지 생성은 `dxftools.render`와 같은 결과를 쓴다 |
|
||||
| 쓰는 곳 | S08, S05(축소 보기) |
|
||||
|
||||
#### C-8 경고 띠 (`state-banner`)
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 구성 | `directive` (`caution`) + 한 문장 + 조치 링크 |
|
||||
| 종류 | 형식 불일치(닫을 수 없음) · 원본값 포함 · 값 변경됨(재확인 필요) · 앱 확인 규칙 버전 변경 |
|
||||
| 규칙 | 한 viewport에 2개를 넘기지 않는다. 겹치면 가장 심각한 한 개 + "외 N건" |
|
||||
| 쓰는 곳 | S03, S04, S05 |
|
||||
|
||||
#### C-9 진행 표시 (`run-progress`)
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 구성 | 단계 문장("11/27 묶음 확인 중") + 막대 + [중단] |
|
||||
| 규칙 | 색이 아닌 **길이와 숫자**로 읽는다. `role="progressbar"` + `aria-valuenow`. 완료는 토스트가 아니라 결과 영역에 남긴다. 모션은 `transform`만 쓴다 |
|
||||
| 쓰는 곳 | S04 전체 확인, S11 게이트 실행 |
|
||||
|
||||
### 7.3 버튼 배치
|
||||
|
||||
| 규칙 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 화면당 `primary` 1개 | 다음에 할 일을 가리키는 한 개. S04는 [일치분 확정], S05는 [확정], S10은 [확정] |
|
||||
| 위험 동작 | `danger` + 확인 절차. 교각 삭제, 반려, 형식 변경 확정 |
|
||||
| 순서 | 취소·보조 → 주 버튼(우측 끝). 키보드 순서도 같다 |
|
||||
| 레이블 | 동사로 시작, 8자 이내, 결과를 말한다 (9.2절 표) |
|
||||
| 면 | `primary`는 `surface-emphasis`(green 면 + white 글자), `secondary`는 보더만, `quiet`는 보더 없는 텍스트, `danger`는 `bad` 상태색 보더 + 확인 절차. hover·active의 면 변화는 3.4절 산출 뒤에 적용한다 |
|
||||
|
||||
---
|
||||
|
||||
## 8. 인터랙션과 접근성
|
||||
|
||||
### 8.1 상태와 포커스
|
||||
|
||||
| 항목 | 규칙 |
|
||||
| :--- | :--- |
|
||||
| 상태 | default · hover(보강) · focus(링만) · active · selected · disabled(저강조 토큰, 불투명도 금지) · loading(진행 표시, 색 유지) |
|
||||
| 포커스 링 | 3px 이중 링 + 오프셋 2px, `:focus-visible`. 대체 없는 `outline: none` 금지 (FC-1·FC-2) |
|
||||
| disabled | 가능하면 활성 + 오류 메시지. 비활성은 권한·물리적 불가능일 때만 |
|
||||
| hover | `@media (hover: hover)`에 격리. hover 없이 전 기능이 성립해야 한다 |
|
||||
| 히트 영역 | 44px 이상, 인접 간격 8px 이상 |
|
||||
|
||||
### 8.2 키보드
|
||||
|
||||
| 화면 | 필수 동작 |
|
||||
| :--- | :--- |
|
||||
| S04 | Tab으로 필터 → 도구 줄 → 표(행의 링크·[확인 실행]) 순. 열 머리 Enter로 정렬. 요약 띠 필터는 Enter·Space |
|
||||
| S05 | 좌측 목록은 위/아래 방향키 이동, Enter로 묶음 전환. [이전][다음] 단축 버튼 제공 |
|
||||
| S08 | 방향키 이동, `+`/`-` 확대·축소, Esc 닫기 |
|
||||
| S10 | 포커스 트랩. 근거표는 방향키·PageDown으로 끝까지 내릴 수 있다 |
|
||||
|
||||
### 8.3 오류 메시지
|
||||
|
||||
3요소(무엇이·왜·어떻게)를 한 문장군으로 쓴다. 색·기호·텍스트를 함께 쓴다.
|
||||
|
||||
| 상황 | 문구 예시(60자 이내) |
|
||||
| :--- | :--- |
|
||||
| 확정자 없음 | "확정자 이름이 비어 있다. 확정은 사람의 기록이다. 이름을 입력한다" |
|
||||
| 근거표 미열람 | "근거표를 읽지 않았다. 일치 묶음의 근거를 읽어야 확정한다. 근거표를 끝까지 내린다" |
|
||||
| 사유 없음 | "사유가 비어 있다. 주의 묶음은 사유가 있어야 확정된다. 사유를 입력한다" |
|
||||
| 도면 없음 | "도면이 없다. 앱 확인에 쓸 색인이 없다. 1단계에서 도면을 올린다" |
|
||||
|
||||
### 8.4 모션
|
||||
|
||||
`transform`·`opacity`만 애니메이션한다. `prefers-reduced-motion`에서는 모션을 제거하고 상태 변화는 즉시 반영한다 (MT-3·RM-1). 진행 표시는 정지 상태에서도 숫자로 읽혀야 한다.
|
||||
|
||||
---
|
||||
|
||||
## 9. 문안 규정
|
||||
|
||||
### 9.1 보이스
|
||||
|
||||
Prism `saman` 인스턴스를 따른다.
|
||||
|
||||
| 속성 | 규칙 | 금지 예 |
|
||||
| :--- | :--- | :--- |
|
||||
| 자세 | 단정적·3인칭 | "~인 것 같습니다" → "~이다" 또는 `[추론]` |
|
||||
| 거리 | 전문가 대 전문가 | "우리 모두", "여러분" |
|
||||
| 격 | 규정문체(평서 종결). 조작 안내도 같다 | "꼭 확인해 주세요!" → "확인한다" |
|
||||
| 절제 | 과장·감탄·마케팅 어휘 금지 | "혁신적", "간편하게" |
|
||||
|
||||
어미는 4종만 쓴다: `~한다`(의무) · `~할 수 있다`(재량) · `~를 권장한다`(권고) · `~하지 않는다`(금지).
|
||||
|
||||
### 9.2 버튼 레이블 (동사로 시작, 8자 이내)
|
||||
|
||||
| 동작 | 레이블 | 근거 |
|
||||
| :--- | :--- | :--- |
|
||||
| 앱 확인 한 묶음 | 확인 실행 | 검사한다 ≠ 확정한다 |
|
||||
| 앱 확인 전체 | 전체 확인 | |
|
||||
| 일치 묶음 확정 | 일치분 확정 | "확정"은 사람의 기록임을 명시. 대상을 앞에 둔다 |
|
||||
| 확정 | 확정 | |
|
||||
| 후보 반영 | 후보 반영 | 반영 = 기존 문서에 편입(동사 판별표) |
|
||||
| 값 저장 | 저장 | |
|
||||
| 도면 확대 | 도면 보기 | |
|
||||
| 교각 만들기 | 교각 만들기 | |
|
||||
| 삭제 | 삭제 | `danger` |
|
||||
|
||||
'변경'과 '수정'을 구분한다: 승인 효력에 영향이 있으면 **변경**, 오기 정정이면 **수정**(동사 판별표). 형식 불일치 확정은 "변경"이다.
|
||||
|
||||
### 9.3 상태 문구
|
||||
|
||||
| 대상 | 문구 |
|
||||
| :--- | :--- |
|
||||
| 일치 근거 | "<항목>은 <출처>의 <대상>과 같다" |
|
||||
| 주의 근거 | "<항목>이 <기준>과 <차이>만큼 다르다. 허용 범위 안이다" |
|
||||
| 불일치 근거 | "<항목>이 <출처>의 <대상>과 다르다 (현재 <값>, 도면 <값>)" |
|
||||
| 근거 없음 | "<항목>의 출처를 찾지 못했다. 사람이 도면에서 직접 확인한다" |
|
||||
| 원본값 | "템플릿 원본과 같다. 새 도면 근거가 없다" |
|
||||
| 값 변경됨 | "값이 바뀌었다. 이전 확인과 확정이 무효가 되었다" |
|
||||
|
||||
### 9.4 금지 목록
|
||||
|
||||
| # | 금지 | 근거 |
|
||||
| :-: | :--- | :--- |
|
||||
| 1 | 이모지 | IC-3 |
|
||||
| 2 | 순백 전면 배경 (캔버스는 sand, 카드만 white) | 브랜드 금지 |
|
||||
| 3 | 오렌지 본문 텍스트, 오렌지 상태 표시 | 브랜드 금지, ST-4 |
|
||||
| 4 | 다크 배경 위 그린 텍스트 | CSS-4 |
|
||||
| 5 | 악센트 3개 이상(viewport당) | 악센트 경제 |
|
||||
| 6 | 그라디언트 배경, 장식 이미지 | 브랜드 금지 |
|
||||
| 7 | 방향어("위의 표", "아래 버튼", "앞서") | 5.7. 절 번호·항목 이름으로 참조한다 |
|
||||
| 8 | "100% 자동", "완벽", "간편" 등 과장 표현 | 절제 |
|
||||
| 9 | 앱이 "확정했다"고 쓰는 문장 | PP-1 |
|
||||
| 10 | 상태를 색만으로 알리는 표현 | PP-4 |
|
||||
|
||||
---
|
||||
|
||||
## 10. 디자인 시스템의 공백과 제안
|
||||
|
||||
PRD 구현에 필요하지만 Prism에 없는 요소이다. 승인 전에는 **조합 컴포넌트(7.2절)와 임시 규칙**으로 대신한다. 새 아이콘과 새 서체는 Prism 거버넌스(제안 → 승인 대기 → 등재)를 따른다.
|
||||
|
||||
| ID | 공백 | 쓰는 곳 | 임시 처리 | 제안 |
|
||||
| :-: | :--- | :--- | :--- | :--- |
|
||||
| G1 | 라디오·체크박스·셀렉트 (`input` 변형) | S02 6문항, 필터, S07 반영 선택 | 네이티브 요소 + 토큰 보더·포커스 링 | `input` 변형 3종 신설 |
|
||||
| G2 | 파일 선택 | 도면 올리기 | 네이티브 `input[type=file]` + 레이블·도움말 | `input` 변형 |
|
||||
| G3 | 등폭 서체 | 해시·핸들·좌표·JSON | 5.3절 칩 | 등폭 패밀리를 `ref.type`에 편입 |
|
||||
| G4 | 진행 표시 | 앱 확인, 게이트 실행 | C-9 | `progress` 컴포넌트 신설 |
|
||||
| G5 | 행 선택·정렬이 있는 표 | S04, S07 | C-2 | `table` 변형 `selectable` |
|
||||
| G6 | 확대 뷰어 | S08 | C-7 | `mediaframe` 변형 `zoomable` |
|
||||
| G7 | 상태 시프트 HEX | 전 상호작용 | 3.4절 | foundations 산출표 등재 |
|
||||
| G8 | 상태 마커 도형(●▲■◆◇) | 6장 | CSS 도형 | 아이콘 거버넌스 승인 (PRD UX4) |
|
||||
| G9 | 코드·로그 블록 | S11 로그, S06 편집창 | 본문 서체 + 보더 | `codeblock` 신설 |
|
||||
| G10 | 탭 | (사용하지 않음) | 별도 화면으로 분리 | 필요 시 제안 |
|
||||
|
||||
---
|
||||
|
||||
## 11. 적용 점검표
|
||||
|
||||
PRD 수용 기준 7번의 근거이다. 시안·구현 모두 전항을 확인한다.
|
||||
|
||||
### 11.1 자동
|
||||
|
||||
| # | 항목 | 기준 |
|
||||
| :-: | :--- | :--- |
|
||||
| A1 | 색·치수 리터럴 | 변수 정의부 밖 0건 |
|
||||
| A2 | root font-size 고정 | 0건 |
|
||||
| A3 | `outline: none` (대체 없음) | 0건 |
|
||||
| A4 | z-index, tabindex | 토큰 외 0건 / 양수 0건 |
|
||||
| A5 | 그리드 정합 | 전 BP 잔차 0 |
|
||||
| A6 | axe 대비·이름·alt | 위반 0건 |
|
||||
| A7 | 헤딩 레벨 건너뜀 | 0건 |
|
||||
| A8 | `prefers-reduced-motion` | 구현 존재 |
|
||||
| A9 | 히트 영역 | 44px 이상 |
|
||||
| A10 | 본문 max-width | 38em 이하 |
|
||||
| A11 | 다크 페어 | green 텍스트 0건 |
|
||||
| A12 | 텍스트 알파·hover 의존 | 0건 |
|
||||
| **A13** | **상태 셀 글자** | 모든 상태 셀에 글자 100% |
|
||||
| **A14** | **배지 길이** | 6자 초과 0건 |
|
||||
| **A15** | **primary 버튼** | 화면당 1개 |
|
||||
| **A16** | **orange 사용** | 상태·본문 0건 |
|
||||
|
||||
### 11.2 수동
|
||||
|
||||
| # | 항목 |
|
||||
| :-: | :--- |
|
||||
| V1 | 키보드만으로 PRD 5장 모든 화면의 모든 행동 수행 |
|
||||
| V2 | 스크린리더로 S04 → S05 → S10 흐름 낭독 |
|
||||
| V3 | 200% 확대 시 손실·가로 스크롤 없음(표 제외) |
|
||||
| V4 | 그레이스케일로 6장 모든 상태 구분 |
|
||||
| V5 | 1280px에서 가로 스크롤(표 외) 0 |
|
||||
| V6 | 9.4절 금지 목록 0건 |
|
||||
| V7 | 도면 이미지 캡션 100% |
|
||||
| V8 | '앱이 확정했다'로 읽히는 문장 0건 |
|
||||
|
||||
---
|
||||
|
||||
## 12. 거버넌스
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 변경 | 이 문서의 개정은 버전표에 기록한다. Prism 개정은 이 문서에 자동 소급되지 않는다 (Prism DC-1) |
|
||||
| 소유 | 앱 화면 규칙은 담당자(심영표). 공백 G1~G10의 Prism 반영은 Prism 소유자가 결정한다 |
|
||||
| 드리프트 | 3.2절 sys 블록이 `design.tokens.json`·`webapp` 3절과 달라지면 이 문서를 고친다. 정합은 구현 시 빌드 게이트(A1)로 검증한다 |
|
||||
| R8 | 확정 시 `디자인지침_경로.md`의 R8 행을 대체 표기하고 '디자인 지침 폴더 경로'를 `RAG/design system_v0.1.1`로 갱신한다 (사용자 결정 UX1 후) |
|
||||
| 면책 | 이 프로파일 준수가 서비스의 접근성·적합성을 보증하지 않는다 (Prism DC-3). 서비스 단위 검증은 별도로 한다 |
|
||||
|
||||
---
|
||||
|
||||
## 부록 A. 핵심 컴포넌트 스타일 골격
|
||||
|
||||
토큰만 참조하는 CSS 골격이다. 값은 3장 변수에서 온다.
|
||||
|
||||
```css
|
||||
.pier-badge {
|
||||
display: inline-flex; align-items: center; gap: var(--prism-space-050);
|
||||
padding: var(--prism-comp-badge-pad-y) var(--prism-comp-badge-pad-x);
|
||||
font-size: var(--prism-comp-badge-font); font-weight: 500;
|
||||
border: var(--prism-comp-badge-line-solid) solid var(--prism-comp-line);
|
||||
border-radius: var(--prism-comp-badge-radius);
|
||||
color: var(--prism-text-body); background: transparent; white-space: nowrap;
|
||||
}
|
||||
.pier-badge[data-kind="good"] { color: var(--prism-comp-state-good-fg); background: var(--prism-comp-state-good-bg); border-color: var(--prism-comp-state-good-fg); }
|
||||
.pier-badge[data-kind="warn"] { color: var(--prism-comp-state-warn-fg); background: var(--prism-comp-state-warn-bg); border-color: var(--prism-comp-state-warn-fg); }
|
||||
.pier-badge[data-kind="info"] { color: var(--prism-comp-state-info-fg); background: var(--prism-comp-state-info-bg); border-color: var(--prism-comp-state-info-fg); }
|
||||
.pier-badge[data-kind="bad"] { color: var(--prism-comp-state-bad-fg); background: var(--prism-comp-state-bad-bg); border-color: var(--prism-comp-state-bad-fg);
|
||||
border-width: var(--prism-comp-badge-line-bold); }
|
||||
.pier-badge[data-kind="none"] { border-style: dashed; }
|
||||
.pier-badge[data-kind="fixed"] { color: var(--prism-bg-card); background: var(--prism-text-heading); border-color: var(--prism-text-heading); }
|
||||
/* 선행 마커: CSS 도형, 아이콘이 아님 */
|
||||
.pier-badge[data-mark]::before { content: attr(data-mark); aria-hidden: true; }
|
||||
|
||||
.pier-table { width: 100%; border-collapse: collapse; font-size: var(--prism-comp-table-font); font-variant-numeric: tabular-nums; }
|
||||
.pier-table caption { text-align: left; font-weight: 700; padding-block: var(--prism-space-100); }
|
||||
.pier-table th, .pier-table td { padding: var(--prism-comp-table-cell-pad-y) var(--prism-comp-table-cell-pad-x);
|
||||
border-bottom: var(--prism-comp-table-rule) solid var(--prism-comp-line); text-align: left; vertical-align: top; }
|
||||
.pier-table thead th { position: sticky; top: 0; z-index: var(--prism-z-sticky); background: var(--prism-comp-table-head-bg); }
|
||||
.pier-table td.num { text-align: right; }
|
||||
|
||||
:focus-visible { outline: var(--prism-focus-ring) solid var(--prism-comp-line-strong); outline-offset: var(--prism-focus-offset); }
|
||||
@media (prefers-reduced-motion: reduce) { * { animation: none !important; transition: none !important; } }
|
||||
```
|
||||
|
||||
`.pier-badge[data-mark]::before`의 `aria-hidden`은 CSS 속성이 아니므로 구현 시 마커를 `<span aria-hidden="true">`로 둔다(골격 단순화를 위해 표기).
|
||||
|
||||
## 부록 B. 화면별 소비 매트릭스
|
||||
|
||||
| 화면 | 패턴 | 주요 컴포넌트 (7.1·7.2절) |
|
||||
| :--- | :--- | :--- |
|
||||
| S01 | W5 | table, button, badge, xref |
|
||||
| S02 | W3 | input(G1), directive, button, scope |
|
||||
| S03 | W2 | card, stat, summary-strip, stepper, state-banner, button |
|
||||
| S04 | W5 | summary-strip, section-table, badge, state-banner, disclosure, button |
|
||||
| S05 | W5 | evidence-row, diff-row, confirm-form, specsheet, directive, xref |
|
||||
| S06 | W3 | input, confirm-form, state-banner, button, codeblock(G9) |
|
||||
| S07 | W5 | summary-strip, table(selectable), diff-row, badge, button |
|
||||
| S08 | 모달 | modal, drawing-view, mediaframe |
|
||||
| S09 | W3 + W5 | input, table, button |
|
||||
| S10 | 모달 | bulk-confirm-dialog, evidence-row, disclosure, confirm-form |
|
||||
| S11 | W2 | card, table, badge, run-progress, button |
|
||||
| S12 | W4 | toc, table, badge, directive |
|
||||
| S13 | W4 | toc, table, badge, directive, scope |
|
||||
|
||||
## 부록 C. 근거 파일
|
||||
|
||||
| 구분 | 경로 |
|
||||
| :--- | :--- |
|
||||
| Prism 진입점 | `RAG/design system_v0.1.1/Design.md` |
|
||||
| 토큰 정본 | `RAG/design system_v0.1.1/design.tokens.json` |
|
||||
| 웹앱 모듈 | `RAG/design system_v0.1.1/webapp/module.webapp.md` |
|
||||
| 컴포넌트·브랜드 | `RAG/design system_v0.1.1/design.components.md`, `design.brand.md` |
|
||||
| 화면 요구사항 | `DOC/01_기획/웹앱디자인시안/PRD.md` |
|
||||
| 기존 디자인 기준 | `context-migration/디자인지침_경로.md` (R8) |
|
||||
Binary file not shown.
@@ -0,0 +1,431 @@
|
||||
<!doctype html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>PierProof 시안 — 입력 묶음·새 교각 판별</title>
|
||||
<link rel="stylesheet" href="pier.css">
|
||||
<style>
|
||||
@font-face { font-family: "Pretendard"; src: url("fonts/PretendardVariable.woff2") format("woff2-variations"); font-weight: 45 920; font-display: swap; }
|
||||
body { margin: 0; }
|
||||
.toast { position: fixed; right: var(--prism-space-300); bottom: var(--prism-space-300); z-index: 700; max-width: 28rem; background: var(--prism-bg-card);
|
||||
border: var(--prism-stroke-regular) solid var(--prism-comp-line-strong); border-radius: var(--prism-radius-md); padding: var(--prism-space-150) var(--prism-space-200); }
|
||||
.toast[hidden] { display: none; }
|
||||
.scrim { position: fixed; }
|
||||
.demo { background: var(--prism-text-heading); color: var(--prism-comp-on-emphasis); font-size: var(--prism-type-caption); padding: var(--prism-space-050) var(--prism-space-300); }
|
||||
.rail a.step { cursor: pointer; }
|
||||
a[data-r] { cursor: pointer; }
|
||||
td .btn.sm { min-height: var(--prism-comp-hit-min); }
|
||||
.pbar.run > i { transition: width var(--prism-motion-fast) linear; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<a class="skip" href="#main">본문 바로가기</a>
|
||||
<div class="demo">시안 — 동작 흐름 확인용. 데이터는 예시이며 실제 앱 결과가 아니다. 새로고침하면 처음 상태로 돌아간다.</div>
|
||||
<div class="app" id="app">
|
||||
<header class="top">
|
||||
<div class="brand"><i></i>PierProof</div>
|
||||
<span class="where" id="where"></span>
|
||||
<div class="meta"><span>권한 담당자</span><span>저장 14:32</span><span>환경 로컬</span></div>
|
||||
</header>
|
||||
<div class="body">
|
||||
<nav class="rail" aria-label="교각 작업 단계">
|
||||
<span class="cap">교각</span>
|
||||
<span class="pier">옥성교P1</span>
|
||||
<ol>
|
||||
<li><a class="step done" tabindex="0"><span class="n" aria-hidden="true">✓</span>1 도면</a></li>
|
||||
<li><a class="step" id="nav-bundles" href="#/bundles"><span class="n">2</span>2 입력 묶음</a></li>
|
||||
<li><a class="step" tabindex="0"><span class="n">3</span>3 게이트</a></li>
|
||||
<li><a class="step" tabindex="0"><span class="n">4</span>4 보고서</a></li>
|
||||
</ol>
|
||||
<hr>
|
||||
<div class="sub"><a href="#/candidates" id="nav-cand">표 후보값</a></div>
|
||||
<div class="sub"><a href="#/new" id="nav-new">새 교각 (S02)</a></div>
|
||||
</nav>
|
||||
<main class="main" id="main" tabindex="-1"></main>
|
||||
</div>
|
||||
</div>
|
||||
<div id="modalHost"></div>
|
||||
<div class="toast" id="toast" role="status" aria-live="polite" hidden></div>
|
||||
|
||||
<script>
|
||||
(function () {
|
||||
'use strict';
|
||||
/* ---------- data (sample) ---------- */
|
||||
var GRADE = { V1: ['', 'V1 값'], V2: ['', 'V2 목록'], V3: ['dash', 'V3 생성'], F: ['fixed', 'F 고정'] };
|
||||
var ST = { g: ['good', '●', '일치', 3], w: ['warn', '▲', '주의', 2], b: ['bad', '■', '불일치', 0], n: ['dash', '◇', '근거 없음', 1] };
|
||||
var RAW = [
|
||||
['params · lean_concrete', 'V1', '표 밖 치수', 'g'], ['params · footing', 'V1', '표 밖 치수', 'g'], ['params · column', 'V1', '표 밖 치수', 'g'],
|
||||
['params · materials', 'V1', '표', 'g'], ['params · coping', 'V2', '표 밖 치수', 'w'], ['params · bearing_seats', 'V1', '표', 'g'],
|
||||
['params · sole_plates', 'V1', '표', 'g'], ['params · rebar_marks', 'V1', '표', 'g'], ['params · column_rebar', 'V2', '표 밖 치수', 'g'],
|
||||
['params · footing_rebar', 'V3', '판독 스크립트', 'g'], ['params · coping_rebar', 'V3', '판독 스크립트', 'w'], ['params · display', 'V1', '', 'n', true],
|
||||
['expected · G1', 'V1', '표 밖 치수', 'g'], ['expected · G1.pedestal', 'V1', '표', 'g'], ['expected · G2', 'V2', '표 밖 치수', 'g'],
|
||||
['expected · G3', 'V2', '표 밖 치수', 'g'], ['expected · G4', 'V2', '표 밖 치수', 'b'], ['expected · G5', 'V1', '표', 'g'],
|
||||
['expected · planned_fail', 'V1', '사람 입력', 'n'], ['expected · rebar_palette', 'V1', '', 'n', true], ['expected · checkers', 'F', '템플릿 고정', 'g'],
|
||||
['expected · schedule', 'V1', '표', 'g'], ['expected · dia', 'V1', '표', 'g'], ['expected · fixed_length', 'V2', '표 밖 치수', 'w'],
|
||||
['expected · loops', 'V2', '표 밖 치수', 'w'], ['expected · seats', 'V2', '표 밖 치수', 'g'], ['expected · c18', 'V2', '표 밖 치수', 'g']
|
||||
];
|
||||
var rows = RAW.map(function (r, i) {
|
||||
return { i: i, key: r[0], g: r[1], src: r[2], st: r[3], orig: !!r[4], human: null, stale: false };
|
||||
});
|
||||
var SRC_TEXT = { '표': '도면 표(D1)', '표 밖 치수': '구조도 정면·단면의 치수 문자(D1)', '판독 스크립트': '판독 스크립트 실행 기록', '사람 입력': '담당자 입력 기록', '템플릿 고정': '템플릿 고정값' };
|
||||
var CAND = [
|
||||
{ id: 1, bundle: 'params · coping', file: 'params', target: 'coping.z_tip', cur: 31232, cand: 31231.5, kind: '표 밖 치수', rule: 'R1 레벨', trust: 'B', pos: 'D1 (225817, 1802)', pair: 'ztip' },
|
||||
{ id: 2, bundle: 'expected · G1', file: 'expected', target: 'G1.coping.z_tip', cur: 31232, cand: 31231.5, kind: '표 밖 치수', rule: 'R1 레벨', trust: 'B', pos: 'D1 (225817, 1802)', pair: 'ztip' },
|
||||
{ id: 3, bundle: 'params · coping', file: 'params', target: 'coping.z_top_right', cur: 32936, cand: 32936, kind: '표 밖 치수', rule: 'R1 레벨', trust: 'A', pos: 'D1 (225817, 4366)' },
|
||||
{ id: 4, bundle: 'params · footing', file: 'params', target: 'footing.height', cur: 2500, cand: 2450, kind: '표 밖 치수', rule: 'R2 사슬', trust: 'A', pos: 'D1 (231004, 902)' },
|
||||
{ id: 5, bundle: 'params · bearing_seats', file: 'params', target: 'bearing_seats[0].h1', cur: 209, cand: 209, kind: '표', rule: 'ELEVATION TABLE', trust: 'T', pos: 'D1 표 행 1' },
|
||||
{ id: 6, bundle: 'params · sole_plates', file: 'params', target: 'sole_plates[3].S', cur: -0.46, cand: -0.52, kind: '표', rule: 'SOLE PLATE TABLE', trust: 'T', pos: 'D1 표 행 4' },
|
||||
{ id: 7, bundle: 'params · column_rebar', file: 'params', target: 'column_rebar.hoops[2]', cur: '4@300', cand: '4@300', kind: '표 밖 치수', rule: 'R2 사슬', trust: 'A', pos: 'D2 (224410, 7120)' },
|
||||
{ id: 8, bundle: 'params · coping_rebar', file: 'params', target: 'coping_rebar.stirrups.count', cur: 104, cand: 106, kind: '표 밖 치수', rule: 'R6 수량 대조', trust: 'C', pos: 'D1 점 94곳' }
|
||||
];
|
||||
var TRUST = { A: ['', '등급 A'], B: ['warn', '등급 B'], C: ['dash', '등급 C'], T: ['', '표'] };
|
||||
|
||||
/* ---------- state ---------- */
|
||||
var S = { filter: 'all', fGrade: '', fSrc: '', by: '심영표', checking: false, checkedAt: '14:30', sel: {}, lastBulk: '', flash: null };
|
||||
|
||||
/* ---------- helpers ---------- */
|
||||
function $(sel, root) { return (root || document).querySelector(sel); }
|
||||
function esc(t) { return String(t).replace(/[&<>"']/g, function (c) { return { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[c]; }); }
|
||||
function badge(kind, mark, label) { return '<span class="b ' + kind + '">' + (mark ? '<span class="m" aria-hidden="true">' + mark + '</span>' : '') + esc(label) + '</span>'; }
|
||||
function stBadge(r) {
|
||||
if (r.stale) return badge('warn', '◆', '변경됨');
|
||||
var s = ST[r.st]; return badge(s[0], s[1], s[2]);
|
||||
}
|
||||
function humanBadge(r) { return r.human ? '<span class="b fixed"><span class="m" aria-hidden="true">●</span>확정</span>' : (r.stale && r.staleHuman ? badge('warn', '◆', '변경됨') : '<span class="b dash">미확정</span>'); }
|
||||
function fmt(v) { return typeof v === 'number' ? v.toLocaleString('ko-KR') : v; }
|
||||
function toast(msg) {
|
||||
var t = $('#toast'); t.textContent = msg; t.hidden = false;
|
||||
clearTimeout(toast._t); toast._t = setTimeout(function () { t.hidden = true; }, 6000);
|
||||
}
|
||||
function counts() {
|
||||
var c = { g: 0, w: 0, b: 0, n: 0, human: 0 };
|
||||
rows.forEach(function (r) { c[r.st]++; if (r.human) c.human++; });
|
||||
return c;
|
||||
}
|
||||
function sorted() { return rows.slice().sort(function (a, b) { return (ST[a.st][3] - ST[b.st][3]) || (a.i - b.i); }); }
|
||||
|
||||
/* ---------- evidence ---------- */
|
||||
function evidence(r) {
|
||||
var src = SRC_TEXT[r.src] || '';
|
||||
var hex = (0x2c41 + r.i * 37).toString(16).toUpperCase();
|
||||
var pos = 'D1 · 핸들 ' + hex;
|
||||
var isExp = r.key.indexOf('expected') === 0;
|
||||
var ev = [
|
||||
{ id: 'C1', name: '출처 있음', st: 'g', text: '이 묶음의 값은 ' + src + '에서 읽었다.', pos: pos },
|
||||
{ id: 'C2', name: '도면 재대조', st: 'g', text: '현재 값이 ' + src + '의 후보 값과 같다.', pos: pos },
|
||||
{ id: 'C3', name: '템플릿 원본 잔존', st: 'g', text: '원본과 다른 값은 ' + (30 + r.i) + '개이고 같은 값 ' + (r.i % 4) + '개는 모두 도면 근거가 있다.', pos: '—' },
|
||||
{ id: 'C4', name: '내부 정합', st: 'g', text: '치수 사슬 합이 전체 치수와 같고 본수가 재료표 수량과 같다.', pos: '재료표' },
|
||||
{ id: 'C5', name: 'params와 독립', st: isExp ? 'g' : 'x', text: isExp ? 'expected의 출처가 params의 출처와 다르다.' : '해당 없음. params 묶음이다.', pos: '—' },
|
||||
{ id: 'C6', name: '범위·단위', st: 'g', text: 'EL과 길이가 상식 범위 안에 있고 단위가 mm이다.', pos: '—' },
|
||||
{ id: 'C7', name: '변수 등급 위반', st: 'g', text: r.g === 'F' ? 'F 고정 항목이 템플릿 원본과 같다.' : 'F 고정 항목이 템플릿 원본과 다르지 않다.', pos: '—' },
|
||||
{ id: 'C8', name: '재생성 일치', st: r.g === 'V3' ? 'g' : 'x', text: r.g === 'V3' ? '재생성 목록의 해시가 현재 값과 같다 (독립성 낮음).' : '해당 없음. V3 묶음이 아니다.', pos: '판독 스크립트' }
|
||||
];
|
||||
function set(id, st, text) { ev.forEach(function (e) { if (e.id === id) { e.st = st; e.text = text; } }); }
|
||||
if (r.src === '표') set('C1', 'g', '이 묶음의 값은 도면 표(D1)의 행에서 읽었다.');
|
||||
if (r.key === 'expected · G4') set('C4', 'b', '스터럽 곳 수 합 104가 재료표 C8~C13 수량 합 106(39 + 27 + 40)과 다르다.');
|
||||
if (r.key === 'params · coping') set('C2', 'w', '단 높이가 표 값과 1.1 mm 어긋난다. 허용 범위 안이다.');
|
||||
if (r.key === 'params · coping_rebar') set('C8', 'w', '재생성 목록의 해시가 같다. 독립성이 낮아 도면 직접 대조가 필요하다.');
|
||||
if (r.key === 'expected · fixed_length') set('C4', 'w', '길이가 재료표 L과 겹이음만큼 다르다. 허용 범위 안이다.');
|
||||
if (r.key === 'expected · loops') set('C2', 'w', '측면 고리 한 단이 점 목록과 3 mm 다르다. 허용 범위 안이다.');
|
||||
if (r.st === 'n') {
|
||||
set('C1', 'n', r.key === 'expected · planned_fail' ? '사람 결정 기록이다. 도면 출처가 없다.' : '출처를 찾지 못했다. 사람이 도면에서 직접 확인한다.');
|
||||
set('C2', 'x', '비교할 후보가 없다.'); set('C4', 'x', '비교할 항목이 없다.'); set('C6', 'x', '검사 대상 수치가 없다.');
|
||||
if (r.orig) set('C3', 'n', '현재 값이 템플릿 원본과 같고 새 도면 근거가 없다.');
|
||||
}
|
||||
return ev;
|
||||
}
|
||||
var EVST = { g: ['good', '●', '일치'], w: ['warn', '▲', '주의'], b: ['bad', '■', '불일치'], n: ['dash', '◇', '근거 없음'], x: ['', '', '—'] };
|
||||
|
||||
/* ---------- views ---------- */
|
||||
var main = $('#main');
|
||||
function setWhere(t) { $('#where').textContent = t; }
|
||||
|
||||
function viewBundles() {
|
||||
setWhere('S04 · 옥성교P1 · 입력 묶음');
|
||||
var c = counts();
|
||||
var list = sorted().filter(function (r) {
|
||||
if (S.filter !== 'all' && r.st !== S.filter) return false;
|
||||
if (S.fGrade && r.g !== S.fGrade) return false;
|
||||
if (S.fSrc && (r.orig ? '원본값' : r.src) !== S.fSrc) return false;
|
||||
return true;
|
||||
});
|
||||
var origN = rows.filter(function (r) { return r.orig; }).length;
|
||||
var html = '<div class="head"><span class="eyebrow">2단계</span><h1>입력 묶음 확인·확정</h1><p class="lead">앱이 묶음을 도면과 대조해 근거를 보인다. 확정은 근거를 읽은 담당자가 한다.</p></div>';
|
||||
if (S.flash) { html += '<div class="banner good" role="status"><span class="m" aria-hidden="true">●</span><div>' + esc(S.flash) + '</div></div>'; }
|
||||
html += '<section class="strip" aria-label="요약"><p class="concl">필요 27개 중 앱 확인 일치 ' + c.g + ' · 주의 ' + c.w + ' · 불일치 ' + c.b + ' · 근거 없음 ' + c.n + ' · 사람 확정 ' + c.human + '</p><div class="counts">';
|
||||
[['all', '전체', '', 27], ['g', '일치', ST.g, c.g], ['w', '주의', ST.w, c.w], ['b', '불일치', ST.b, c.b], ['n', '근거 없음', ST.n, c.n]].forEach(function (f) {
|
||||
var lab = f[2] ? badge(f[2][0], f[2][1], f[1]) : '<span>' + f[1] + '</span>';
|
||||
html += '<button class="cnt' + (S.filter === f[0] ? ' sel' : '') + '" type="button" data-filter="' + f[0] + '" aria-pressed="' + (S.filter === f[0]) + '">' + lab + '<b class="num">' + f[3] + '</b></button>';
|
||||
});
|
||||
html += '</div>';
|
||||
if (S.checking) html += '<div class="stack" style="gap:0.25rem"><span class="cap" id="runtxt">앱 확인 중 0/27 묶음</span><div class="pbar run" role="progressbar" aria-valuemin="0" aria-valuemax="27" aria-valuenow="0" id="runbar"><i style="width:0%"></i></div></div>';
|
||||
else html += '<span class="cap muted">마지막 앱 확인 ' + S.checkedAt + ' · 검사 v0.1 · 재확인 필요 ' + rows.filter(function (r) { return r.stale; }).length + '개</span>';
|
||||
html += '</section>';
|
||||
html += '<div class="banner"><span class="m" aria-hidden="true">▲</span><div><b>원본값 ' + origN + '개.</b> 템플릿 원본과 같고 새 도면 근거가 없다. 일괄 확정에서 제외되며, 새 도면과 대조해 값이 바뀌거나 근거가 붙어야 풀린다.</div></div>';
|
||||
html += '<div class="row"><div class="field"><label for="fg">변수 등급</label><select id="fg"><option value="">전체</option>' +
|
||||
['V1', 'V2', 'V3', 'F'].map(function (g) { return '<option value="' + g + '"' + (S.fGrade === g ? ' selected' : '') + '>' + GRADE[g][1] + '</option>'; }).join('') + '</select></div>' +
|
||||
'<div class="field"><label for="fs">값 출처</label><select id="fs"><option value="">전체</option>' +
|
||||
['표', '표 밖 치수', '판독 스크립트', '원본값', '사람 입력', '템플릿 고정'].map(function (g) { return '<option value="' + g + '"' + (S.fSrc === g ? ' selected' : '') + '>' + g + '</option>'; }).join('') + '</select></div>' +
|
||||
'<span class="grow"></span><button class="btn" type="button" id="runAll">전체 확인</button><button class="btn primary" type="button" id="bulk">일치분 확정</button></div>';
|
||||
html += '<div class="tw"><table class="t"><caption>입력 묶음 ' + list.length + '개 · 불일치 → 근거 없음 → 주의 → 일치 순</caption><thead><tr><th scope="col">묶음</th><th scope="col">변수 등급</th><th scope="col">값 출처</th><th scope="col">앱 확인</th><th scope="col">사람 확정</th><th scope="col">근거</th></tr></thead><tbody>';
|
||||
if (!list.length) html += '<tr><td colspan="6">조건에 맞는 묶음이 없다. 필터를 바꾼다.</td></tr>';
|
||||
list.forEach(function (r) {
|
||||
html += '<tr><td><a href="#/evidence/' + r.i + '">' + esc(r.key) + '</a></td><td>' + badge(GRADE[r.g][0], '', GRADE[r.g][1]) + '</td><td>' + esc(r.src) +
|
||||
(r.orig ? badge('warn', '▲', '원본값') : '') + '</td><td>' + stBadge(r) + (r.stale ? ' <button class="btn quiet sm" type="button" data-recheck="' + r.i + '">확인 실행</button>' : '') +
|
||||
'</td><td>' + (r.human ? humanBadge(r) + ' <span class="cap muted">' + esc(r.human.by) + ' ' + esc(r.human.at) + '</span>' : humanBadge(r)) +
|
||||
'</td><td><a class="btn quiet sm" href="#/evidence/' + r.i + '">근거 보기</a></td></tr>';
|
||||
});
|
||||
html += '</tbody></table></div>';
|
||||
html += '<details class="card" style="padding:0"><summary style="min-height:2.75rem;display:flex;align-items:center;cursor:pointer;font-weight:700;padding:0 0.75rem">확정 불필요(참고) 5개</summary><div style="padding:0 1rem 1rem" class="muted">_schema · _meta · pier_id_src · hitl_decisions_note · display_notes. 확정 대상이 아니며 앱 확인도 하지 않는다.</div></details>';
|
||||
main.innerHTML = html;
|
||||
|
||||
main.querySelectorAll('[data-filter]').forEach(function (b) { b.onclick = function () { S.filter = b.getAttribute('data-filter'); viewBundles(); $('[data-filter="' + S.filter + '"]').focus(); }; });
|
||||
$('#fg').onchange = function (e) { S.fGrade = e.target.value; viewBundles(); $('#fg').focus(); };
|
||||
$('#fs').onchange = function (e) { S.fSrc = e.target.value; viewBundles(); $('#fs').focus(); };
|
||||
$('#runAll').onclick = runAll;
|
||||
$('#bulk').onclick = openBulk;
|
||||
main.querySelectorAll('[data-recheck]').forEach(function (b) { b.onclick = function () { var r = rows[+b.getAttribute('data-recheck')]; r.stale = false; r.staleHuman = false; toast(r.key + ' 앱 확인을 다시 실행했다. 결과는 이전과 같다.'); viewBundles(); }; });
|
||||
S.flash = null;
|
||||
}
|
||||
|
||||
function runAll() {
|
||||
if (S.checking) return;
|
||||
S.checking = true; viewBundles();
|
||||
var n = 0, bar = $('#runbar'), txt = $('#runtxt');
|
||||
var timer = setInterval(function () {
|
||||
n += 3; if (n > 27) n = 27;
|
||||
bar.firstElementChild.style.width = (n / 27 * 100) + '%'; bar.setAttribute('aria-valuenow', n); txt.textContent = '앱 확인 중 ' + n + '/27 묶음';
|
||||
if (n >= 27) {
|
||||
clearInterval(timer); S.checking = false; S.checkedAt = '14:36';
|
||||
rows.forEach(function (r) { r.stale = false; r.staleHuman = false; });
|
||||
toast('앱 확인을 마쳤다. 결과는 요약 띠에 반영되었다.'); viewBundles();
|
||||
}
|
||||
}, 120);
|
||||
}
|
||||
|
||||
function viewEvidence(idx) {
|
||||
var r = rows[idx]; if (!r) { location.hash = '#/bundles'; return; }
|
||||
setWhere('S05 · 옥성교P1 · 근거 보기');
|
||||
var ev = evidence(r), s = ST[r.st];
|
||||
var order = sorted();
|
||||
var pos = order.indexOf(r);
|
||||
var next = null;
|
||||
for (var k = 1; k <= order.length; k++) { var cand = order[(pos + k) % order.length]; if (!cand.human && cand !== r) { next = cand; break; } }
|
||||
var html = '<div class="head"><span class="eyebrow">2단계 · 입력 묶음</span><h1>근거 보기</h1></div><div class="split"><aside class="card" style="padding:0" aria-label="묶음 이동"><h3 style="padding:1rem 1rem 0.5rem">묶음 이동</h3><ul class="list">';
|
||||
order.forEach(function (o) {
|
||||
html += '<li class="' + (o === r ? 'cur' : '') + '"><a href="#/evidence/' + o.i + '"' + (o === r ? ' aria-current="true"' : '') + '>' + esc(o.key) + '</a>' + stBadge(o) + '</li>';
|
||||
});
|
||||
html += '</ul><div class="row" style="padding:0.75rem 1rem"><a class="btn sm" href="#/bundles">목록으로</a></div></aside><div class="stack">';
|
||||
var concl = r.stale ? esc(r.key) + ' — 값이 바뀌었다. 이전 확인과 확정이 무효가 되었다.' :
|
||||
esc(r.key) + ' — 앱 확인 ' + s[2] + '. ' + (r.st === 'g' ? '근거를 읽고 확정한다.' : '사람 확정 전에 사유가 필요하다.');
|
||||
html += '<section class="strip"><p class="concl">' + concl + '</p><dl class="kv"><dt>변수 등급</dt><dd>' + badge(GRADE[r.g][0], '', GRADE[r.g][1]) + '</dd><dt>앱 확인</dt><dd>' + stBadge(r) + '</dd><dt>사람 확정</dt><dd>' +
|
||||
(r.human ? humanBadge(r) + ' ' + esc(r.human.by) + ' · ' + esc(r.human.at) + (r.human.why ? ' · 사유: ' + esc(r.human.why) : '') : '<span class="b dash">미확정</span>') + '</dd><dt>검사</dt><dd>v0.1 · ' + S.checkedAt + '</dd></dl></section>';
|
||||
html += '<div class="tw"><table class="t"><caption>앱 확인 근거 C1 ~ C8</caption><thead><tr><th scope="col">검사</th><th scope="col">결과</th><th scope="col">근거</th><th scope="col">도면 위치</th></tr></thead><tbody>';
|
||||
ev.forEach(function (e) { var q = EVST[e.st]; html += '<tr><td style="white-space:nowrap"><b>' + e.id + '</b> ' + e.name + '</td><td>' + (e.st === 'x' ? '—' : badge(q[0], q[1], q[2])) + '</td><td style="max-width:36rem">' + esc(e.text) + '</td><td>' + esc(e.pos) + '</td></tr>'; });
|
||||
html += '</tbody></table></div><div class="banner tip"><span class="m" aria-hidden="true">◆</span><div>일치는 후보를 만든 규칙과 값이 같다는 뜻이다. 도면이 맞다는 판정이 아니다.</div></div>';
|
||||
if (r.st === 'b' || r.st === 'w') {
|
||||
html += '<section class="card"><h3>값 비교</h3><table class="t"><caption class="cap">다른 항목만 표시</caption><thead><tr><th scope="col">항목</th><th class="num" scope="col">현재</th><th class="num" scope="col">기준</th><th scope="col">차이</th></tr></thead><tbody>' +
|
||||
(r.st === 'b' ? '<tr><td>스터럽 곳 수 합(개)</td><td class="num">104</td><td class="num">106</td><td>' + badge('warn', '▲', '다름') + '</td></tr>' : '<tr><td>표시된 항목</td><td class="num">1.1</td><td class="num">0</td><td>' + badge('warn', '▲', '다름') + '</td></tr>') + '</tbody></table></section>';
|
||||
}
|
||||
if (!r.human) {
|
||||
html += '<section class="card"><h3>확정</h3><div class="field"><label for="by">확정자<span class="req">필수</span></label><input id="by" type="text" value="' + esc(S.by) + '" style="max-width:20rem"></div>' +
|
||||
'<div class="field" id="whyf"><label for="why">사유<span class="req">' + (r.st === 'g' ? '선택' : '주의·불일치·근거 없음 확정에는 필수') + '</span></label><textarea id="why" rows="3"></textarea><span class="err" id="err" hidden></span></div>' +
|
||||
'<div class="row"><button class="btn primary" type="button" id="conf">확정</button>' + (next ? '<a class="btn" href="#/evidence/' + next.i + '">다음 미확정 묶음</a>' : '') + '</div></section>';
|
||||
}
|
||||
html += '</div></div>';
|
||||
main.innerHTML = html;
|
||||
var cb = $('#conf');
|
||||
if (cb) cb.onclick = function () {
|
||||
var by = $('#by').value.trim(), why = $('#why').value.trim(), err = $('#err'), f = $('#whyf');
|
||||
function fail(m) { err.hidden = false; err.innerHTML = '<span aria-hidden="true">■</span>' + esc(m); f.classList.add('bad'); }
|
||||
f.classList.remove('bad'); err.hidden = true;
|
||||
if (!by) { fail('확정자 이름이 비어 있다. 확정은 사람의 기록이다. 이름을 입력한다'); $('#by').focus(); return; }
|
||||
if (r.st !== 'g' && !why) { fail('사유가 비어 있다. ' + ST[r.st][2] + ' 묶음은 사유가 있어야 확정된다. 사유를 입력한다'); $('#why').focus(); return; }
|
||||
S.by = by; r.human = { by: by, at: '14:41', why: why };
|
||||
toast(r.key + ' 확정을 기록했다. 확정자 ' + by + '.'); viewEvidence(idx);
|
||||
};
|
||||
}
|
||||
|
||||
function viewCandidates() {
|
||||
setWhere('S07 · 옥성교P1 · 표 후보값');
|
||||
var diffN = CAND.filter(function (c) { return c.cur !== c.cand; }).length;
|
||||
var html = '<div class="head"><span class="eyebrow">2단계 · 입력 묶음</span><h1>표 후보값·표 밖 치수</h1><p class="lead">도면 표와 표 밖 치수에서 찾은 후보를 현재 값과 비교한다. 반영은 선택한 행에만 적용되고 자동 반영은 없다.</p></div>';
|
||||
html += '<section class="strip"><p class="concl">후보 ' + CAND.length + '건 — 다름 ' + diffN + '건, 근거 없음 3건</p><div class="counts"><span class="b">표 2</span><span class="b">표 밖 치수 6</span><span class="b dash">등급 C 1</span></div></section>';
|
||||
html += '<div class="banner tip"><span class="m" aria-hidden="true">◆</span><div>params와 expected에 같은 후보를 함께 반영하면 검사의 독립성이 사라진다. 반영 대상 줄은 하나씩 고른다.</div></div>';
|
||||
html += '<div class="tw"><table class="t"><caption>후보 비교 — 선택 ' + Object.keys(S.sel).filter(function (k) { return S.sel[k]; }).length + '건</caption><thead><tr><th scope="col">반영</th><th scope="col">대상</th><th scope="col">줄</th><th class="num" scope="col">현재</th><th class="num" scope="col">후보</th><th scope="col">구분</th><th scope="col">규칙</th><th scope="col">상태</th><th scope="col">신뢰</th><th scope="col">도면 위치</th></tr></thead><tbody>';
|
||||
CAND.forEach(function (c) {
|
||||
var d = c.cur !== c.cand;
|
||||
html += '<tr' + (S.sel[c.id] ? ' class="sel"' : '') + '><td><input type="checkbox" data-c="' + c.id + '"' + (S.sel[c.id] ? ' checked' : '') + ' aria-label="' + esc(c.target) + ' 반영" style="width:1.25rem;height:1.25rem;accent-color:var(--prism-text-heading)"></td><td><b>' + esc(c.target) + '</b></td><td>' + c.file + '</td><td class="num">' + fmt(c.cur) + '</td><td class="num">' + fmt(c.cand) + '</td><td>' + c.kind + '</td><td>' + c.rule + '</td><td>' +
|
||||
(d ? badge('warn', '▲', '다름') : '같음') + '</td><td>' + badge(TRUST[c.trust][0], c.trust === 'B' ? '▲' : '', TRUST[c.trust][1]) + '</td><td><span class="chip">' + esc(c.pos) + '</span></td></tr>';
|
||||
});
|
||||
html += '</tbody></table></div><div class="field" id="cwhy" hidden><label for="cw">반영 사유<span class="req">등급 C 반영에는 필수</span></label><input id="cw" type="text" style="max-width:36rem"></div><span class="err" id="cerr" hidden></span>';
|
||||
html += '<div class="row"><button class="btn primary" type="button" id="apply">후보 반영</button></div>';
|
||||
main.innerHTML = html;
|
||||
function needWhy() { return CAND.some(function (c) { return S.sel[c.id] && c.trust === 'C'; }); }
|
||||
$('#cwhy').hidden = !needWhy();
|
||||
main.querySelectorAll('[data-c]').forEach(function (cb) { cb.onchange = function () { S.sel[cb.getAttribute('data-c')] = cb.checked; var y = window.scrollY; viewCandidates(); window.scrollTo(0, y); $('[data-c="' + cb.getAttribute('data-c') + '"]').focus(); }; });
|
||||
$('#apply').onclick = function () {
|
||||
var picks = CAND.filter(function (c) { return S.sel[c.id]; }), err = $('#cerr');
|
||||
function fail(m) { err.hidden = false; err.innerHTML = '<span aria-hidden="true">■</span>' + esc(m); }
|
||||
err.hidden = true;
|
||||
if (!picks.length) { fail('선택한 행이 없다. 반영할 후보가 없다. 행을 선택한다'); return; }
|
||||
var pairs = {}, bad = null;
|
||||
picks.forEach(function (c) { if (c.pair) { if (pairs[c.pair] && pairs[c.pair] !== c.file) bad = c; pairs[c.pair] = c.file; } });
|
||||
if (bad) { fail('같은 후보를 params와 expected에 함께 반영할 수 없다. 두 줄의 값이 같은 근거에서 나오면 검사가 무의미해진다. 한 줄만 선택한다'); return; }
|
||||
if (needWhy() && !$('#cw').value.trim()) { fail('반영 사유가 비어 있다. 등급 C 후보는 사유가 있어야 반영된다. 사유를 입력한다'); $('#cw').focus(); return; }
|
||||
var touched = {};
|
||||
picks.forEach(function (c) { c.cur = c.cand; touched[c.bundle] = true; });
|
||||
rows.forEach(function (r) { if (touched[r.key]) { r.stale = true; if (r.human) r.staleHuman = true; r.human = null; } });
|
||||
S.sel = {};
|
||||
toast(picks.length + '건을 반영했다. 영향받은 묶음 ' + Object.keys(touched).length + '개의 앱 확인과 확정이 무효가 되었다.');
|
||||
viewCandidates();
|
||||
};
|
||||
}
|
||||
|
||||
/* ---------- bulk confirm (S10) ---------- */
|
||||
var lastFocus = null;
|
||||
function closeModal() { $('#modalHost').innerHTML = ''; document.removeEventListener('keydown', trap, true); if (lastFocus) lastFocus.focus(); }
|
||||
function trap(e) {
|
||||
var m = $('#modalHost .modal'); if (!m) return;
|
||||
if (e.key === 'Escape') { e.preventDefault(); closeModal(); return; }
|
||||
if (e.key !== 'Tab') return;
|
||||
var f = m.querySelectorAll('button, [href], input, select, textarea, summary, [tabindex="0"]');
|
||||
if (!f.length) return;
|
||||
var first = f[0], last = f[f.length - 1];
|
||||
if (e.shiftKey && document.activeElement === first) { e.preventDefault(); last.focus(); }
|
||||
else if (!e.shiftKey && document.activeElement === last) { e.preventDefault(); first.focus(); }
|
||||
}
|
||||
function openBulk() {
|
||||
lastFocus = document.activeElement;
|
||||
var targets = rows.filter(function (r) { return r.st === 'g' && !r.orig && !r.human && !r.stale; });
|
||||
var ex = rows.filter(function (r) { return !(r.st === 'g' && !r.orig) && !r.human || r.stale; });
|
||||
var read = false;
|
||||
var html = '<div class="scrim"><div class="modal" role="dialog" aria-modal="true" aria-labelledby="mt"><header><h2 id="mt">일치 묶음 확정</h2><button class="btn quiet sm" type="button" id="mx" aria-label="닫기">닫기</button></header>';
|
||||
if (!targets.length) {
|
||||
html += '<p>확정할 일치 묶음이 없다. 모든 일치 묶음이 확정되었거나 재확인이 필요하다.</p><div class="row end"><button class="btn" type="button" id="mc">닫기</button></div></div></div>';
|
||||
$('#modalHost').innerHTML = html; $('#mx').onclick = $('#mc').onclick = closeModal; document.addEventListener('keydown', trap, true); $('#mx').focus(); return;
|
||||
}
|
||||
html += '<p class="concl" style="font-size:var(--prism-type-body-lg);font-weight:700;color:var(--prism-text-heading)">일치 ' + targets.length + '개를 확정한다. 주의·불일치·근거 없음·변경됨 ' + ex.length + '개는 대상이 아니다.</p>' +
|
||||
'<div><h3>근거표 <span class="cap muted">끝까지 내려 확인한다</span></h3><div class="scroll" id="sc" tabindex="0" role="region" aria-label="일치 묶음 근거표"><table class="t"><caption class="cap" style="position:absolute;left:-999rem">일치 묶음 근거</caption><thead><tr><th scope="col">묶음</th><th scope="col">근거</th><th scope="col">출처</th></tr></thead><tbody>';
|
||||
targets.forEach(function (r) { html += '<tr><td><b>' + esc(r.key) + '</b></td><td>' + esc(evidence(r)[1].text) + '</td><td>' + esc(r.src) + '</td></tr>'; });
|
||||
html += '</tbody></table></div></div><details class="card sunken" style="padding:0 1rem"><summary style="min-height:2.75rem;display:flex;align-items:center;cursor:pointer;font-weight:700">제외된 묶음 ' + ex.length + '개 — 누르면 근거 보기로 이동</summary><table class="t" style="margin-bottom:1rem"><caption class="cap" style="position:absolute;left:-999rem">제외된 묶음</caption><thead><tr><th scope="col">묶음</th><th scope="col">사유</th></tr></thead><tbody>';
|
||||
ex.forEach(function (r) { html += '<tr><td><a href="#/evidence/' + r.i + '" data-close="1">' + esc(r.key) + '</a></td><td>' + stBadge(r) + (r.orig ? ' 원본값. 새 도면 근거가 없다' : '') + '</td></tr>'; });
|
||||
html += '</tbody></table></details><div class="field"><label for="mby">확정자<span class="req">필수</span></label><input id="mby" type="text" value="' + esc(S.by) + '" style="max-width:20rem"><span class="help">확정 기록에는 입력한 이름만 남는다. 앱은 확정하지 않는다</span></div>' +
|
||||
'<div class="err" id="merr" hidden></div><div class="row end"><button class="btn" type="button" id="mc">취소</button><button class="btn primary" type="button" id="mok">확정</button></div></div></div>';
|
||||
$('#modalHost').innerHTML = html;
|
||||
var sc = $('#sc');
|
||||
function chk() { if (sc.scrollTop + sc.clientHeight >= sc.scrollHeight - 2) read = true; }
|
||||
sc.addEventListener('scroll', chk); chk();
|
||||
$('#mx').onclick = $('#mc').onclick = closeModal;
|
||||
$('#modalHost').querySelectorAll('[data-close]').forEach(function (a) { a.onclick = function () { closeModal(); }; });
|
||||
$('#mok').onclick = function () {
|
||||
var err = $('#merr'), by = $('#mby').value.trim();
|
||||
function fail(m, el) { err.hidden = false; err.innerHTML = '<span aria-hidden="true">■</span>' + esc(m); if (el) el.focus(); }
|
||||
if (!read) { fail('근거표를 읽지 않았다. 일치 묶음의 근거를 읽어야 확정할 수 있다. 근거표를 끝까지 내린다', sc); return; }
|
||||
if (!by) { fail('확정자 이름이 비어 있다. 확정은 사람의 기록이다. 이름을 입력한다', $('#mby')); return; }
|
||||
S.by = by;
|
||||
targets.forEach(function (r) { r.human = { by: by, at: '14:41', why: '' }; });
|
||||
S.flash = targets.length + '개를 ' + by + '이(가) 확정했다. 확정 기록에는 입력한 이름만 남았다.';
|
||||
closeModal(); route();
|
||||
};
|
||||
document.addEventListener('keydown', trap, true); $('#mx').focus();
|
||||
}
|
||||
|
||||
|
||||
/* ---------- S02 new pier fit (sample: Ungok P1 drawings uploaded) ---------- */
|
||||
var QS = [['foundation', '기초 형식(말뚝 유무)'], ['soffit', '코핑 하면 형상'], ['bearings', '받침 개수']];
|
||||
var OPTS = { foundation: ['기초판+말뚝', '기초판만', '말뚝만'], soffit: ['곡선', '직선 경사', '나팔형'], bearings: ['2', '4', '10'] };
|
||||
var TPLS = [
|
||||
{ n: '운곡교P1형', p: { foundation: '기초판+말뚝', soffit: '곡선', bearings: '10' } },
|
||||
{ n: '옥성교P1형', p: { foundation: '기초판+말뚝', soffit: '직선 경사', bearings: '10' } },
|
||||
{ n: '새재1교P1형', p: { foundation: '기초판만', soffit: '직선 경사', bearings: '10' } },
|
||||
{ n: 'Ramp-A교P1형', p: { foundation: '말뚝만', soffit: '나팔형', bearings: '2' } },
|
||||
{ n: '산외교울산P1형', p: { foundation: '기초판만', soffit: '직선 경사', bearings: '4' } }
|
||||
];
|
||||
var EST = {
|
||||
foundation: ['기초판+말뚝', "'말뚝' 문자 7개: D1 CS-TEXT (복합말뚝)", '보통'],
|
||||
soffit: ['곡선', "R 12000 mm: D1 CS-DIMT (8257, 16513) 'R=12.000'", '보통'],
|
||||
bearings: ['10', 'ELEVATION TABLE 행 10개: D2 (26179, 9342)', '보통']
|
||||
};
|
||||
var N = { up: false, ans: null, tpl: '운곡교P1형', name: '', rs: '미확인', rm: '미확인', skew: '', brot: '', frot: '', err: '' };
|
||||
function nMatch(t) { return QS.filter(function (q) { return t.p[q[0]] === EST[q[0]][0]; }).length; }
|
||||
function nBad() {
|
||||
var t = TPLS.filter(function (x) { return x.n === N.tpl; })[0], bad = [];
|
||||
QS.forEach(function (q) { if (t.p[q[0]] !== N.ans[q[0]]) bad.push(q[1]); });
|
||||
if (N.rs === '아니오') bad.push('철근 형상 종류');
|
||||
if (N.rm === '아니오') bad.push('철근 생성 방식');
|
||||
return bad;
|
||||
}
|
||||
function viewNew() {
|
||||
setWhere('S02 · 새 교각 적합성 판별');
|
||||
var html = '<div class="head"><span class="eyebrow">새 교각</span><h1>도면으로 템플릿 추천</h1><p class="lead">도면을 먼저 올리면 앱이 가장 비슷한 템플릿을 추천한다. 추천은 제안이고, 6문항은 사람이 확인한다.</p></div>';
|
||||
if (!N.up) {
|
||||
html += '<section class="card" style="max-width:38em"><div class="field"><label for="dw">교각 도면(DWG, 여러 장)</label><input id="dw" type="file" accept=".dwg" multiple><span class="help">시안에서는 운곡교 P1 도면 3장을 올린 것으로 본다</span></div><div class="row"><button class="btn primary" type="button" id="up">도면 읽고 추천 받기</button></div></section>';
|
||||
main.innerHTML = html;
|
||||
$('#up').onclick = function () { N.up = true; N.ans = {}; QS.forEach(function (q) { N.ans[q[0]] = EST[q[0]][0]; }); viewNew(); };
|
||||
return;
|
||||
}
|
||||
var ranked = TPLS.slice().sort(function (a, b) { return nMatch(b) - nMatch(a); });
|
||||
html += '<section class="strip"><p class="concl">도면 3장, 문자 2,366개를 읽었다 — 1위 ' + ranked[0].n + ' (3 / 3 일치)</p></section>';
|
||||
html += '<h2>1 추천 순위</h2><div class="tw"><table class="t"><caption>추정한 3문항과 일치한 수</caption><thead><tr><th scope="col">순위</th><th scope="col">템플릿</th><th class="num" scope="col">일치</th>' + QS.map(function (q) { return '<th scope="col">' + q[1] + '</th>'; }).join('') + '</tr></thead><tbody>';
|
||||
ranked.forEach(function (t, i) {
|
||||
html += '<tr><td class="num">' + (i + 1) + '</td><td><b>' + t.n + '</b></td><td class="num">' + nMatch(t) + ' / 3</td>' + QS.map(function (q) {
|
||||
var ok = t.p[q[0]] === EST[q[0]][0];
|
||||
return '<td>' + esc(t.p[q[0]]) + ' ' + (ok ? badge('good', '●', '일치') : badge('bad', '■', '다름')) + '</td>';
|
||||
}).join('') + '</tr>';
|
||||
});
|
||||
html += '</tbody></table></div>';
|
||||
html += '<h2>2 추정 근거</h2><div class="tw"><table class="t"><thead><tr><th scope="col">문항</th><th scope="col">추정</th><th scope="col">근거(도면 위치)</th><th scope="col">신뢰</th></tr></thead><tbody>';
|
||||
QS.forEach(function (q) { var e = EST[q[0]]; html += '<tr><td>' + q[1] + '</td><td><b>' + e[0] + '</b></td><td><span class="chip">' + esc(e[1]) + '</span></td><td>' + e[2] + '</td></tr>'; });
|
||||
html += '<tr><td>기둥 단면·철근 형상·철근 생성 방식</td><td>' + badge('dash', '◇', '판단 불가') + '</td><td>도면 문자로 판별할 근거가 없다. 사람이 답한다</td><td>-</td></tr></tbody></table></div>';
|
||||
html += '<div class="banner tip"><span class="m" aria-hidden="true">◆</span><div>코핑 하면 형상은 정면도의 큰 R 문자(10 m 이상)만 본다. 평면 모서리의 작은 R은 제외한다. 평면의 사각·직각과 각도는 문항이 아니라 아래 값으로 입력한다.</div></div>';
|
||||
html += '<h2>3 6문항 확인 후 교각 만들기</h2><div style="max-width:38em;display:flex;flex-direction:column;gap:var(--prism-space-200)">';
|
||||
QS.forEach(function (q) {
|
||||
html += '<div class="field"><label for="a_' + q[0] + '">' + q[1] + '</label><select id="a_' + q[0] + '" data-a="' + q[0] + '">' + OPTS[q[0]].map(function (o) { return '<option' + (N.ans[q[0]] === o ? ' selected' : '') + '>' + o + '</option>'; }).join('') + '</select></div>';
|
||||
});
|
||||
[['rs', '철근 형상 종류가 템플릿의 재료표 형식 열과 같은가'], ['rm', '철근 생성 방식(규칙 값 / 철근별 중심선)이 같은가']].forEach(function (q) {
|
||||
html += '<div class="field"><label for="' + q[0] + '">' + q[1] + '</label><select id="' + q[0] + '" data-r="' + q[0] + '">' + ['미확인', '예', '아니오'].map(function (o) { return '<option' + (N[q[0]] === o ? ' selected' : '') + '>' + o + '</option>'; }).join('') + '</select></div>';
|
||||
});
|
||||
html += '<fieldset class="card sunken"><legend class="lbl">각도 값 확인 <span class="muted">템플릿을 가르지 않는 값. 비워도 된다</span></legend><div class="grid3">' +
|
||||
[['skew', '코핑 평면 skew (°)'], ['brot', '받침 회전 (°)'], ['frot', '기초 회전 (°)']].map(function (q) { return '<div class="field"><label for="g_' + q[0] + '">' + q[1] + '</label><input id="g_' + q[0] + '" type="text" inputmode="decimal" data-g="' + q[0] + '" value="' + esc(N[q[0]]) + '"></div>'; }).join('') + '</div></fieldset>';
|
||||
var bad = nBad();
|
||||
html += '<section class="strip" role="status" aria-live="polite"><h3 style="margin:0 0 .25rem">결과 판정</h3><p class="concl">' + (bad.length ? badge('bad', '■', '같은 템플릿으로 만들 수 없음') + ' 다른 문항: ' + esc(bad.join(', ')) : badge('good', '●', '이 템플릿으로 만들 수 있음')) + '</p>' +
|
||||
(bad.length ? '<p class="muted" style="margin:.25rem 0 0">가장 가까운 템플릿에 생성기·검사기를 추가해야 한다. 그래도 진행하면 교각 이름 옆과 모든 화면 상단에 형식 불일치 경고가 계속 표시된다(닫을 수 없다).</p>' : '') + '</section>';
|
||||
html += '<div class="field' + (N.err ? ' bad' : '') + '"><label for="nm">교각 이름<span class="req">필수</span></label><input id="nm" type="text" value="' + esc(N.name) + '" style="max-width:20rem">' + (N.err ? '<span class="err"><span aria-hidden="true">■</span>' + esc(N.err) + '</span>' : '') + '</div>';
|
||||
html += '<div class="field"><label for="tp">템플릿</label><select id="tp" style="max-width:20rem">' + ranked.map(function (t, i) { return '<option value="' + t.n + '"' + (N.tpl === t.n ? ' selected' : '') + '>' + (i + 1) + '위 ' + t.n + '</option>'; }).join('') + '</select></div>';
|
||||
html += '<div class="row"><button class="btn primary" type="button" id="mk">' + (bad.length ? '그래도 만들기' : '교각 만들기') + '</button></div></div>';
|
||||
main.innerHTML = html;
|
||||
var y = window.scrollY;
|
||||
main.querySelectorAll('[data-a]').forEach(function (e) { e.onchange = function () { N.ans[e.getAttribute('data-a')] = e.value; viewNew(); window.scrollTo(0, y); $('#' + e.id).focus(); }; });
|
||||
main.querySelectorAll('[data-r]').forEach(function (e) { e.onchange = function () { N[e.getAttribute('data-r')] = e.value; viewNew(); window.scrollTo(0, y); $('#' + e.id).focus(); }; });
|
||||
main.querySelectorAll('[data-g]').forEach(function (e) { e.oninput = function () { N[e.getAttribute('data-g')] = e.value; }; });
|
||||
$('#nm').oninput = function () { N.name = this.value; };
|
||||
$('#tp').onchange = function () { N.tpl = this.value; viewNew(); window.scrollTo(0, y); $('#tp').focus(); };
|
||||
$('#mk').onclick = function () {
|
||||
N.name = $('#nm').value.trim();
|
||||
if (!N.name) { N.err = '교각 이름이 비어 있다. 폴더를 만들 이름이 필요하다. 이름을 입력한다'; viewNew(); $('#nm').focus(); return; }
|
||||
N.err = '';
|
||||
toast("교각 '" + N.name + "'을(를) 만들었다. 올린 도면이 교각 폴더로 옮겨졌고 6문항 답과 각도 값이 저장되었다." + (bad.length ? ' 형식 불일치 경고가 표시된다.' : ''));
|
||||
viewNew();
|
||||
};
|
||||
}
|
||||
|
||||
/* ---------- router ---------- */
|
||||
function route() {
|
||||
var h = location.hash || '#/bundles', m;
|
||||
$('#nav-bundles').classList.toggle('cur', h.indexOf('#/bundles') === 0 || h.indexOf('#/evidence') === 0);
|
||||
$('#nav-cand').style.fontWeight = h.indexOf('#/candidates') === 0 ? '700' : '500';
|
||||
$('#nav-new').style.fontWeight = h.indexOf('#/new') === 0 ? '700' : '500';
|
||||
if ((m = h.match(/^#\/evidence\/(\d+)/))) viewEvidence(+m[1]);
|
||||
else if (h.indexOf('#/candidates') === 0) viewCandidates();
|
||||
else if (h.indexOf('#/new') === 0) viewNew();
|
||||
else viewBundles();
|
||||
if (document.activeElement === document.body) main.focus();
|
||||
}
|
||||
window.addEventListener('hashchange', function () { window.scrollTo(0, 0); route(); });
|
||||
route();
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,182 @@
|
||||
/* PierProof — Prism app profile tokens (design.md 3.2 / 3.3) and components. Literals live only in :root. */
|
||||
:root {
|
||||
--prism-bg-canvas: #F4F3F0; --prism-bg-card: #FFFFFF;
|
||||
--prism-text-body: #474235; --prism-text-heading: #1F524B; --prism-text-subtle: #474235; --prism-text-accent: #D05C26;
|
||||
--prism-border-default: #474235; --prism-border-strong: #1F524B;
|
||||
--prism-status-do: #005A4E; --prism-status-do-bg: #DCEAE6;
|
||||
--prism-status-dont: #8F2A11; --prism-status-dont-bg: #F6DFDA;
|
||||
--prism-status-caution: #6B4A00; --prism-status-caution-bg: #F5E7CC;
|
||||
--prism-status-tip: #0A4E86; --prism-status-tip-bg: #DDE8F3;
|
||||
--prism-space-025: 0.125rem; --prism-space-050: 0.25rem; --prism-space-100: 0.5rem; --prism-space-150: 0.75rem;
|
||||
--prism-space-200: 1rem; --prism-space-300: 1.5rem; --prism-space-400: 2rem; --prism-space-600: 3rem; --prism-space-800: 4rem;
|
||||
--prism-type-caption: 0.8125rem; --prism-lh-caption: 1.55; --prism-type-body-sm: 0.875rem; --prism-lh-body: 1.7;
|
||||
--prism-type-body: 1rem; --prism-type-body-lg: 1.125rem; --prism-type-title-sm: 1.25rem; --prism-lh-title: 1.5;
|
||||
--prism-type-title: 1.625rem; --prism-type-title-lg: 2rem;
|
||||
--prism-radius-sm: 4px; --prism-radius-md: 8px; --prism-radius-lg: 12px; --prism-radius-pill: 9999px;
|
||||
--prism-stroke-hairline: 1px; --prism-stroke-regular: 2px; --prism-stroke-bold: 3px;
|
||||
--prism-z-raised: 100; --prism-z-sticky: 200; --prism-z-scrim: 400; --prism-z-modal: 500;
|
||||
--prism-scrim: rgba(0, 0, 0, 0.32);
|
||||
--prism-motion-fast: 100ms; --prism-ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
||||
--prism-focus-ring: 3px; --prism-focus-offset: 2px; --prism-measure-max: 38em;
|
||||
--prism-font: Pretendard, -apple-system, BlinkMacSystemFont, "Noto Sans KR", "Apple SD Gothic Neo", "Malgun Gothic", sans-serif;
|
||||
|
||||
--prism-comp-line: var(--prism-border-default); --prism-comp-line-strong: var(--prism-border-strong);
|
||||
--prism-comp-state-good-fg: var(--prism-status-do); --prism-comp-state-good-bg: var(--prism-status-do-bg);
|
||||
--prism-comp-state-bad-fg: var(--prism-status-dont); --prism-comp-state-bad-bg: var(--prism-status-dont-bg);
|
||||
--prism-comp-state-warn-fg: var(--prism-status-caution); --prism-comp-state-warn-bg: var(--prism-status-caution-bg);
|
||||
--prism-comp-state-info-fg: var(--prism-status-tip); --prism-comp-state-info-bg: var(--prism-status-tip-bg);
|
||||
--prism-comp-rail-width: 15rem; --prism-comp-header-height: 3.5rem; --prism-comp-hit-min: 2.75rem;
|
||||
--prism-comp-table-head-bg: var(--prism-bg-canvas);
|
||||
--prism-comp-on-emphasis: var(--prism-bg-card);
|
||||
}
|
||||
:root[data-theme="dark"] {
|
||||
--prism-bg-canvas: #111111; --prism-bg-card: #111111; --prism-text-body: #F4F3F0; --prism-text-heading: #F4F3F0;
|
||||
--prism-text-subtle: #D3D3D3; --prism-border-default: #D3D3D3; --prism-border-strong: #F4F3F0;
|
||||
--prism-status-do: #DCEAE6; --prism-status-do-bg: #005A4E; --prism-status-dont: #F6DFDA; --prism-status-dont-bg: #8F2A11;
|
||||
--prism-status-caution: #F5E7CC; --prism-status-caution-bg: #6B4A00; --prism-status-tip: #DDE8F3; --prism-status-tip-bg: #0A4E86;
|
||||
}
|
||||
|
||||
* { box-sizing: border-box; }
|
||||
body { margin: 0; background: var(--prism-bg-canvas); color: var(--prism-text-body); font-family: var(--prism-font);
|
||||
font-size: var(--prism-type-body-sm); line-height: var(--prism-lh-body); font-variant-numeric: tabular-nums; }
|
||||
a { color: var(--prism-text-heading); }
|
||||
h1, h2, h3, p, dl, dd, ol, ul { margin: 0; padding: 0; }
|
||||
:focus-visible { outline: var(--prism-focus-ring) solid var(--prism-comp-line-strong); outline-offset: var(--prism-focus-offset); }
|
||||
.skip { position: absolute; left: -999rem; }
|
||||
|
||||
/* shell */
|
||||
.app { min-height: 100%; display: flex; flex-direction: column; position: relative; }
|
||||
.top { height: var(--prism-comp-header-height); background: var(--prism-bg-card); border-bottom: var(--prism-stroke-hairline) solid var(--prism-comp-line);
|
||||
display: flex; align-items: center; gap: var(--prism-space-300); padding-inline: var(--prism-space-300); position: sticky; top: 0; z-index: var(--prism-z-sticky); }
|
||||
.brand { display: flex; align-items: center; gap: var(--prism-space-100); font-weight: 700; font-size: var(--prism-type-body-lg); color: var(--prism-text-heading); letter-spacing: -0.01em; }
|
||||
.brand i { width: 0.7rem; height: 0.7rem; background: var(--prism-text-accent); transform: rotate(45deg); display: block; }
|
||||
.top .where { font-size: var(--prism-type-caption); font-weight: 500; }
|
||||
.top .meta { margin-left: auto; display: flex; gap: var(--prism-space-300); font-size: var(--prism-type-caption); }
|
||||
.body { display: flex; flex: 1; min-height: 0; }
|
||||
.rail { width: var(--prism-comp-rail-width); flex: none; background: var(--prism-bg-card); border-right: var(--prism-stroke-hairline) solid var(--prism-comp-line);
|
||||
padding: var(--prism-space-300) var(--prism-space-200); display: flex; flex-direction: column; gap: var(--prism-space-200); }
|
||||
.rail .cap { font-size: var(--prism-type-caption); font-weight: 500; letter-spacing: 0.06em; }
|
||||
.rail .pier { font-weight: 700; font-size: var(--prism-type-body); color: var(--prism-text-heading); }
|
||||
.rail ol { list-style: none; display: flex; flex-direction: column; gap: var(--prism-space-050); }
|
||||
.step { display: flex; align-items: center; gap: var(--prism-space-150); min-height: var(--prism-comp-hit-min); padding: 0 var(--prism-space-100);
|
||||
border-radius: var(--prism-radius-sm); color: var(--prism-text-body); text-decoration: none; }
|
||||
.step .n { width: 1.5rem; height: 1.5rem; flex: none; border: var(--prism-stroke-regular) dashed var(--prism-comp-line); border-radius: var(--prism-radius-pill);
|
||||
display: grid; place-items: center; font-size: var(--prism-type-caption); font-weight: 700; }
|
||||
.step.done .n { background: var(--prism-text-heading); color: var(--prism-comp-on-emphasis); border: var(--prism-stroke-regular) solid var(--prism-text-heading); }
|
||||
.step.cur { background: var(--prism-bg-canvas); font-weight: 700; }
|
||||
.step.cur .n { border: var(--prism-stroke-bold) solid var(--prism-comp-line-strong); }
|
||||
.rail .sub { display: flex; flex-direction: column; margin-left: 2.1rem; }
|
||||
.rail .sub a { min-height: 2rem; display: flex; align-items: center; font-size: var(--prism-type-caption); color: var(--prism-text-body); }
|
||||
.rail hr { border: 0; border-top: var(--prism-stroke-hairline) solid var(--prism-comp-line); width: 100%; margin: 0; }
|
||||
.main { flex: 1; min-width: 0; padding: var(--prism-space-400); display: flex; flex-direction: column; gap: var(--prism-space-300); }
|
||||
.main > .head { display: flex; flex-direction: column; gap: var(--prism-space-100); }
|
||||
h1 { font-size: var(--prism-type-title); line-height: var(--prism-lh-title); color: var(--prism-text-heading); font-weight: 700; }
|
||||
h2 { font-size: var(--prism-type-title-sm); line-height: var(--prism-lh-title); font-weight: 500; color: var(--prism-text-heading); }
|
||||
h3 { font-size: var(--prism-type-body-lg); font-weight: 700; color: var(--prism-text-heading); }
|
||||
.eyebrow { font-size: var(--prism-type-caption); font-weight: 500; letter-spacing: 0.06em; }
|
||||
.lead { max-width: var(--prism-measure-max); font-size: var(--prism-type-body); }
|
||||
.cap { font-size: var(--prism-type-caption); }
|
||||
.muted { color: var(--prism-text-subtle); }
|
||||
.row { display: flex; gap: var(--prism-space-200); align-items: center; flex-wrap: wrap; }
|
||||
.row.end { justify-content: flex-end; }
|
||||
.stack { display: flex; flex-direction: column; gap: var(--prism-space-200); }
|
||||
.grid3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--prism-space-300); }
|
||||
.grid2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--prism-space-300); }
|
||||
.split { display: grid; grid-template-columns: minmax(0, 4fr) minmax(0, 8fr); gap: var(--prism-space-300); align-items: start; }
|
||||
.grow { flex: 1; }
|
||||
|
||||
/* scope, card, strip, banner */
|
||||
.scope { background: var(--prism-bg-card); border: var(--prism-stroke-hairline) solid var(--prism-comp-line); padding: var(--prism-space-150) var(--prism-space-200);
|
||||
display: flex; gap: var(--prism-space-400); font-size: var(--prism-type-body-sm); border-radius: var(--prism-radius-sm); }
|
||||
.scope b { font-weight: 700; }
|
||||
.card { background: var(--prism-bg-card); border: var(--prism-stroke-hairline) solid var(--prism-comp-line); border-radius: var(--prism-radius-md); padding: var(--prism-space-200);
|
||||
display: flex; flex-direction: column; gap: var(--prism-space-150); }
|
||||
.card.sunken { background: var(--prism-bg-canvas); }
|
||||
.strip { background: var(--prism-bg-card); border: var(--prism-stroke-regular) solid var(--prism-comp-line-strong); border-radius: var(--prism-radius-md);
|
||||
padding: var(--prism-space-200) var(--prism-space-300); display: flex; flex-direction: column; gap: var(--prism-space-150); }
|
||||
.strip .concl { font-size: var(--prism-type-body-lg); font-weight: 700; color: var(--prism-text-heading); max-width: none; }
|
||||
.counts { display: flex; gap: var(--prism-space-200); flex-wrap: wrap; align-items: stretch; }
|
||||
.cnt { display: flex; align-items: baseline; gap: var(--prism-space-100); min-height: var(--prism-comp-hit-min); padding: 0 var(--prism-space-200);
|
||||
background: var(--prism-bg-card); border: var(--prism-stroke-regular) solid var(--prism-comp-line); border-radius: var(--prism-radius-sm); font: inherit; color: inherit; cursor: pointer; }
|
||||
.cnt b { font-size: var(--prism-type-title); font-weight: 700; line-height: 1.2; }
|
||||
.cnt.sel { background: var(--prism-text-heading); color: var(--prism-comp-on-emphasis); border-color: var(--prism-text-heading); }
|
||||
.banner { border: var(--prism-stroke-regular) solid var(--prism-comp-state-warn-fg); background: var(--prism-comp-state-warn-bg); color: var(--prism-comp-state-warn-fg);
|
||||
border-radius: var(--prism-radius-sm); padding: var(--prism-space-150) var(--prism-space-200); display: flex; gap: var(--prism-space-150); align-items: flex-start; }
|
||||
.banner b { font-weight: 700; }
|
||||
.banner.tip { border-color: var(--prism-comp-state-info-fg); background: var(--prism-comp-state-info-bg); color: var(--prism-comp-state-info-fg); }
|
||||
.banner.dont { border-color: var(--prism-comp-state-bad-fg); background: var(--prism-comp-state-bad-bg); color: var(--prism-comp-state-bad-fg); }
|
||||
.banner.good { border-color: var(--prism-comp-state-good-fg); background: var(--prism-comp-state-good-bg); color: var(--prism-comp-state-good-fg); }
|
||||
.banner .m { flex: none; }
|
||||
|
||||
/* badge */
|
||||
.b { display: inline-flex; align-items: center; gap: var(--prism-space-050); padding: var(--prism-space-025) var(--prism-space-100); white-space: nowrap;
|
||||
font-size: var(--prism-type-caption); font-weight: 500; line-height: 1.5; border: var(--prism-stroke-regular) solid var(--prism-comp-line);
|
||||
border-radius: var(--prism-radius-sm); color: var(--prism-text-body); background: transparent; }
|
||||
.b.good { color: var(--prism-comp-state-good-fg); background: var(--prism-comp-state-good-bg); border-color: var(--prism-comp-state-good-fg); }
|
||||
.b.warn { color: var(--prism-comp-state-warn-fg); background: var(--prism-comp-state-warn-bg); border-color: var(--prism-comp-state-warn-fg); }
|
||||
.b.info { color: var(--prism-comp-state-info-fg); background: var(--prism-comp-state-info-bg); border-color: var(--prism-comp-state-info-fg); }
|
||||
.b.bad { color: var(--prism-comp-state-bad-fg); background: var(--prism-comp-state-bad-bg); border-color: var(--prism-comp-state-bad-fg); border-width: var(--prism-stroke-bold); }
|
||||
.b.dash { border-style: dashed; }
|
||||
.b.fixed { color: var(--prism-comp-on-emphasis); background: var(--prism-text-heading); border-color: var(--prism-text-heading); }
|
||||
.b .m { font-size: 0.7em; }
|
||||
|
||||
/* buttons, fields */
|
||||
.btn { min-height: var(--prism-comp-hit-min); padding: 0 var(--prism-space-200); border-radius: var(--prism-radius-sm); font: inherit; font-weight: 500;
|
||||
cursor: pointer; border: var(--prism-stroke-regular) solid var(--prism-text-heading); background: var(--prism-bg-card); color: var(--prism-text-heading);
|
||||
display: inline-flex; align-items: center; justify-content: center; gap: var(--prism-space-100); text-decoration: none; white-space: nowrap; }
|
||||
.btn.primary { background: var(--prism-text-heading); color: var(--prism-comp-on-emphasis); }
|
||||
.btn.quiet { border-color: transparent; background: transparent; text-decoration: underline; }
|
||||
.btn.danger { border-color: var(--prism-comp-state-bad-fg); color: var(--prism-comp-state-bad-fg); }
|
||||
.btn.sm { min-height: var(--prism-comp-hit-min); padding: 0 var(--prism-space-150); font-size: var(--prism-type-caption); }
|
||||
.field { display: flex; flex-direction: column; gap: var(--prism-space-050); }
|
||||
.field label, .lbl { font-weight: 700; font-size: var(--prism-type-body-sm); }
|
||||
.req { font-weight: 500; font-size: var(--prism-type-caption); margin-left: var(--prism-space-100); }
|
||||
.field input, .field select, .field textarea { min-height: var(--prism-comp-hit-min); padding: var(--prism-space-100) var(--prism-space-150); font: inherit;
|
||||
color: var(--prism-text-body); background: var(--prism-bg-card); border: var(--prism-stroke-regular) solid var(--prism-comp-line); border-radius: var(--prism-radius-sm); }
|
||||
.field textarea { font-size: var(--prism-type-body-sm); line-height: 1.6; resize: none; }
|
||||
.field .help { font-size: var(--prism-type-caption); }
|
||||
.field.bad input, .field.bad textarea { border-color: var(--prism-comp-state-bad-fg); border-width: var(--prism-stroke-bold); }
|
||||
.err { color: var(--prism-comp-state-bad-fg); font-size: var(--prism-type-caption); font-weight: 500; display: flex; gap: var(--prism-space-050); }
|
||||
.choice { display: flex; gap: var(--prism-space-300); align-items: center; }
|
||||
.choice label { display: inline-flex; align-items: center; gap: var(--prism-space-100); min-height: var(--prism-comp-hit-min); font-weight: 500; }
|
||||
.choice input { width: 1.25rem; height: 1.25rem; accent-color: var(--prism-text-heading); }
|
||||
|
||||
/* table */
|
||||
.tw { overflow-x: auto; background: var(--prism-bg-card); border: var(--prism-stroke-hairline) solid var(--prism-comp-line); border-radius: var(--prism-radius-sm); }
|
||||
table.t { width: 100%; border-collapse: collapse; font-size: var(--prism-type-body-sm); }
|
||||
table.t caption { text-align: left; font-weight: 700; padding: var(--prism-space-100) var(--prism-space-150); color: var(--prism-text-heading); }
|
||||
table.t th, table.t td { padding: var(--prism-space-100) var(--prism-space-150); border-bottom: var(--prism-stroke-hairline) solid var(--prism-comp-line); text-align: left; vertical-align: middle; }
|
||||
table.t thead th { position: sticky; top: 0; background: var(--prism-comp-table-head-bg); font-weight: 700; white-space: nowrap; border-bottom: var(--prism-stroke-regular) solid var(--prism-comp-line); }
|
||||
table.t td.num, table.t th.num { text-align: right; }
|
||||
table.t tr.sel td { background: var(--prism-comp-table-head-bg); }
|
||||
table.t tr.sep td { background: var(--prism-comp-table-head-bg); font-weight: 700; color: var(--prism-text-heading); }
|
||||
table.t td a { font-weight: 700; }
|
||||
.chip { display: inline-block; border: var(--prism-stroke-hairline) solid var(--prism-comp-line); border-radius: var(--prism-radius-sm);
|
||||
padding: 0 var(--prism-space-100); font-size: var(--prism-type-caption); white-space: nowrap; background: var(--prism-bg-card); }
|
||||
|
||||
/* key-value, evidence, diff */
|
||||
dl.kv { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: var(--prism-space-100) var(--prism-space-300); font-size: var(--prism-type-body-sm); }
|
||||
dl.kv dt { font-weight: 700; }
|
||||
.pbar { height: 0.75rem; border: var(--prism-stroke-regular) solid var(--prism-comp-line); border-radius: var(--prism-radius-pill); overflow: hidden; background: var(--prism-bg-card); }
|
||||
.pbar > i { display: block; height: 100%; background: var(--prism-text-heading); }
|
||||
.list { list-style: none; display: flex; flex-direction: column; }
|
||||
.list li { display: flex; align-items: center; gap: var(--prism-space-100); min-height: var(--prism-comp-hit-min); padding: 0 var(--prism-space-150); border-bottom: var(--prism-stroke-hairline) solid var(--prism-comp-line); }
|
||||
.list li a { flex: 1; font-weight: 500; text-decoration: none; }
|
||||
.list li.cur { background: var(--prism-bg-canvas); }
|
||||
.list li.cur a { font-weight: 700; }
|
||||
|
||||
/* modal */
|
||||
.scrim { position: absolute; inset: 0; background: var(--prism-scrim); z-index: var(--prism-z-scrim); display: flex; align-items: center; justify-content: center; padding: var(--prism-space-400); }
|
||||
.modal { background: var(--prism-bg-card); border: var(--prism-stroke-regular) solid var(--prism-comp-line-strong); border-radius: var(--prism-radius-lg);
|
||||
width: 100%; max-width: 62rem; padding: var(--prism-space-300); display: flex; flex-direction: column; gap: var(--prism-space-200); z-index: var(--prism-z-modal); }
|
||||
.modal header { display: flex; align-items: center; gap: var(--prism-space-200); }
|
||||
.modal header h2 { flex: 1; }
|
||||
.scroll { max-height: 18rem; overflow-y: auto; border: var(--prism-stroke-hairline) solid var(--prism-comp-line); border-radius: var(--prism-radius-sm); }
|
||||
.drawing { background: var(--prism-bg-card); border: var(--prism-stroke-regular) solid var(--prism-comp-line); border-radius: var(--prism-radius-sm); display: block; width: 100%; height: auto; }
|
||||
.toc a { display: flex; align-items: center; min-height: var(--prism-comp-hit-min); padding: 0 var(--prism-space-150); text-decoration: none; font-weight: 500; border-radius: var(--prism-radius-sm); }
|
||||
.toc a.cur { background: var(--prism-bg-canvas); font-weight: 700; }
|
||||
.toc ol { list-style: none; }
|
||||
.num { font-variant-numeric: tabular-nums; }
|
||||
pre.code { margin: 0; background: var(--prism-bg-canvas); border: var(--prism-stroke-hairline) solid var(--prism-comp-line); border-radius: var(--prism-radius-sm);
|
||||
padding: var(--prism-space-150); font-family: var(--prism-font); font-size: var(--prism-type-caption); line-height: 1.6; white-space: pre-wrap; }
|
||||
@media (prefers-reduced-motion: reduce) { * { animation: none !important; transition: none !important; } }
|
||||
Whitespace-only changes.
@@ -0,0 +1,306 @@
|
||||
# Ramp-A교 P1 교각 도면 판독서 (형상·받침)
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-13 | 심영표 | 최초 작성 (G1 형상·G5 받침 판독, 결정 요청 4건) | 철근(G2~G4)은 다음 Task |
|
||||
| v0.1.01 | 2026-10-13 | 심영표 | 6장 R1~R4 사용자 결정 반영, 9장 모델·게이트 결과, 10장 앱 판독기 보완 신설 | G1 97/97·G5 39/39 PASS |
|
||||
| v0.1.02 | 2026-10-13 | 심영표 | 11장 기둥 철근(G2: P1·P2·P3) 판독 신설, 결정 요청 K1~K4 | 말뚝 철근망은 범위 밖(사용자 결정) |
|
||||
| v0.1.03 | 2026-10-13 | 심영표 | 11.3 K1~K4 결정 반영, 11.4 G2 모델·게이트 결과 신설 | G1 97/97·G2 26/26·G5 39/39 PASS |
|
||||
| v0.1.04 | 2026-10-13 | 심영표 | 12장 말뚝 철근망(G3: P1-1·P1-2·P2-1·P3-1·P3-2·PLATE) 판독 신설, 결정 요청 S1~S6. 11.4 H35 색 사용자 확정 | SPACER는 공식만 기록 |
|
||||
| v0.1.05 | 2026-10-13 | 심영표 | 12.3 S1~S6 결정 반영, 12.4 G3 모델·게이트 결과 신설 | G1~G5 PASS (97·26·48·39) |
|
||||
| v0.1.06 | 2026-10-14 | 심영표 | 13장 코핑 철근(G4: C1~C16, S1~S4) 판독 신설, 결정 요청 T1~T6 | 파일명 날짜 = 개정일 |
|
||||
| v0.1.07 | 2026-10-14 | 심영표 | 13.3 T1~T6 결정 반영, 13.4 G4 모델·게이트 결과와 추가 [추론](모서리 단축·안쪽 스터럽 +20) 신설 | G1~G5 전 게이트 PASS |
|
||||
|
||||
## 1. 대상 도면
|
||||
|
||||
| 식별자 | 파일 (RAG, 읽기 전용) | 내용 |
|
||||
|---|---|---|
|
||||
| D1 | `Ramp-A교 P1 교각(1).dwg` | 일반도: 정면·측면·평면·기둥 단면, 교량받침 상세도·ELEVATION TABLE, 솔플레이트 상세 TABLE, 상세 A·B |
|
||||
| D2 | `(2).dwg` | 코핑·기둥 배근(1): 평면·정면·측면, 단면 C-C·D-D, 구조물 치수표 |
|
||||
| D3 | `(3).dwg` | 주철근 조립도, 단면 A-A·B-B·E-E·F-F, 교좌면 보강 철근, 철근 재료표, 커플러 수량 |
|
||||
| D4 | `(4).dwg` | 기둥 철근 재료표, 떠오름 방지 PLATE, 철근망 저부철근, SPACER, 단면 G~J |
|
||||
|
||||
- 변환본·색인·판독 스크립트: `Code/RampA판독/` (`convert_index.py`, `dxftools.py`, `extract_g1.py` → `판독/g1_values.json`)
|
||||
- 치수는 DIMENSION과 TEXT(CS-DIMT)가 섞여 있습니다. 형상 값은 D1 작도 객체를 핸들로 읽고, 치수 문자로 대조했습니다.
|
||||
|
||||
## 2. 형식
|
||||
|
||||
- **단주 + Y형(나팔형) 코핑 + 단일 현장타설말뚝**: 기초판이 없고, 기둥 아래로 말뚝이 바로 이어집니다.
|
||||
- 기존 앱 형식(운곡교: 기초판 + 말뚝, 울산: 직접기초)과 다른 세 번째 형식입니다. 기둥 1개 + 코핑이므로 T형 계열로 앱에 추가합니다(사용자 결정 2026-10-13).
|
||||
- 강도: 기둥 40 MPa, 코핑 40 MPa, 현장타설말뚝 35 MPa (D1 NOTE)
|
||||
|
||||
## 3. 좌표 기준
|
||||
|
||||
- 원점 = 교각 중심. X = 코핑 길이 방향(교축직각), Y = 교축 방향(평면 위쪽 +), Z = EL × 1000
|
||||
- D1 정면도: z = 도면 y + 534,115.2
|
||||
- 말뚝 하단 y −501,363.2 → EL 32.752 ✓
|
||||
- 코핑 상면 y −474,163.2 / −473,848.2 → EL 59.952 / 60.267 ✓ (EL 문자 일치)
|
||||
|
||||
## 4. 판독값 (params 생성값)
|
||||
|
||||
| 부재 | 값 | 근거(D1 핸들) | 치수 문자 대조 |
|
||||
|---|---|---|---|
|
||||
| 코핑 상면 | 좌 x −3,500~0 EL 59.952 / 우 0~+3,500 EL 60.267, 중앙에 단차 315 | 856, 854, 855 | '7,000', 'EL=59.952', 'EL=60.267', '315' |
|
||||
| 코핑 끝면(정면) | 하단 ±3,800 EL 58.952 → 상단 ±3,500 | 857, 7D1 | '7,600' = 2,800+2,000+2,800, '1,000' |
|
||||
| 코핑 하면 | R 5,000 원호, 중심 (±4,638.8, EL 54.023), 기둥면 (±1,000, EL 57.452) → 끝 하단 (±3,800, EL 58.952) | ARC 501, 4FF | 'R=5,000', '1,500' |
|
||||
| 코핑 폭(측면) | 상부 2,200 일정 (EL 58.952~상면), 하면 구간은 2,200 → 2,000 직선 감소 (EL 58.952 → 57.452) | 520·521, 503·504 | '2,200' (1,100+1,100), '2,000' |
|
||||
| 코핑 끝(평면) | 상단 모서리 직선 x ±3,500, 하단 모서리 원호: 모서리 ±3,650(y ±1,100), 중앙 ±3,800, R 4,108 (볼록) | 51A·519 bulge 0.136, 51F | — |
|
||||
| 기둥 | 원형 Ø2,000, EL 45.452 ~ 57.452 (12,000) | 60F, 610 | '2,000', '11,500'+'500' |
|
||||
| 말뚝 상부 | Ø2,500, EL 40.252 ~ 45.452 (5,200) | 881·87F, 89F | '2,500', '5,200', 'EL=45.452' |
|
||||
| 말뚝 하부(암반 근입) | Ø2,350, EL 32.752 ~ 40.252 (7,500) | 873·875, 87E | '75, 2,350, 75', '7,500', 'EL=32.752' |
|
||||
| 지반선 | EL 45.952 (모델 안 함) | 89E | — |
|
||||
| 받침 대좌 1·2 | 중심 (∓2,250, 0), 1,400(교축) × 1,300, 회전 −5.55° / −9.19° (교축에서 반시계) | 49D~4A0, 4A5~4A8 | '2,250' ×2, C3 1,400·C6 1,300 |
|
||||
| 패드(h2) | 하면 (A+200)×(B+200) = 1,100×1,000 → 상면 (A+100)×(B+100) = 1,000×900, 같은 회전 | 488·48B, 487·48A | 운곡교·울산과 같은 규칙 |
|
||||
| 받침 본체 | A 900 × B 800 (교축 × 직각) | 486, 489 | TABLE A·B |
|
||||
|
||||
**높이 사슬 확인**: 7,500 + 5,200 + 12,000 + 1,500 + 1,000 = 27,200 (치수 '27,200' 일치)
|
||||
|
||||
## 5. 받침 표 (D1, 앱 표 인식기로 읽음)
|
||||
|
||||
| NO | 형식 | EL.'X' | h1 | h2 | h3 | h4 | A | B | C3 | C6 | E |
|
||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||
| 1 | 7000 kN | 60.112 | 110 | 50 | 190 | 50 | 900 | 800 | 1,400 | 1,300 | 400 |
|
||||
| 2 | 7000 kN | 60.427 | 110 | 50 | 190 | 50 | 900 | 800 | 1,400 | 1,300 | 400 |
|
||||
|
||||
- 검산: 코핑 상면 + h1 + h2 = EL.'X' → 59.952 + 0.160 = 60.112 ✓, 60.267 + 0.160 = 60.427 ✓
|
||||
- E = h1+h2+h3+h4 = 400 ✓
|
||||
|
||||
| NO | S(%) | L | W | T | T1 | T2 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 1 | −5.526 | 1,000 | 900 | 50 | 78 | 22 |
|
||||
| 2 | −5.526 | 1,000 | 900 | 50 | 78 | 22 |
|
||||
|
||||
- 검산: T ± |S|·L/2 = 50 ± 27.6 = 77.6 / 22.4 → T1 78 / T2 22 (반올림) ✓
|
||||
|
||||
## 6. 도면 간 차이·해석이 필요한 사항 (결정 요청)
|
||||
|
||||
> **[결정 2026-10-13 / 심영표] R1~R4 모두 권장안 채택.**
|
||||
|
||||
| # | 내용 | 권장안 | 다른 안 |
|
||||
|---|---|---|---|
|
||||
| R1 | **장식 홈**(상세 "B" 기둥 홈 상세도): 기둥 전후면(±Y)에 폭 30·깊이 30 홈 2줄. 코핑 전후면에서는 V자로 이어짐(정면 PLINE 7DC, 평면 517·518·51B·51C) | 모델 안 함. 콘크리트 부피 영향 약 0.05 m³ 미만, 형상 검사 대상 외로 기록 | 홈까지 모델링(불리언 증가, 실패 위험) |
|
||||
| R2 | **코핑 하면 구간 단면**(EL 57.452~58.952): 정면은 R5,000 원호, 측면은 2,200→2,000 직선. 단면 모양은 도면에 없음 | 직사각 단면 = 정면 윤곽 압출 ∩ 측면 윤곽 압출. 정면·측면 두 투영과 정확히 일치. 기둥 상단(Ø2,000 원)과 만나는 면은 2,000×2,000 정사각이 되어 모서리가 원 밖으로 나옴 | 원 → 직사각 로프트(투영과 어긋남) |
|
||||
| R3 | **우측 끝면 상단**: 정면 작도 x 3,495.1 vs 평면 상단 모서리 3,500 (차이 4.9) | 평면값 3,500 (좌측과 대칭, 치수 '7,000') | 정면 작도값 |
|
||||
| R4 | **솔플레이트 두꺼운 쪽**: S < 0, 표에 방향 표시 없음 | 운곡교와 같은 규칙(교축 −Y 쪽이 두꺼움 T1 78) [추론] | +Y 쪽 |
|
||||
|
||||
- 참고: 말뚝 상부 Ø2,500 구간은 '75, 2,350, 75'로 표기되어 케이싱 두께를 포함한 지름일 수 있습니다. 작도선(콘크리트 레이어) 그대로 Ø2,500 콘크리트로 모델링합니다.
|
||||
|
||||
## 7. 검사 기준값 (expected, 치수 문자·표에서 따로 옮김)
|
||||
|
||||
- 코핑: 상면 7,000, 하단 7,600, 높이 1,000(끝면) + 1,500(하면), R=5,000, 폭 2,200, 상면 EL 59.952 / 60.267
|
||||
- 기둥 Ø2,000, 말뚝 Ø2,500 / Ø2,350, 구간 길이 11,500+500 / 5,200 / 7,500, EL 45.452 / 32.752, 전체 27,200
|
||||
- 받침: ELEVATION TABLE·솔플레이트 TABLE 값, 대좌 위치 ±2,250
|
||||
- 대좌 회전각과 평면 끝 원호는 치수 문자가 없어 작도값만 있습니다 → 검사는 위치·크기·EL로 하고, 회전각은 작도값 기록으로 둡니다.
|
||||
|
||||
## 8. 다음 단계
|
||||
|
||||
1. ~~6장 R1~R4 결정~~ (완료)
|
||||
2. ~~생성기·검사기 작성, G1·G5 게이트~~ (완료, 9장)
|
||||
3. 앱에서 묶음 확정·게이트 승인(담당자)
|
||||
4. 철근(G2~G4)은 다음 Task(D2~D4 판독)
|
||||
|
||||
## 9. 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 앱 교각 | `Code/교각모델링앱/data/Ramp-A교P1` (scope G1·G5, 생성기 `concrete_shaft.py`, 검사기 `g1_shaft.py`, G5는 기존 `bearings.py`·`g5_bearings.py`) |
|
||||
| 모델 | `data/Ramp-A교P1/runs/current/G5.3dm` (객체 12: 말뚝 2, 기둥, 코핑, 대좌 2, 패드 2, 받침 2, 솔플레이트 2) |
|
||||
| G1 | PASS 97/97 — 음성 시험(BS02 수평 3, BP01 수직 2) 검출, 재로드 8=8 |
|
||||
| G5 | PASS 39/39 — 음성 시험(BB02 수평 5, SP01 수직 5) 검출, 재로드 12=12, G1 객체 8개 불변 |
|
||||
| 부피(m³) | 말뚝 하부 32.530, 상부 25.525, 기둥 37.699, 코핑 31.393 (코핑은 치수 문자 윤곽 수치적분과 0.1% 이내) |
|
||||
| 보호 템플릿 | `data/_템플릿/Ramp-A교P1형` (입력 해시 3f70fab043209dab) |
|
||||
| 미확정 | 앱 묶음 확정·게이트 승인은 담당자가 앱에서 수행(Agent는 엔진으로 실행만 함) |
|
||||
|
||||
- 검사기 1차 실행 FAIL 1건: 측면 단면을 X=0에서 잘라 상면 단차면과 겹침(검사기 결함) → X=+1로 옮겨 해소
|
||||
- 육안 확인 미실시: Rhino 화면 캡처 수단이 없어 모델 모양은 단면·부피·내외부 점 검사로만 확인했습니다. 담당자가 G5.3dm을 열어 확인해 주세요.
|
||||
|
||||
## 10. 앱 판독기 보완 (이 도면에서 드러난 결함)
|
||||
|
||||
| # | 결함 | 수정 | 회귀 |
|
||||
|---|---|---|---|
|
||||
| B1 | 솔플레이트 표 '1,000'(천 단위 쉼표)에서 정수 변환 오류 → [표 후보값] 화면 오류 | `reader._int` | 운곡교 P1·P2·울산 표 레코드·후보 불변 |
|
||||
| B2 | 표 제목과 머리행 사이의 상세도 라벨 줄(C1 C3 C2 S1 S2)을 머리행으로 잡음 | 머리행 = 4칸 이상이고, 아래 첫 숫자 줄이 칸 수 절반 이상인 첫 줄 | 같음 |
|
||||
| B3 | ELEVATION 표 창이 아래 솔플레이트 표·상세 치수까지 내려가 가짜 행(NO.750) 생성 | 다른 종류 표 제목에서도 창 하단을 자름 | 같음 |
|
||||
|
||||
## 11. 기둥 철근 판독 (G2: P1·P2·P3)
|
||||
|
||||
- 범위: 기둥 철근 P1·P2·P3만 다룹니다(사용자 결정 2026-10-13). 말뚝 철근망(P1-1·P1-2·P2-1·P3-1·P3-2·떠오름 방지 PLATE)은 범위 밖입니다.
|
||||
- 근거: D2 정면·측면·단면 C-C·D-D, D2 구조물 치수표, D3 철근 상세·재료표, D4 재료표(기둥). 스크립트 `Code/RampA판독/extract_g2.py` → `판독/g2_values.json`
|
||||
- D2 정면도는 파단 표시가 있어 중간 4,000이 생략돼 있습니다. 높이는 치수선 끝점(사슬)으로 읽었습니다.
|
||||
- EL 환산: EL = 45,452 + (y + 700,829.1), 파단 위는 +4,000
|
||||
- 사슬 끝점 2개(47.592, 59.292)로 환산식을 확인했습니다.
|
||||
|
||||
### 11.1 재료표 (D4 '철근 재료표(기둥)', D3 철근 상세)
|
||||
|
||||
| 마크 | 직경 | L | N | 형상 (D3 상세) |
|
||||
|---|---|---|---|---|
|
||||
| P1 | H35 | 16,300 | 54 | 직선, 하단 커플러로 말뚝 주철근 P1-1과 이음(커플러 수량 P1 54) |
|
||||
| P2 | H16 | 7,758 | 107 | 원형 띠철근 r 901, a 2,829(반원), b 200(갈고리), j 650 × 2(겹이음). 2×(2,829+650+2×200) = 7,758 ✓ |
|
||||
| P3 | H16 | 2,274 | 108 | 연결철근 r 60, a 200, b 1,832, c 141, d 100. a+b+c+d = 2,273 ≈ 2,274 |
|
||||
|
||||
### 11.2 판독값
|
||||
|
||||
| 항목 | 값 | 근거 |
|
||||
|---|---|---|
|
||||
| P1 배치 | 반지름 875, 54개, 0°부터 6.667° 간격 | 단면 C-C 기호 54개(r 875.0), '125, 875, 875, 125', DIVISION 54 |
|
||||
| P1 높이 | 하단 EL 43.492(말뚝 상단 아래 1,960), 상단 EL 59.752(좌측 코핑 상면 아래 200) → 작도 길이 16,260 | 정면 주철근 작도선, 사슬 '2,000' |
|
||||
| 띠철근 외측 사슬 | 43.492 \| 2,000 \| 45.492 \| H4 14@150 = 2,100 \| 47.592 \| H5 78@150 = 11,700 \| 59.292 \| H6 560 \| 59.852 \| 100 \| 59.952 | D2 치수선, 구조물 치수표(H 14,460) |
|
||||
| 크로스타이 사슬 | 45.492 \| H1 7@300 = 2,100 \| 47.592 \| H2 39@300 = 11,700 \| 59.292 \| H3 560 \| 59.852 | 같음 |
|
||||
| P2 반지름 | 901 = 875 + 17.5 + 8.0 (주철근 바깥에 접함) | 재료표 r 901 |
|
||||
| P3 | 1단에 X·Y 방향 2개, 직선부 1,832가 중심을 지남 | 단면 C-C 36C(Y)·36D(X) |
|
||||
|
||||
### 11.3 결정 요청
|
||||
|
||||
> **[결정 2026-10-13 / 심영표] K1~K4 모두 권장안 채택.**
|
||||
|
||||
| # | 내용 | 권장안 | 다른 안 |
|
||||
|---|---|---|---|
|
||||
| K1 | P1 길이: 작도·사슬 16,260 vs 재료표 16,300 (차 40) | 작도대로 16,260으로 모델링하고, 차이 40은 하단 커플러 몫으로 기록(울산 규칙: 재료표 L은 커플러 포함). 원길이 + 커플러 = L로 검사 | 하단을 40 내려 43.452(L 그대로) |
|
||||
| K2 | P2 단 배치: 정면 작도 76선은 파단 위아래로 50 어긋나 개수를 정할 수 없음 | 사슬 격자: 43.542부터 150 간격 107단(최상단 59.442, H6 구간 1단 포함). 사슬 끝점 45.492·47.592·59.292가 모두 격자 위에 있고 N 107과 일치 | 작도 76선 그대로(개수 FAIL) |
|
||||
| K3 | P3 단 배치·교차: 같은 높이에서 X·Y 두 개가 중심에서 교차 | 43.692부터 300 간격 54단(최상단 59.592), 1단 2개 = 108(N 일치). Y방향은 X방향보다 16(철근 지름) 위에 놓아 교차를 피함 [추론] | 같은 높이에 두고 교차 간섭을 기록 |
|
||||
| K4 | P2 겹이음 위치·P3 갈고리 방향 (도면에 표시 없음) | P2: 이음을 단마다 90°/0°로 교번(울산과 같은 규칙). P3: 한쪽 끝 90° 다리 a 200(아래), 다른 끝 135° 갈고리(꼬리 d 100). 단마다 좌우를 바꿈 [추론] | 모든 단 같은 방향 |
|
||||
|
||||
### 11.4 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 생성기·검사기 | `column_rebar_straight.py`·`g2_straight.py` 신설(울산 `column_rebar_ring.py`는 수정하지 않음). scope G1·G2·G5 |
|
||||
| 철근 수 | P1 54, P2 107단 × 반원 2조각 = 214, P3 54단 × X·Y = 108 (관 솔리드 + 중심선, 모델 객체 764) |
|
||||
| G2 | PASS 26/26 — 개수·원길이(+커플러)·반지름·분할각·상하단 EL·단 격자·X/Y 이격 16·콘크리트 밖 표본 0. 음성 시험(P1 수평 5 → 반지름, P2 수직 5 → 단 격자) 검출, 재로드 760 = 760, G1 객체 8개 불변 |
|
||||
| G1·G5 | 재실행 PASS 97/97, 39/39 (G5에서 G1·G2 객체 불변) |
|
||||
| 최소 측면 피복(기록) | P1 107.5, P2 91.0, P3 76.0 (기둥 반지름 1,000 − 철근 바깥면 반경). 콘크리트 합집합은 기둥-코핑·말뚝 단 사이 동일 평면 접촉으로 실패해 기둥 구간 측면 피복으로 기록 |
|
||||
| 곡선 길이 − L(기록) | P2 −254.2(갈고리 굽힘 반경), P3 −161.6(갈고리 꼬리 작도 150 [추론]) — 원길이(재료표 식)로 판정 |
|
||||
| 철근 색 | H35 (148,103,189) — 사용자 확정 2026-10-13 |
|
||||
|
||||
- 간섭 미검사(기록): P3가 0°·180°(X 방향)와 90°·270°(Y 방향)의 주철근 P1을 관통하고, 띠철근 P2와 같은 높이에서 겹칩니다(실제로는 갈고리로 감쌈). 운곡교 #8과 같은 성격입니다.
|
||||
- 앱 판독기 보완 B4: 형식 열이 없는 재료표(D4)는 철근 형상 후보를 `None`으로 만들어 '다름'으로 표시했습니다. 형식 열이 없으면 지름만 비교하도록 고쳤습니다.
|
||||
|
||||
## 12. 말뚝 철근망 판독 (G3 자리: P1-1·P1-2·P2-1·P3-1·P3-2·PLATE)
|
||||
|
||||
- 범위: 철근 5마크와 떠오름 방지 PLATE(사용자 결정 2026-10-13). SPACER(4mm, 1m당 2개 = {H−2.500−(0.500×2)}×2개소)는 공식만 기록합니다.
|
||||
- 앱 G3(원래 '확대기초 철근')를 말뚝 철근에 씁니다. 이 형식에는 기초판이 없습니다.
|
||||
- 근거: D4 정면·단면 G-G~J-J·저부철근 상세·구조물 치수표·재료표(기둥·PLATE), D3 철근 상세. 스크립트 `Code/RampA판독/extract_g3.py` → `판독/g3_values.json`
|
||||
- **D4 정면도는 개략도**입니다. Ø2,500 구간이 12,700, 암반선이 바닥 위 3,900으로 그려져 D1(5,200 / 7,500)과 맞지 않습니다. 높이는 구조물 치수표와 사슬 문자로 정했습니다.
|
||||
|
||||
### 12.1 재료표
|
||||
|
||||
| 마크 | 직경 | L | N | 형상 |
|
||||
|---|---|---|---|---|
|
||||
| P1-1 | H35 | 8,750 | 61 | 직선, 아래 끝 커플러로 P1-2와 이음(커플러 수량 P1-1 61) |
|
||||
| P1-2 | H22 | 3,400 | 61 | 직선 |
|
||||
| P2-1 | H16 | 9,000 | 48 | 반원 2조각 겹이음: a 3,220, b 200, j 880×2 → 2×(3,220+880+400) = 9,000 ✓ |
|
||||
| P3-1 | H16 | 2,652 | 48 | 연결철근 a 200, b 2,137, c 165, d 150 (합 2,652 ✓) |
|
||||
| P3-2 | H16 | 3,342 | 30 | 저부 U형: 바닥 a 1,780, 경사 다리 b 581 ×2, 수직 c 200 ×2 (합 3,342 ✓), P1-2에 200 겹쳐 용접(4mm) |
|
||||
| PLATE | t 4 | 1,250×1,250 | 1 | 떠오름 방지 |
|
||||
|
||||
### 12.2 판독값
|
||||
|
||||
| 항목 | 값 | 근거 |
|
||||
|---|---|---|
|
||||
| 띠철근 단 | 48단 = 말뚝 상단 −110(EL 45.342)부터 13@150, 이어서 34@300 → 최하단 EL 33.192. 그 아래 340 + 100 = 말뚝 바닥 | 구조물 치수표 H4·H3·H6, 사슬 '110'·'100' (110+1,950+10,200+340+100 = 12,700 ✓) |
|
||||
| 연결철근 단 | 24단 = −260(EL 45.192)부터 6@300, 이어서 17@600 → EL 33.192. 1단에 X·Y 2개 = 48 ✓ | H2·H1·H5 (260+1,800+10,200+340+100 = 12,700 ✓) |
|
||||
| 주철근 배치 | 61개, 1.475°부터 360/61 = 5.902° 간격 | 단면 G-G·J-J 기호 |
|
||||
| 주철근 높이 | P1-1 EL 45.342 → 36.592 (8,750), P1-2 36.592 → 33.192 (3,400). 띠철근 첫 단~끝 단 = 12,150 = 8,750 + 3,400 정확히 일치 | 정면 작도(상단이 말뚝 상단 아래 110) |
|
||||
| 띠철근 반지름 | 1,025 (중심선) | 단면 원 r 1,025, a 3,220 = π×1,025 |
|
||||
| 연결철근 | 단면에서 X·Y 지름선 2,050 | 단면 G-G·J-J |
|
||||
| 콘크리트 | G-G r 1,250, J-J r 1,175 (Ø2,350, D1과 일치) | 단면 원 |
|
||||
|
||||
### 12.3 결정 요청
|
||||
|
||||
> **[결정 2026-10-13 / 심영표] S1~S4 권장안 채택, S5·S6은 기둥(K4·K1)과 같은 규칙 적용.**
|
||||
|
||||
| # | 내용 | 권장안 | 다른 안 |
|
||||
|---|---|---|---|
|
||||
| S1 | [CONFLICT] 띠철근 반지름: 재료표 'r=929' vs a 3,220(= π×1,025)·단면 원 r 1,025. J-J 단면 '2,300' 문자 vs 치수 150+1,025+1,025+150 = 2,350·원 r 1,175 | 띠철근 r 1,025, 암반 근입부 Ø2,350(G1 그대로). 재료표 r 929와 '2,300'은 도면 오기로 기록 | r 929 |
|
||||
| S2 | 주철근 반지름: 단면 기호 r 1,002.5(두 직경 공통) vs 띠철근 안쪽에 접하는 값(H35 999.5, H22 1,006) | 999.5로 통일(띠철근 안쪽에 접함, 커플러 축 일치. H22는 띠철근과 6.5 틈) | 작도 1,002.5(H35가 띠철근과 3 겹침) |
|
||||
| S3 | P3-2 저부 U형 30개의 평면 배치: 도면에 없음 | 중심을 지나는 수직면 30개(0번~29번 주철근 각도 θi). 다리 c는 θi와 θi+180° 위치 r 1,025에서 P1-2 바깥에 붙음. 바닥 EL 32.852(말뚝 바닥 +100), c 구간 33.417~33.617이 P1-2 하단부와 200 겹침 [추론]. 30개가 중심에서 서로 겹침(간섭 기록) | 평행 격자 배치(길이가 a 1,780과 맞지 않음) |
|
||||
| S4 | PLATE 위치 | 중심, U형 바닥 아래에 붙임: 상면 = 32.852 − 8(철근 반지름), 두께 4 (바닥 피복 88) [추론] | U형 위 |
|
||||
| S5 | P2-1 겹이음·P3-1 갈고리 방향 | 기둥과 같은 규칙: 이음 90°/0° 교번, P3-1 Y방향 +16, 다리·갈고리 좌우 교번 [추론] | — |
|
||||
| S6 | 커플러: P1-1/P1-2 이음 위치 EL 36.592, 재료표 L에 커플러 길이 없음(합이 정확히 12,150) | 커플러 길이 0으로 기록, 솔리드는 만들지 않음. 기둥 P1의 커플러(54)는 G2에서 40으로 처리 | — |
|
||||
|
||||
### 12.4 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 생성기·검사기 | `shaft_rebar.py`·`g3_shaft.py` 신설. 앱 G3 자리에 씀. `pipeline.py`의 G3 객체 접두에 `PT`(PLATE) 추가 |
|
||||
| 객체 | 주철근 P1-2·P1-1 각 61, 띠철근 48단 × 2조각, 연결철근 24단 × X·Y, U형 30, PLATE 1 → G3 객체 593(관 + 중심선), 모델 전체 1,357 |
|
||||
| G3 | PASS 48/48 — 개수·원길이·주철근 2단 높이(첫~끝 띠철근 단 = 12,150)·반지름·분할각(1.475° + 360/61)·띠철근/연결철근 단(구조물 치수표 사슬)·띠철근 r 1,025·X/Y 이격·U형 바닥/폭/수직면·PLATE 치수/위치·말뚝 콘크리트 밖 표본 0. 음성 시험(P1-1 수평 5, P2-1 수직 5) 검출, 재로드 1,353, G1·G2 객체 760 불변 |
|
||||
| G1·G2·G5 | 재실행 PASS 97/97, 26/26, 39/39 (G5에서 G3까지 객체 1,353 불변) |
|
||||
| 최소 피복(기록) | P1-1 158.0, P1-2 164.5, P2-1 142.0, P3-1 98.5 (모두 암반 근입부 r 1,175 기준 측면), P3-2 92.0·PLATE 88.0 (바닥) |
|
||||
| 곡선 길이 − L(기록) | P2-1 −254.4, P3-1 −234.6, P3-2 −65.7 (굽힘 반경·갈고리 꼬리 [추론]) — 원길이로 판정 |
|
||||
|
||||
- 간섭 미검사(기록)
|
||||
- P3-2 U형 30개는 바닥이 중심에서 서로 겹칩니다(S3).
|
||||
- P3-1은 주철근·띠철근을 관통합니다.
|
||||
- 기둥 P1(r 875)은 말뚝 상부 2,000에서 철근망 안쪽과 겹칩니다(관통은 아님).
|
||||
- 도면 오기 기록: 재료표 P2-1 'r=929', J-J 단면 '2,300'(S1)
|
||||
|
||||
## 13. 코핑 철근 판독 (G4: C1~C16, S1~S4, 20마크 449본)
|
||||
|
||||
- 근거: D2 코핑 정면·평면·측면(배근도), D3 단면 A-A(끝단 쪽)·B-B(기둥 쪽)·철근 상세·재료표·교좌면 보강 철근(E-E·F-F)
|
||||
- 방식: 울산과 같은 철근별 중심선(사용자 결정). 판독 스크립트가 철근마다 꺾은선을 만들고, 범용 생성기 `rebar_polylines.py`가 관을 만듭니다.
|
||||
- 좌표: D2 정면 EL = 45,452 + (y + 700,829.1) + 4,000(파단 위), 기둥 중심 x 12,741.4. 단면은 상면 기준 dz.
|
||||
|
||||
### 13.1 재료표와 형상 (D3)
|
||||
|
||||
| 마크 | 직경 | L | N | 형상·상세 치수 | 검산 |
|
||||
|---|---|---|---|---|---|
|
||||
| C1·C4 | H29 | 8,617 | 9·8 | 상면 a 6,918 + 좌 끝 다리 858(107°) + 우 끝 다리 841(103°) | 합 8,617 ✓ |
|
||||
| C2·C5 | H29 | 7,177 | 9·8 | a 6,971 + 104 + 103 | 7,178 ≈ L |
|
||||
| C3 | H25 | 7,230 | 9 | a 7,023 + 104 + 103 | ✓ |
|
||||
| C6 | H25 | 9,003 | 9 | 끝 다리 400 + 원호 3,141(R 5,100) + 하면 1,914 + 원호 3,148 + 400 | ✓ |
|
||||
| C7·C9·C11 | H19 | 7,480·9,251·8,110 | 20·15·20 | 바깥 폐합 스터럽: 폭 a 1,673, 높이 b(가변) ×2, 겹이음 c 450 ×2 | 2a + 2·b평균 + 2c ✓ (b 평균으로 L 산정) |
|
||||
| C8·C10·C12 | H19 | 6,071·7,426·5,333 | 40·30·40 | 안쪽 모따기 스터럽: a 673, b, d(하면), c2(경사), c1(측면 수직), c 450 ×2 | a+b+d평균+c2평균+c1+2c ✓ |
|
||||
| C13 | H19 | 11,309 | 18 | 수평 고리 a 5,898~2,006, b 1,002(var.), c 350 | L식 불명확(기록) |
|
||||
| C14 | H19 | 18,057 | 12 | 수평 고리 a 7,375~6,979, b 1,006(var.), c 350, j 290 | L식 불명확(기록) |
|
||||
| C15 | H19 | 2,700 | 51 | U형 a 2,000 + 다리 b 350 ×2 | ✓ |
|
||||
| C16 | H19 | 4,000 | 17 | U형 a 3,300 + 다리 350 ×2 | ✓ |
|
||||
| S1·S2 | H16 | 2,700·2,600 | 22·24 | U형 a 1,300 / 1,200 + 다리 700 ×2 | ✓ |
|
||||
| S3·S4 | H25 | 1,250 | 44·44 | 직선 | ✓ |
|
||||
|
||||
### 13.2 판독값 (작도 좌표로 확정)
|
||||
|
||||
| 묶음 | 값 | 근거 |
|
||||
|---|---|---|
|
||||
| 상면 주철근 | 1단 C1/C4 EL 59.852, 2단 C2/C5 59.752, 3단 C3 59.652. y: 1·2단 −1,000~1,000 @125(17, C1·C2가 짝수 열), 3단 @250(9). x 끝: C1 −3,425.6~3,492.1(다리 끝 −3,672.0/59.030, 3,679.3/59.032), C2 −3,455.6~3,515.0, C3 −3,485.6~3,537.8 | D2 정면 작도선, 단면 A-A·B-B 점 |
|
||||
| C6 | 하면 1,914 EL 57.552(x ±957), 원호 R 5,100(중심 ±4,638.8 / EL 54.023), 끝 다리 400(끝면 따라 59.414까지) | D2 정면 ARC 478·479 |
|
||||
| 스터럽 위치 | x −3,375~3,375 @125 = 55곳: C7 좌측 20(−3,375~−1,000), C9 중앙 15(−875~875), C11 우측 20(1,000~3,375). 위치마다 바깥 1 + 안쪽 2 | D2 정면 작도선 55개 |
|
||||
| 바깥 스터럽 | y −875~750(폭 1,625), 위 = 상면 −77.5(좌 59.875 / 우 60.190), 아래 = 하면 원호 R 5,077.5 위(중앙은 57.530). 높이 = b (C7 933~, C9 2,345/2,660, C11 ~1,248 ✓) | 단면 B-B 선 |
|
||||
| 안쪽 스터럽 | y 375~1,000 / −1,000~−375. 바깥 다리: 측면 수직(위 −77.5 → EL 58.955), 그 아래 경사면을 따라 하면에서 y ±905. 하면 d 530~624 ✓ | 단면 A-A·B-B 선 |
|
||||
| C14 | 4단 EL 59.827·59.577·59.327·59.077, 단마다 x 끝 작도(끝면 따라감), 단마다 3개 | D2 정면 수평선 |
|
||||
| C13 | 6단 EL 58.827~57.577(250 간격), x 끝 ±2,927~±981(하면 따라감), 단마다 3개 | 같음 |
|
||||
| 측면 길이 방향 점 | 단면 y −977.5, −852.5, −397.5, 397.5, 727.5, 977.5 (경사부에서 바깥 점은 테이퍼를 따라 안으로) | 단면 A-A·B-B |
|
||||
| C16 | 우측 높은 상면 EL 60.167, x 100~3,400, 다리 350 아래, y @125 17본 | D2 정면 |
|
||||
| 교좌면 | 받침마다: 대좌 속 S1·S2(대좌 상면 −50, 다리 700), 코핑 상면 아래 S3·S4 2층(10@125 격자, 1,250) | D3 교좌면 보강 철근, E-E, F-F |
|
||||
|
||||
### 13.3 결정 요청
|
||||
|
||||
> **[결정 2026-10-14 / 심영표] T1~T6 모두 권장안 채택.**
|
||||
|
||||
| # | 내용 | 권장안 | 다른 안 |
|
||||
|---|---|---|---|
|
||||
| T1 | C6 개수: 재료표 9 vs 단면 A-A '4@500=2,000(1단)' 5본 | 9본 = y −1,000~1,000 @250 [추론] (N 일치) | 작도 5본(@500) — 개수 FAIL로 기록 |
|
||||
| T2 | C13·C14 고리 짝(단마다 3개, y 6점) | 동심 3고리: 바깥 ±977.5, 중간 −852.5/727.5, 안쪽 ±397.5(스터럽 모서리 안쪽). 짧은 변이 겹치지 않도록 x 끝을 고리마다 25씩 안으로 [추론]. L은 기록만(INFO) | 이웃 짝(−977.5/−852.5 등) |
|
||||
| T3 | C15 51본: 위치를 정하는 작도·치수가 없음 | 상면 횡방향 U형(a 2,000이 y −1,000~1,000, 다리 350 아래)을 스터럽 위치 55곳 중 C16 구간(우측 높은 상면, x 125~3,375 중 겹치지 않는 곳)을 뺀 위치에 두어 51본 [추론] | 모델에서 빼고 '미배치'로 기록(개수 FAIL 계획) |
|
||||
| T4 | C10 c1: 재료표 1,234(우측 단차 포함) vs 단면 B-B(좌측) 919 | 위치별 실제 형상(좌측 919, 우측 1,234). 가변 마크라 길이는 평균 기록(INFO) | 재료표 값 고정 |
|
||||
| T5 | 교좌면 S1·S2 배치: 받침당 11·12본, 격자 9@125·8@125(+가장자리 100) | 받침 축(회전각)에 맞춰 S1은 교축직각 a 1,300 방향, S2는 교축 a 1,200 방향, @125 중앙 대칭으로 11·12본 [추론]. S3·S4는 받침당 2층 × 11본 | — |
|
||||
| T6 | 스터럽·고리의 겹이음(c 450, j 290)·갈고리 | 폐합 꺾은선으로 모델(겹침 부분 생략), 길이는 재료표식으로 기록 | 겹침까지 모델 |
|
||||
|
||||
### 13.4 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 생성 방식 | 판독 스크립트 `Code/RampA판독/extract_g4.py`가 철근 449본의 중심선을 만들고(`판독/g4_bars.json`), 범용 생성기 `rebar_polylines.py`가 관을 만듭니다. 검사기 `g4_ramp.py` 신설 |
|
||||
| G4 | PASS 126/126 — 20마크 개수, 고정 길이 12마크 = L, 상면 3단·C16 높이/열/x 끝, 스터럽 55곳 구역별 위치, 상·하 피복 77.5(하면 원호 따라), 바깥 다리 y, C13·C14 단·단당 3고리·수평, C6 하면 높이·열, C15 폭, 받침별 S1~S4 개수, 콘크리트 밖 표본 0. 음성 시험(C1 y 5 → 열 위치, C7 z 5 → 피복) 검출, 재로드 2,251, G1~G3 객체 1,353 불변 |
|
||||
| G5 | 재실행 PASS 39/39 (G4까지 객체 2,251 불변). 모델 전체 2,255 객체 |
|
||||
| 가변 마크 길이(기록) | 평균 − L: C7 −267, C8 −942, C9 −21, C10 −336, C11 −267, C12 +426, C13 −499, C14 +74. 재료표가 가변 치수를 최댓값 또는 양 끝 평균으로 L을 산정했기 때문(13.1) |
|
||||
| 최소 피복(기록, 코핑 표면) | C1 40.3 ~ C16 90.5, 스터럽 68.0 |
|
||||
|
||||
**이번 단계에서 추가한 [추론] (결정 요청 이후 발견, 확인 필요)**
|
||||
- **평면 모서리 단축**: 끝면이 평면에서 볼록 원호라 모서리(y ±1,000)에서는 끝면이 최대 124 안쪽에 있습니다. 1차 게이트에서 C1·C4·C6·C14 일부가 콘크리트 밖으로 나가 FAIL했습니다.
|
||||
- 그래서 철근 표면 피복 40을 확보하도록 끝면 가까운 점의 x를 당겼습니다.
|
||||
- 해당 철근: C1 4, C4 2, C2 2, C3 2, C6 4, C14 7본. 고리는 직사각형을 유지했습니다.
|
||||
- 울산 R500 모서리 철근 단축과 같은 방식입니다.
|
||||
- **안쪽 스터럽 x +20**: 같은 x에 두면 바깥 스터럽과 상면 변이 일직선으로 겹치므로 철근 지름만큼 옆에 붙였습니다.
|
||||
- **검사기 1차 결함**: 직선부 x 끝을 200등분 표본으로 잡아 최대 43 오차가 생겼고, 5mm 간격 표본으로 고쳤습니다.
|
||||
- 간섭 미검사(기록): 상면 주철근과 스터럽 상면(22.5 간격, 1.5 겹침), C15와 C14·C1, S3·S4와 C1~C3, 교좌면 S1·S2와 C1(대좌 다리 관통).
|
||||
@@ -0,0 +1,122 @@
|
||||
# 산외교 울산 P2 교각 도면 판독 (형상·받침·철근)
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-15 | 심영표 | 신규 작성 — 형상(G1)·받침(G5) 모델링 결과와 판독 근거 | 철근(G2~G4)은 범위 밖(사용자 선택) |
|
||||
| v0.1.01 | 2026-10-15 | 심영표 | 철근 G2~G4 모델링·판독 근거(8장) 추가, 요약·남은 일 갱신 | 사용자 지시 "G2~G4 진행해줘"; 회전 방향·말뚝·솔플레이트·대좌 fck 추론 적용 확인 |
|
||||
| v0.1.02 | 2026-10-16 | 심영표 | B8 길이 계획 FAIL 승인 기재(expected.json), G1~G5 재실행(118·35·63/64·129·75), 8.5절·8.6절 갱신 | 사용자 "확인·승인" 지시 2026-10-16, 설계자 확인 대상은 유지 |
|
||||
|
||||
> 대상: `RAG/교각배근도(울산P2).dwg`(요청문의 `.dwq`는 `.dwg`로 확인). 앱 교각 `산외교울산P2`(`Code/교각모델링앱/data/산외교울산P2/`). 판독 스크립트 `Code/울산P2판독/extract_s1.py`. `[추론]`은 설계자·담당자 확인이 필요한 판단입니다.
|
||||
|
||||
## 1. 결과 요약
|
||||
|
||||
| 게이트 | 판정 | 비고 |
|
||||
| :--- | :--- | :--- |
|
||||
| G1 형상 | PASS 118/118 | 음성 시험 검출, 재로드 일치 |
|
||||
| G2 기둥 철근 | PASS 35/35 | 음성 시험 검출 |
|
||||
| G3 기초 철근 | PASS 63/64 (계획 FAIL 1) | B8 띠철근 길이(8.5절), 음성 시험 검출 |
|
||||
| G4 코핑·받침 철근 | PASS 129/129 | 372개 중심선, 음성 시험 검출 |
|
||||
| G5 받침·솔플레이트 | PASS 75/75 | 음성 시험 검출, G1~G4 객체 불변 |
|
||||
| 회귀 | 울산P1 G1 104/104, 옥성교 G1 147/147, 새재1교 G1 138/138 PASS | 엔진을 고쳤기 때문에 확인 |
|
||||
|
||||
- 앱에 있던 `산외교울산P2`는 P1 값을 복사한 것이었습니다(기초 7,500·말뚝 없음·기둥 22.6 m). 이번에 P2 도면 값으로 다시 만들었습니다. 이전 입력·실행 기록은 `data/산외교울산P2/backup/`에 있습니다.
|
||||
- OPEN #31(울산P2 도면의 '강관말뚝' 문자와 모델 불일치)은 이 판독으로 **해소**됩니다. 도면의 말뚝은 이 교각 기초의 말뚝이었습니다.
|
||||
|
||||
## 2. P1과 달라진 것
|
||||
|
||||
| 항목 | P1 | P2 | 근거 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 기초 | 7,500 × 7,500 × 2,500 직접기초 | **7,800 × 7,500 × 2,500, 강관말뚝 30본** | 정면 `1EA54`(7,800), 측면 `1EBE5`(7,500), `1EBE4`(2,500) |
|
||||
| 기초 하면 | EL 42.763 | **EL 38.916** | 'EL. 38.916' |
|
||||
| 버림콘크리트 | 7,700 × 7,700 × 100 | 8,000 × 7,700 × 100 | `1EA5A`, `1EBEA` |
|
||||
| 말뚝 | 없음 | **Ø508 × 9T, L=7.0 m, 6 × 5 (X 1,300, Y 1,550), 가장자리 650, 머리 +100** | 기초 평면도 '5@1.300', '4@1.550', 'Φ508.0X9T, L=7.0M' |
|
||||
| 기초 방향 | 교각 축과 평행 | **37° 회전** | 기초 평면도 '구조물 기초는 37.000˚회전' |
|
||||
| 기둥 높이 | 22.600 | **27.300** | 단면 '27.300' |
|
||||
| 코핑 상면 | EL 71.193 / 71.063 | **EL 72.046 / 71.916** | 'EL. 72.046', 'EL. 71.916' |
|
||||
| 코핑 형상·폭·평면 R | 같음(끝면 300 경사, 상면 130 단차, 폭 3,200, R500) | 같음 | 일반도 |
|
||||
| 받침 | 4개, A 580/600 | 4개, **A 600/620**, EL'X' 72.263 등 | ELEVATION TABLE |
|
||||
|
||||
## 3. 기초 37° 회전 해석
|
||||
|
||||
- 기초 평면도는 기초 자체 축으로 그려져 있고, 교각 축선이 37°로 기울어 그려져 있습니다. 정면도·단면도는 회전을 무시하고 그렸다는 주기가 있습니다.
|
||||
- 확인한 근거: '회전이 고려된 길이 9.767 m' = 7.800 / cos 37°, '9.391 m' = 7.500 / cos 37°. 회전 각도 37°가 주기와 맞습니다.
|
||||
- **회전 방향 `[추론]`**: 기초 평면도의 화살표(교축 방향) 선이 +53°이므로 교각 X축은 기초 좌표에서 −37°이고, 모델에서는 기초를 **반시계 +37°** 로 돌렸습니다. 게이트 검사는 회전 각도의 크기(회전한 외곽 치수의 닫힌형 값)는 확인하지만 방향(+/−)은 확인하지 못합니다. 설계자 확인이 필요합니다.
|
||||
- 회전 중심은 기둥 중심(원점)입니다. 기초 평면에서 기둥 원이 말뚝 배열 중앙에 있어 회전 중심 = 기둥 중심으로 보았습니다.
|
||||
|
||||
## 4. 앱 엔진 변경 (옥성교·새재1교·울산P1은 불변 확인)
|
||||
|
||||
| 파일 | 변경 |
|
||||
| :--- | :--- |
|
||||
| `engine/rhino/concrete_tapered.py` | 기초 `rot_deg`(버림·기초판·말뚝을 기초 축으로 만든 뒤 +각도 회전) 추가. 말뚝 객체 설명을 말뚝 유무에 따라 구분 |
|
||||
| `engine/rhino/checks/g1_tapered.py` | 말뚝 검사(그물 6 × 5, 간격 X·Y, 가장자리, 지름, 길이, 머리 묻힘, 버림 겹침 0, 기초-말뚝 의도한 겹침 체적), 회전한 외곽 치수(닫힌형) 검사, 회전 되돌린 뒤 외곽 검사, 버림 체적에서 말뚝 구멍 제외 |
|
||||
| 백업 | `Code/교각모델링앱/backup/2026-10-15_울산P2전/` |
|
||||
|
||||
## 5. 결정·`[추론]`·도면 관찰
|
||||
|
||||
| # | 내용 | 구분 |
|
||||
| :-- | :--- | :--- |
|
||||
| 1 | 말뚝은 옥성교 O5 결정(속찬 원기둥)을 재적용 | `[추론]` |
|
||||
| 2 | 말뚝 머리 = 기초 하면 + 100 (정면도 말뚝 상단 y −22999.7과 기초 하면 −23099.7의 차) | 작도 |
|
||||
| 3 | 기초 회전 방향 +37° | `[추론]` §3 |
|
||||
| 4 | 솔플레이트 두꺼운 쪽 +Y(S 1.896 % > 0, T2 40) — 울산P1 규칙 재적용 | `[추론]` |
|
||||
| 5 | 대좌 fck 40 MPa — 울산P1과 같은 가정 | `[추론]` |
|
||||
| 6 | 받침 위치는 S1 값으로 계산하고, 평면 작도 대좌 중심과 0.4 mm 이내로 일치(전열 −799/−772, 후열 +798/+764) | 검증 |
|
||||
| 7 | 육안 확인 미실시(이 PC에서 뷰포트 캡처 불가). 판정은 수치 검사 | 한계 |
|
||||
|
||||
## 6. 남은 일 (v0.1.00 기준, 8.6절에서 갱신)
|
||||
|
||||
1. 앱에서 묶음 확정·G1·G5 승인(담당자). 기존 확정 기록은 입력이 바뀌어 무효입니다.
|
||||
2. 기초 회전 방향 +37° 설계자 확인.
|
||||
3. 철근 G2~G4는 범위 밖입니다. 말뚝이 있는 기초라 울산P1의 기초 철근 판독(직접기초)은 그대로 쓸 수 없고, 옥성교 기초 철근 규칙을 참고해야 합니다.
|
||||
4. 이 형식(말뚝 + 직선 경사 코핑 + 받침 4개 + 기초 회전)을 보호 템플릿으로 저장할지는 미결정입니다. 현재 템플릿 5종 중에는 없어, 도면으로 추천을 받으면 '판단 불가(2/3 일치)'로 나옵니다.
|
||||
|
||||
## 7. 검증
|
||||
|
||||
- 게이트: `tools/run_gates.py data/산외교울산P2 <run> --gates G1 G5`, 전수 118/118·75/75.
|
||||
- 시험: `tools/test_ulsan_p2.py`(값·게이트 기록), `tools/test_recommend.py`(추천, 울산P2는 일치 템플릿 없음으로 판단) PASS.
|
||||
|
||||
## 8. 철근 G2~G4 (v0.1.01 추가)
|
||||
|
||||
사용자 확인(2026-10-15): 기초 회전 방향 반시계, 말뚝·솔플레이트·대좌 fck는 추론 적용, G2~G4 진행. 판독 스크립트 `Code/울산P2판독/extract_r2.py`, `extract_r3.py`, `make_r4.py`(→`extract_r4.py`), `schedule.py`.
|
||||
|
||||
### 8.1 재료표 비교
|
||||
|
||||
34개 마크를 울산P1과 비교했습니다(`판독/schedule.json`).
|
||||
- **같은 것**: 코핑 C1~C15, 받침 보강 S1~S4(길이·수량·형상). 코핑 철근은 P1 판독에 높이만 +853 해 재사용했습니다.
|
||||
- **다른 것**: 기둥 P1 주철근 A 27.510→**32.110**, 띠철근 P2 70→**82**, P4 25→**31**, 크로스타이 P5 64→**76**; 기초 B1~B10 전부(직경 H25 추가, B7 98→**320**, 모양 I→XI, B10 7→8 등).
|
||||
|
||||
### 8.2 G2 기둥 철근 (35/35)
|
||||
|
||||
- 띠철근 사슬 '150','625','11@150','31@150','82@300' → 125단(P3 12 / P4 31 / P2 82), 크로스타이 '3@1.800' + '13@1.800' + '1.200' + '900' → 19단 × 4 = 76. 두 사슬이 같은 높이(기초 하면 + 31.675 m)에서 끝납니다.
|
||||
- 주철근 68개 r 1,125, 상단 = 기초 하면 + 540 + 32,110. 규칙은 P1 그대로.
|
||||
|
||||
### 8.3 G3 기초 철근 (63/64, 계획 FAIL 1)
|
||||
|
||||
- 위치 사슬로 **재료표 수량과 전 마크 일치**: B1 31, B2 31 + B3 30(=하면 61), B4 31, B5 31 + B6 28(=59), B8 7, B9 7, B10 8, B7 320.
|
||||
- 모든 철근은 기초 자체 축에서 만들고 기초와 함께 +37° 돌렸습니다(엔진 `footing_rebar_mats.py`에 회전·직사각 띠철근·B7 위치 직접 지정 추가, 검사기 `g3_mats.py`는 철근을 되돌려 검사).
|
||||
- 층 높이는 작도선 z 150 / 1,275 / 2,400과 울산P1 규칙(±22.5)을 적용했습니다 `[derived]`.
|
||||
|
||||
### 8.4 G4 코핑·받침 철근 (129/129)
|
||||
|
||||
- 코핑 형상과 재료표가 P1과 같아 `extract_r4.py`를 P1 스크립트에서 파생(코핑 하면 EL 차 +853, 상면 EL, 표 열 위치만 변경). 철근 372개, 수량이 재료표와 일치합니다.
|
||||
- 받침 보강 S1~S4는 P2 받침 표(중심, h1)를 따릅니다. P1에서 정한 `[추론]`(OPEN #22: 단 배정, 모서리 단축, C14 방향 등)을 그대로 재적용했습니다.
|
||||
|
||||
### 8.5 도면·판독 불일치와 `[추론]` (설계자 확인 필요)
|
||||
|
||||
| # | 내용 | 구분 |
|
||||
| :-- | :--- | :--- |
|
||||
| 1 | **B8 길이**: 재료표 L 33.330 vs 2A+2B+4J = 32.190 (P1은 같은 식이 L과 일치). G3 계획 FAIL 1건. **사용자 승인 2026-10-16**(expected.json 반영), 설계자 확인 대상은 유지 | `[CONFLICT]` |
|
||||
| 2 | **B7 배치 320**: 입면에 22(X) × 20(Y)개 위치가 그려져 있고 재료표 320은 그중 |x| ≤ 2,000 & |y| ≤ 1,750 구역 120개를 뺀 값(이 직사각형만 320, 가로·세로를 바꿔도 가능). 기둥·말뚝 위치와의 관계는 평면 작도가 없어 확인 불가 | `[추론]` |
|
||||
| 3 | B9(7)·B10(8) 위치는 치수가 없어 1,000 간격 대칭으로 배치 | `[추론]` |
|
||||
| 4 | B7 다리 78/52를 +Y로 | `[추론]` |
|
||||
| 5 | B5 위치를 측면 상면 사슬(31곳)에 맞춤(P1 규칙) | `[추론]` |
|
||||
| 6 | 코핑 철근 [추론] 7건은 울산P1 OPEN #22와 동일 | `[추론]` |
|
||||
| 7 | 기초 철근 최소 피복(기록): B5 65.0, B1 68.0, B8 69.5 mm — 피복 기준 표기와 비교하지 않음 | 기록 |
|
||||
| 8 | 코핑 철근 간 간섭 검사 미실시(P1과 같음) | 한계 |
|
||||
|
||||
### 8.6 남은 일
|
||||
|
||||
1. 앱에서 묶음 확정·G1~G5 승인(담당자, 이 PC의 앱에서 직접).
|
||||
2. 8.5절 설계자 확인(B8 길이, B7 구역, 회전 방향).
|
||||
3. (해소) 보호 템플릿 `산외교울산P2형`은 철근·승인 반영본으로 재저장했습니다(2026-10-16).
|
||||
4. 육안 확인 미실시.
|
||||
@@ -0,0 +1,77 @@
|
||||
# 새재1교 P1 교각 도면 판독서 (형상·받침)
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-15 | 심영표 | 최초 작성 (G1 형상·G5 받침 판독, 결정 N1~N3 반영, 모델·게이트 결과) | G1 138/138 · G5 183/183 PASS. 철근 G2~G4는 다음 Task |
|
||||
|
||||
## 1. 대상 도면
|
||||
|
||||
- `RAG/새재1교P1.dwg` (읽기 전용) — 한 파일에 교각 일반도(1)(2)와 구조도(1)~(4)(철근)가 들어 있습니다(문자 1,646개, DXF 1장, ODA 변환). 옥성교 P1과 같은 도면 틀(공주시 국도대체우회도로(봉정~방문), 삼안·유신·삼영)입니다.
|
||||
- 판독 스크립트: `Code/새재1교P1판독/convert_index.py`(변환·색인), `extract_g1.py`(→ `판독/g1_values.json`), `make_pier.py`(앱 교각 생성·값 입력)
|
||||
|
||||
## 2. 판독 좌표
|
||||
|
||||
| 대상 | 기준 |
|
||||
| :--- | :--- |
|
||||
| 정면도 | 기둥이 중간에서 끊겨 그려짐(절단 기호) → 기초 쪽 z = 도면 y − 14,716.5 (기초 하면 y 24,748.5 = EL 10.032), 코핑 쪽 z = 도면 y − 5,816.5 (코핑 하면 평평부 y 35,348.5 = EL 29.532). 중심 x 33,756.4 |
|
||||
| 단면도 | 중심 x 61,366.4, 같은 z 규칙 |
|
||||
| 평면도 | 기둥 중심 (34,904.3, 55,436.6) = 모델 원점, 평면 위쪽 = +Y(선형 진행 방향) |
|
||||
|
||||
## 3. 형상 판독 (G1)
|
||||
|
||||
| 부재 | 값 | 근거 |
|
||||
| :--- | :--- | :--- |
|
||||
| 버림 콘크리트 | 7,900 × 7,900 × 100, EL 9.932~10.032, fck 16 MPa | 정면 7.900, 100 |
|
||||
| 확대기초 | 7,700 × 7,700 × 2,600, EL 10.032~12.632, fck 27 MPa (**말뚝 없음**) | 정면 7.700, 2.600, 기초 평면도 |
|
||||
| 기둥 | 원형 Ø2,200, 높이 16,900, EL 12.632~29.532 | 정면 2.200, 16.900, 평면 원 r 1,100 |
|
||||
| 코핑 정면 (Y = 0 단면) | 하면 평평 ±1,200 (EL 29.532), 끝(±6,000)에서 EL 31.232까지 경사(높이 1,700), 끝 수직 높이 왼쪽 1,300·오른쪽 1,704, 상면 5단 | 정면 코핑 외곽 2F1A~2F27, 치수 1.300·1.704·1.700 |
|
||||
| 상면 5단 | x 경계 −3,722.5 / −1,215.6 / 1,291.3 / 3,798.2, 단 높이 EL 32.532 → 32.936(단마다 약 + 101, 상면 약 4 % 경사) | 정면 2.277·3@2.507·2.202, EL 32.532·32.936 |
|
||||
| 코핑 폭 | 3,000, 측면은 하면 ±1,100에서 EL 31.232의 ±1,500까지 테이퍼(경사 1,746.4) | 단면도 2DAF/2DB0 |
|
||||
| 평면 | 12,000 × 3,000 **직사각**(사각 없음) | 평면 28FA~28FD |
|
||||
| 콘크리트 강도 | 코핑 35 MPa, 기초 27 MPa, 기둥 35 MPa **[추론]**(N3) | 일반도 주기 |
|
||||
|
||||
## 4. 받침 판독 (G1 대좌·패드, G5)
|
||||
|
||||
| 항목 | 값 | 근거 |
|
||||
| :--- | :--- | :--- |
|
||||
| 대좌 | 5개, 평면 1,300(X) × 2,397(Y) **직사각**, 앞·뒤 받침이 함께 올라탐, 중심 x −4,976.0 / −2,469.1 / 37.9 / 2,544.8 / 5,051.6 | 평면 28D6~28F9, 표 C1~C6(700·999·2,397 / 650·650·1,300) |
|
||||
| 받침 패드 | 앞열 NO.1~5: y −499.7, 회전 −2.17° ~ −2.14°. 뒤열 NO.6~10: y +497.0, 회전 −6.40° ~ −6.50° (가장자리 750 × 750, 안쪽 650·550) | 평면 패드 2989~29A6, 표 S1·S2(1,000 / 997 / 1,003) |
|
||||
| 받침 | A × B = 550 × 550, h1 209(앞, NO.5는 208) / 194(뒤), h2 50, h3 132, h4 23 / 24 | ELEVATION TABLE |
|
||||
| EL.'X' | 앞 32.790 / 32.891 / 32.992 / 33.093 / 33.194, 뒤 32.776 / 32.877 / 32.978 / 33.079 / 33.180 | ELEVATION TABLE |
|
||||
| 솔플레이트 | L 650 × W 650, T 23(앞)·24(뒤), S(%) −0.460 … −0.452(앞), −0.504 … −0.496(뒤), T1 24·26, T2 22 | 솔플레이트 TABLE |
|
||||
|
||||
- 단 높이 규칙: 다른 교각과 같이 **단 높이 = EL.'X' − h1 − h2**. 표의 앞열이 만든 값(32,531 / 32,632 / 32,733 / 32,834 / 32,936)과 뒤열이 만든 값(32,532 / 32,633 / 32,734 / 32,835 / 32,936)이 1 mm 어긋나고(표 반올림), 작도선은 뒤열 값에 가깝습니다(32,532.0 / 32,633.1 / …). 모델은 두 값의 평균(.5)을 써서 앞·뒤 모두 0.5 mm 안에 둡니다. 1 mm 차이는 표 반올림으로 보며 FAIL로 두지 않았습니다.
|
||||
- 받침 번호: 평면도에서 ①~⑤가 아래 열(−Y), ⑥~⑩이 위 열(+Y), 모두 왼쪽에서 오른쪽입니다. 위 열 패드 x는 대좌 중심보다 약 75 mm 왼쪽(회전 때문)입니다.
|
||||
|
||||
## 5. 결정 요청과 결과
|
||||
|
||||
> **[결정 2026-10-15 / 심영표] N1~N3 모두 권장안 채택.**
|
||||
|
||||
| # | 내용 | 채택안 | 다른 안 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| N1 | 범위 | 형상 G1 + 받침 G5 먼저, 철근 G2~G4는 다음 요청에서 | 철근까지 한 번에 |
|
||||
| N2 | 대좌 상면 형상(표에는 앞 h1 209 / 뒤 h1 194뿐) | 앞·뒤 받침 위치를 잇는 평면 경사 [추론](옥성교 O2와 같은 방식) | 두 높이 수평 계단 |
|
||||
| N3 | 기둥 fck(도면 표기 없음) | 35 MPa(코핑과 같게) [추론] | 27 MPa |
|
||||
|
||||
- 솔플레이트 두꺼운 쪽: S < 0이므로 **−Y** (운곡교와 같은 규칙 [추론], 미해결 목록 #16). T1이 −Y 쪽이라는 도면 표시는 없음.
|
||||
|
||||
## 6. 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 생성 | 울산 형식 템플릿으로 앱 교각 생성 → 판독값 입력. 생성기는 기존 `concrete_tapered.py`(옥성교에서 확장한 옵션: 측면 테이퍼, 공유 대좌, 말뚝 선택)를 그대로 사용, 말뚝 없음 |
|
||||
| 검사기 | `g1_pedestal.py` 신설(옥성교 `g1_skew.py`의 복사본, 말뚝 없음·사각 0° 허용). 기존 검사기는 수정하지 않아 다른 교각에 영향 없음 |
|
||||
| G1 | PASS 138/138 — 객체 수, 닫힌 솔리드, 기초·버림·기둥 크기·EL, 코핑 정면 단면(하면·5단)과 측면 폭, 끝면, 이음·겹침, 체적, 대좌 5개·패드 10개(EL.'X', 평면 위치, 대좌 위 놓임). 음성 시험(BP02 수평 3, BS03 수직 2) 검출, 재로드 19 |
|
||||
| G5 | PASS 183/183 — 받침·솔플레이트 10쌍(높이 h3, 크기 550·650, 경사 S, 두꺼운 쪽, 색), 앞 게이트 객체 19개 불변, 재로드 39 |
|
||||
| 모델 | 객체 39(버림·기초·기둥·코핑 4, 대좌 5, 패드 10, 받침 10, 솔플레이트 10) |
|
||||
| 부피(m³) | 버림 6.241, 기초 154.154, 기둥 64.242, 코핑 86.923 |
|
||||
|
||||
- 1차 G1 실행에서 FAIL 3건(패드 윗면 = EL.'X')이 났습니다. 원인은 작도선의 단 높이(소수 .1)를 그대로 쓴 것이었고, 표 환산 규칙(위 평균값)으로 고쳐 PASS했습니다.
|
||||
- 모델링하지 않은 것: 철근 G2~G4(구조도 1~4에 있음), 코핑 상부 배수·점검 시설 등 작도 상세.
|
||||
- Rhino 렌더로 형상·대좌·패드 배치를 확인했습니다. 앱 확정·게이트 승인은 담당자 몫입니다.
|
||||
|
||||
## 7. 도면 확인 사항 (참고)
|
||||
|
||||
- 정면도 'EL. 32.532'(왼쪽 상면)와 표(앞열) 환산 32.531이 1 mm 다릅니다(표 반올림).
|
||||
- 정면도·단면도의 기둥이 중간에서 끊겨 그려져 있어 정면 길이가 실제(16,900)보다 짧습니다. 치수 문자(16.900)를 따랐습니다.
|
||||
- 사각은 없고(평면 직사각), 받침 패드만 앞·뒤 열에서 서로 다른 각도(−2.15° / −6.45°)로 회전해 있습니다(곡선 선형).
|
||||
@@ -0,0 +1,117 @@
|
||||
# 새재1교 P1 교각 도면 판독서 (형상·받침)
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-15 | 심영표 | 최초 작성 (G1 형상·G5 받침 판독, 결정 N1~N3 반영, 모델·게이트 결과) | G1 138/138 · G5 183/183 PASS. 철근 G2~G4는 다음 Task |
|
||||
| v0.1.01 | 2026-10-15 | 심영표 | 8장 기둥 철근(G2: P1~P5) 판독·모델·게이트 결과 신설 | G1·G2·G5 PASS. 기초·코핑 철근은 다음 Task |
|
||||
|
||||
## 1. 대상 도면
|
||||
|
||||
- `RAG/새재1교P1.dwg` (읽기 전용) — 한 파일에 교각 일반도(1)(2)와 구조도(1)~(4)(철근)가 들어 있습니다(문자 1,646개, DXF 1장, ODA 변환). 옥성교 P1과 같은 도면 틀(공주시 국도대체우회도로(봉정~방문), 삼안·유신·삼영)입니다.
|
||||
- 판독 스크립트: `Code/새재1교P1판독/convert_index.py`(변환·색인), `extract_g1.py`(→ `판독/g1_values.json`), `make_pier.py`(앱 교각 생성·값 입력)
|
||||
|
||||
## 2. 판독 좌표
|
||||
|
||||
| 대상 | 기준 |
|
||||
| :--- | :--- |
|
||||
| 정면도 | 기둥이 중간에서 끊겨 그려짐(절단 기호) → 기초 쪽 z = 도면 y − 14,716.5 (기초 하면 y 24,748.5 = EL 10.032), 코핑 쪽 z = 도면 y − 5,816.5 (코핑 하면 평평부 y 35,348.5 = EL 29.532). 중심 x 33,756.4 |
|
||||
| 단면도 | 중심 x 61,366.4, 같은 z 규칙 |
|
||||
| 평면도 | 기둥 중심 (34,904.3, 55,436.6) = 모델 원점, 평면 위쪽 = +Y(선형 진행 방향) |
|
||||
|
||||
## 3. 형상 판독 (G1)
|
||||
|
||||
| 부재 | 값 | 근거 |
|
||||
| :--- | :--- | :--- |
|
||||
| 버림 콘크리트 | 7,900 × 7,900 × 100, EL 9.932~10.032, fck 16 MPa | 정면 7.900, 100 |
|
||||
| 확대기초 | 7,700 × 7,700 × 2,600, EL 10.032~12.632, fck 27 MPa (**말뚝 없음**) | 정면 7.700, 2.600, 기초 평면도 |
|
||||
| 기둥 | 원형 Ø2,200, 높이 16,900, EL 12.632~29.532 | 정면 2.200, 16.900, 평면 원 r 1,100 |
|
||||
| 코핑 정면 (Y = 0 단면) | 하면 평평 ±1,200 (EL 29.532), 끝(±6,000)에서 EL 31.232까지 경사(높이 1,700), 끝 수직 높이 왼쪽 1,300·오른쪽 1,704, 상면 5단 | 정면 코핑 외곽 2F1A~2F27, 치수 1.300·1.704·1.700 |
|
||||
| 상면 5단 | x 경계 −3,722.5 / −1,215.6 / 1,291.3 / 3,798.2, 단 높이 EL 32.532 → 32.936(단마다 약 + 101, 상면 약 4 % 경사) | 정면 2.277·3@2.507·2.202, EL 32.532·32.936 |
|
||||
| 코핑 폭 | 3,000, 측면은 하면 ±1,100에서 EL 31.232의 ±1,500까지 테이퍼(경사 1,746.4) | 단면도 2DAF/2DB0 |
|
||||
| 평면 | 12,000 × 3,000 **직사각**(사각 없음) | 평면 28FA~28FD |
|
||||
| 콘크리트 강도 | 코핑 35 MPa, 기초 27 MPa, 기둥 35 MPa **[추론]**(N3) | 일반도 주기 |
|
||||
|
||||
## 4. 받침 판독 (G1 대좌·패드, G5)
|
||||
|
||||
| 항목 | 값 | 근거 |
|
||||
| :--- | :--- | :--- |
|
||||
| 대좌 | 5개, 평면 1,300(X) × 2,397(Y) **직사각**, 앞·뒤 받침이 함께 올라탐, 중심 x −4,976.0 / −2,469.1 / 37.9 / 2,544.8 / 5,051.6 | 평면 28D6~28F9, 표 C1~C6(700·999·2,397 / 650·650·1,300) |
|
||||
| 받침 패드 | 앞열 NO.1~5: y −499.7, 회전 −2.17° ~ −2.14°. 뒤열 NO.6~10: y +497.0, 회전 −6.40° ~ −6.50° (가장자리 750 × 750, 안쪽 650·550) | 평면 패드 2989~29A6, 표 S1·S2(1,000 / 997 / 1,003) |
|
||||
| 받침 | A × B = 550 × 550, h1 209(앞, NO.5는 208) / 194(뒤), h2 50, h3 132, h4 23 / 24 | ELEVATION TABLE |
|
||||
| EL.'X' | 앞 32.790 / 32.891 / 32.992 / 33.093 / 33.194, 뒤 32.776 / 32.877 / 32.978 / 33.079 / 33.180 | ELEVATION TABLE |
|
||||
| 솔플레이트 | L 650 × W 650, T 23(앞)·24(뒤), S(%) −0.460 … −0.452(앞), −0.504 … −0.496(뒤), T1 24·26, T2 22 | 솔플레이트 TABLE |
|
||||
|
||||
- 단 높이 규칙: 다른 교각과 같이 **단 높이 = EL.'X' − h1 − h2**. 표의 앞열이 만든 값(32,531 / 32,632 / 32,733 / 32,834 / 32,936)과 뒤열이 만든 값(32,532 / 32,633 / 32,734 / 32,835 / 32,936)이 1 mm 어긋나고(표 반올림), 작도선은 뒤열 값에 가깝습니다(32,532.0 / 32,633.1 / …). 모델은 두 값의 평균(.5)을 써서 앞·뒤 모두 0.5 mm 안에 둡니다. 1 mm 차이는 표 반올림으로 보며 FAIL로 두지 않았습니다.
|
||||
- 받침 번호: 평면도에서 ①~⑤가 아래 열(−Y), ⑥~⑩이 위 열(+Y), 모두 왼쪽에서 오른쪽입니다. 위 열 패드 x는 대좌 중심보다 약 75 mm 왼쪽(회전 때문)입니다.
|
||||
|
||||
## 5. 결정 요청과 결과
|
||||
|
||||
> **[결정 2026-10-15 / 심영표] N1~N3 모두 권장안 채택.**
|
||||
|
||||
| # | 내용 | 채택안 | 다른 안 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| N1 | 범위 | 형상 G1 + 받침 G5 먼저, 철근 G2~G4는 다음 요청에서 | 철근까지 한 번에 |
|
||||
| N2 | 대좌 상면 형상(표에는 앞 h1 209 / 뒤 h1 194뿐) | 앞·뒤 받침 위치를 잇는 평면 경사 [추론](옥성교 O2와 같은 방식) | 두 높이 수평 계단 |
|
||||
| N3 | 기둥 fck(도면 표기 없음) | 35 MPa(코핑과 같게) [추론] | 27 MPa |
|
||||
|
||||
- 솔플레이트 두꺼운 쪽: S < 0이므로 **−Y** (운곡교와 같은 규칙 [추론], 미해결 목록 #16). T1이 −Y 쪽이라는 도면 표시는 없음.
|
||||
|
||||
## 6. 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 생성 | 울산 형식 템플릿으로 앱 교각 생성 → 판독값 입력. 생성기는 기존 `concrete_tapered.py`(옥성교에서 확장한 옵션: 측면 테이퍼, 공유 대좌, 말뚝 선택)를 그대로 사용, 말뚝 없음 |
|
||||
| 검사기 | `g1_pedestal.py` 신설(옥성교 `g1_skew.py`의 복사본, 말뚝 없음·사각 0° 허용). 기존 검사기는 수정하지 않아 다른 교각에 영향 없음 |
|
||||
| G1 | PASS 138/138 — 객체 수, 닫힌 솔리드, 기초·버림·기둥 크기·EL, 코핑 정면 단면(하면·5단)과 측면 폭, 끝면, 이음·겹침, 체적, 대좌 5개·패드 10개(EL.'X', 평면 위치, 대좌 위 놓임). 음성 시험(BP02 수평 3, BS03 수직 2) 검출, 재로드 19 |
|
||||
| G5 | PASS 183/183 — 받침·솔플레이트 10쌍(높이 h3, 크기 550·650, 경사 S, 두꺼운 쪽, 색), 앞 게이트 객체 19개 불변, 재로드 39 |
|
||||
| 모델 | 객체 39(버림·기초·기둥·코핑 4, 대좌 5, 패드 10, 받침 10, 솔플레이트 10) |
|
||||
| 부피(m³) | 버림 6.241, 기초 154.154, 기둥 64.242, 코핑 86.923 |
|
||||
|
||||
- 1차 G1 실행에서 FAIL 3건(패드 윗면 = EL.'X')이 났습니다. 원인은 작도선의 단 높이(소수 .1)를 그대로 쓴 것이었고, 표 환산 규칙(위 평균값)으로 고쳐 PASS했습니다.
|
||||
- 모델링하지 않은 것: 철근 G2~G4(구조도 1~4에 있음), 코핑 상부 배수·점검 시설 등 작도 상세.
|
||||
- Rhino 렌더로 형상·대좌·패드 배치를 확인했습니다. 앱 확정·게이트 승인은 담당자 몫입니다.
|
||||
|
||||
## 7. 도면 확인 사항 (참고)
|
||||
|
||||
- 정면도 'EL. 32.532'(왼쪽 상면)와 표(앞열) 환산 32.531이 1 mm 다릅니다(표 반올림).
|
||||
- 정면도·단면도의 기둥이 중간에서 끊겨 그려져 있어 정면 길이가 실제(16,900)보다 짧습니다. 치수 문자(16.900)를 따랐습니다.
|
||||
- 사각은 없고(평면 직사각), 받침 패드만 앞·뒤 열에서 서로 다른 각도(−2.15° / −6.45°)로 회전해 있습니다(곡선 선형).
|
||||
|
||||
## 8. 기둥 철근 (G2: P1~P5)
|
||||
|
||||
- 근거: 구조도(1) 정면(치수 사슬), 구조도(2) 단면 5개(주철근 두 겹·띠철근·크로스타이), 구조도(4) 재료표·철근 상세. 스크립트 `extract_g2.py` → `판독/g2_values.json`, 등록 `add_g2.py`(백업 `data/새재1교P1/backup/2026-10-15_g2/`)
|
||||
- 좌표: 구조도(1) 정면 z = 도면 y − 10,329.7(기초 하면 y 20,361.7 = EL 10.032), 기둥 중심 x 225,532. **기둥이 절단 표시로 끊겨 그려져** 띠철근 선이 42개만 그려져 있고(모두 사슬과 일치, 끊김 위쪽은 도면이 100 어긋남), 전체 단은 치수 사슬이 줍니다.
|
||||
|
||||
### 8.1 재료표·상세
|
||||
|
||||
| 마크 | 직경 | L (mm) | N | 모양 |
|
||||
| :--- | :--- | --: | --: | :--- |
|
||||
| P1 | H32 | 22,869 | 49 | 주철근 바깥 겹: 직선 21,835 + 90° 원호 r 340(534) + 다리 500 (밖으로) |
|
||||
| P2 | H32 | 22,869 | 49 | 주철근 안쪽 겹: 같은 모양, 다리는 안으로 |
|
||||
| P3 | H25 | 6,306 | 45 | 띠철근(커플러 반원 2개): r 1.004, a 3,073, b 80 |
|
||||
| P4 | H19 | 6,286 | 27 | 띠철근(커플러 반원 2개): r 1.001, a 3,078, b 65 |
|
||||
| P5 | H19 | 2,515 | 80 | 크로스타이: a 200, b 2,050, c 165, d 100, r 70 |
|
||||
|
||||
### 8.2 판독값
|
||||
|
||||
| 대상 | 값 | 근거 |
|
||||
| :--- | :--- | :--- |
|
||||
| 주철근 | 두 겹 49본씩, 반지름 975(P1) / 930(P2), 7.347° 간격, 0°부터. 다리 EL 10.182(기초 하면 + 150), 직선 EL 10.522 ~ 32.357 | 단면 5개 모두 같음, 정면 다리 작도 |
|
||||
| 띠철근 72단 | 기초 하면 + `100 \| 1.300 \| 4@300 \| 18@150 \| 36@300 \| 9@300 \| 4@300` (EL 11.432 ~ 30.032, 마지막은 코핑 안 500) | 정면 사슬 '띠철근외측' (합계 22.500 = 코핑 상면까지) |
|
||||
| 띠철근 구간 | P3 5 / P4 18 / P3 36 / P4 9 / P3 4 | 수량 P3 45·P4 27과 일치하는 유일한 교번 배정 [추론] |
|
||||
| 띠철근 반지름 | P3 1,003.5 / P4 1,000.5 (= 주철근 975 + 16 + 띠철근 반지름), 표 '1.004 / 1.001'은 반올림 | 곡선 길이 검산 |
|
||||
| 크로스타이 40단 × 2 | 기초 하면 + `100 \| 950 \| 600 \| 7@300 \| 15@600 \| 14@300 \| 2@600` (EL 11.082 ~ 28.182), 단마다 X·Y 두 개, Y를 19 위로 [추론] | 정면 사슬 '크로스타이' |
|
||||
|
||||
### 8.3 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 생성·검사기 | 기존 `column_rebar_ring.py`(옥성교 옵션: 안쪽 겹, 구간별 반지름, 90°/135° 크로스타이)·`g2_ring.py` 그대로, 엔진 변경 없음 |
|
||||
| 철근 | 주철근 98 + 띠철근 72단(반원 2개씩 144) + 크로스타이 80 = 322본(중심선·파이프 각 322, G2 객체 644, 앞 게이트 포함 총 663) |
|
||||
| G2 | PASS 41/41 — 개수·원길이(재료표 L), 주철근 반지름·분할·다리·상단, 띠철근 높이 사슬·구간·반지름, 크로스타이 단·본수·Y 높임, 콘크리트 내부·피복. 음성 시험(P1 수평 5, P3 수직 5) 검출, 재로드 663, G1 객체 19 불변 |
|
||||
| G5 | 재실행 PASS 183/183(앞 게이트 663 불변) |
|
||||
| 최소 피복(기록) | P1 109.0 / P2 134.0 / P3 84.0 / P4 90.0 / P5 65.5 |
|
||||
|
||||
- 1차 G2 실행에서 FAIL 2건(P3·P4 곡선 길이, 표 값 반지름 1,004 / 1,001 사용)이 났고, 반지름을 위 계산값으로 바로잡아 PASS했습니다.
|
||||
- [추론] 사용자 확인 필요: P3·P4 구간 배정, 크로스타이 Y 높임 19와 90°/135° 교번, 꼬리 = c 165, 커플러 위치(90°/270°).
|
||||
- 간섭 미검사: 주철근 다발과 크로스타이, 띠철근 이음부.
|
||||
@@ -0,0 +1,176 @@
|
||||
# 새재1교 P1 교각 도면 판독서 (형상·받침)
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-15 | 심영표 | 최초 작성 (G1 형상·G5 받침 판독, 결정 N1~N3 반영, 모델·게이트 결과) | G1 138/138 · G5 183/183 PASS. 철근 G2~G4는 다음 Task |
|
||||
| v0.1.01 | 2026-10-15 | 심영표 | 8장 기둥 철근(G2: P1~P5) 판독·모델·게이트 결과 신설 | G1·G2·G5 PASS. 기초·코핑 철근은 다음 Task |
|
||||
| v0.1.02 | 2026-10-15 | 심영표 | 9장 기초 철근(G3: B1~B12, UM) 판독·결정·모델·게이트 결과 신설 | G1·G2·G3·G5 PASS(G3 계획 FAIL 4). 코핑 철근은 다음 Task |
|
||||
|
||||
## 1. 대상 도면
|
||||
|
||||
- `RAG/새재1교P1.dwg` (읽기 전용) — 한 파일에 교각 일반도(1)(2)와 구조도(1)~(4)(철근)가 들어 있습니다(문자 1,646개, DXF 1장, ODA 변환). 옥성교 P1과 같은 도면 틀(공주시 국도대체우회도로(봉정~방문), 삼안·유신·삼영)입니다.
|
||||
- 판독 스크립트: `Code/새재1교P1판독/convert_index.py`(변환·색인), `extract_g1.py`(→ `판독/g1_values.json`), `make_pier.py`(앱 교각 생성·값 입력)
|
||||
|
||||
## 2. 판독 좌표
|
||||
|
||||
| 대상 | 기준 |
|
||||
| :--- | :--- |
|
||||
| 정면도 | 기둥이 중간에서 끊겨 그려짐(절단 기호) → 기초 쪽 z = 도면 y − 14,716.5 (기초 하면 y 24,748.5 = EL 10.032), 코핑 쪽 z = 도면 y − 5,816.5 (코핑 하면 평평부 y 35,348.5 = EL 29.532). 중심 x 33,756.4 |
|
||||
| 단면도 | 중심 x 61,366.4, 같은 z 규칙 |
|
||||
| 평면도 | 기둥 중심 (34,904.3, 55,436.6) = 모델 원점, 평면 위쪽 = +Y(선형 진행 방향) |
|
||||
|
||||
## 3. 형상 판독 (G1)
|
||||
|
||||
| 부재 | 값 | 근거 |
|
||||
| :--- | :--- | :--- |
|
||||
| 버림 콘크리트 | 7,900 × 7,900 × 100, EL 9.932~10.032, fck 16 MPa | 정면 7.900, 100 |
|
||||
| 확대기초 | 7,700 × 7,700 × 2,600, EL 10.032~12.632, fck 27 MPa (**말뚝 없음**) | 정면 7.700, 2.600, 기초 평면도 |
|
||||
| 기둥 | 원형 Ø2,200, 높이 16,900, EL 12.632~29.532 | 정면 2.200, 16.900, 평면 원 r 1,100 |
|
||||
| 코핑 정면 (Y = 0 단면) | 하면 평평 ±1,200 (EL 29.532), 끝(±6,000)에서 EL 31.232까지 경사(높이 1,700), 끝 수직 높이 왼쪽 1,300·오른쪽 1,704, 상면 5단 | 정면 코핑 외곽 2F1A~2F27, 치수 1.300·1.704·1.700 |
|
||||
| 상면 5단 | x 경계 −3,722.5 / −1,215.6 / 1,291.3 / 3,798.2, 단 높이 EL 32.532 → 32.936(단마다 약 + 101, 상면 약 4 % 경사) | 정면 2.277·3@2.507·2.202, EL 32.532·32.936 |
|
||||
| 코핑 폭 | 3,000, 측면은 하면 ±1,100에서 EL 31.232의 ±1,500까지 테이퍼(경사 1,746.4) | 단면도 2DAF/2DB0 |
|
||||
| 평면 | 12,000 × 3,000 **직사각**(사각 없음) | 평면 28FA~28FD |
|
||||
| 콘크리트 강도 | 코핑 35 MPa, 기초 27 MPa, 기둥 35 MPa **[추론]**(N3) | 일반도 주기 |
|
||||
|
||||
## 4. 받침 판독 (G1 대좌·패드, G5)
|
||||
|
||||
| 항목 | 값 | 근거 |
|
||||
| :--- | :--- | :--- |
|
||||
| 대좌 | 5개, 평면 1,300(X) × 2,397(Y) **직사각**, 앞·뒤 받침이 함께 올라탐, 중심 x −4,976.0 / −2,469.1 / 37.9 / 2,544.8 / 5,051.6 | 평면 28D6~28F9, 표 C1~C6(700·999·2,397 / 650·650·1,300) |
|
||||
| 받침 패드 | 앞열 NO.1~5: y −499.7, 회전 −2.17° ~ −2.14°. 뒤열 NO.6~10: y +497.0, 회전 −6.40° ~ −6.50° (가장자리 750 × 750, 안쪽 650·550) | 평면 패드 2989~29A6, 표 S1·S2(1,000 / 997 / 1,003) |
|
||||
| 받침 | A × B = 550 × 550, h1 209(앞, NO.5는 208) / 194(뒤), h2 50, h3 132, h4 23 / 24 | ELEVATION TABLE |
|
||||
| EL.'X' | 앞 32.790 / 32.891 / 32.992 / 33.093 / 33.194, 뒤 32.776 / 32.877 / 32.978 / 33.079 / 33.180 | ELEVATION TABLE |
|
||||
| 솔플레이트 | L 650 × W 650, T 23(앞)·24(뒤), S(%) −0.460 … −0.452(앞), −0.504 … −0.496(뒤), T1 24·26, T2 22 | 솔플레이트 TABLE |
|
||||
|
||||
- 단 높이 규칙: 다른 교각과 같이 **단 높이 = EL.'X' − h1 − h2**. 표의 앞열이 만든 값(32,531 / 32,632 / 32,733 / 32,834 / 32,936)과 뒤열이 만든 값(32,532 / 32,633 / 32,734 / 32,835 / 32,936)이 1 mm 어긋나고(표 반올림), 작도선은 뒤열 값에 가깝습니다(32,532.0 / 32,633.1 / …). 모델은 두 값의 평균(.5)을 써서 앞·뒤 모두 0.5 mm 안에 둡니다. 1 mm 차이는 표 반올림으로 보며 FAIL로 두지 않았습니다.
|
||||
- 받침 번호: 평면도에서 ①~⑤가 아래 열(−Y), ⑥~⑩이 위 열(+Y), 모두 왼쪽에서 오른쪽입니다. 위 열 패드 x는 대좌 중심보다 약 75 mm 왼쪽(회전 때문)입니다.
|
||||
|
||||
## 5. 결정 요청과 결과
|
||||
|
||||
> **[결정 2026-10-15 / 심영표] N1~N3 모두 권장안 채택.**
|
||||
|
||||
| # | 내용 | 채택안 | 다른 안 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| N1 | 범위 | 형상 G1 + 받침 G5 먼저, 철근 G2~G4는 다음 요청에서 | 철근까지 한 번에 |
|
||||
| N2 | 대좌 상면 형상(표에는 앞 h1 209 / 뒤 h1 194뿐) | 앞·뒤 받침 위치를 잇는 평면 경사 [추론](옥성교 O2와 같은 방식) | 두 높이 수평 계단 |
|
||||
| N3 | 기둥 fck(도면 표기 없음) | 35 MPa(코핑과 같게) [추론] | 27 MPa |
|
||||
|
||||
- 솔플레이트 두꺼운 쪽: S < 0이므로 **−Y** (운곡교와 같은 규칙 [추론], 미해결 목록 #16). T1이 −Y 쪽이라는 도면 표시는 없음.
|
||||
|
||||
## 6. 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 생성 | 울산 형식 템플릿으로 앱 교각 생성 → 판독값 입력. 생성기는 기존 `concrete_tapered.py`(옥성교에서 확장한 옵션: 측면 테이퍼, 공유 대좌, 말뚝 선택)를 그대로 사용, 말뚝 없음 |
|
||||
| 검사기 | `g1_pedestal.py` 신설(옥성교 `g1_skew.py`의 복사본, 말뚝 없음·사각 0° 허용). 기존 검사기는 수정하지 않아 다른 교각에 영향 없음 |
|
||||
| G1 | PASS 138/138 — 객체 수, 닫힌 솔리드, 기초·버림·기둥 크기·EL, 코핑 정면 단면(하면·5단)과 측면 폭, 끝면, 이음·겹침, 체적, 대좌 5개·패드 10개(EL.'X', 평면 위치, 대좌 위 놓임). 음성 시험(BP02 수평 3, BS03 수직 2) 검출, 재로드 19 |
|
||||
| G5 | PASS 183/183 — 받침·솔플레이트 10쌍(높이 h3, 크기 550·650, 경사 S, 두꺼운 쪽, 색), 앞 게이트 객체 19개 불변, 재로드 39 |
|
||||
| 모델 | 객체 39(버림·기초·기둥·코핑 4, 대좌 5, 패드 10, 받침 10, 솔플레이트 10) |
|
||||
| 부피(m³) | 버림 6.241, 기초 154.154, 기둥 64.242, 코핑 86.923 |
|
||||
|
||||
- 1차 G1 실행에서 FAIL 3건(패드 윗면 = EL.'X')이 났습니다. 원인은 작도선의 단 높이(소수 .1)를 그대로 쓴 것이었고, 표 환산 규칙(위 평균값)으로 고쳐 PASS했습니다.
|
||||
- 모델링하지 않은 것: 철근 G2~G4(구조도 1~4에 있음), 코핑 상부 배수·점검 시설 등 작도 상세.
|
||||
- Rhino 렌더로 형상·대좌·패드 배치를 확인했습니다. 앱 확정·게이트 승인은 담당자 몫입니다.
|
||||
|
||||
## 7. 도면 확인 사항 (참고)
|
||||
|
||||
- 정면도 'EL. 32.532'(왼쪽 상면)와 표(앞열) 환산 32.531이 1 mm 다릅니다(표 반올림).
|
||||
- 정면도·단면도의 기둥이 중간에서 끊겨 그려져 있어 정면 길이가 실제(16,900)보다 짧습니다. 치수 문자(16.900)를 따랐습니다.
|
||||
- 사각은 없고(평면 직사각), 받침 패드만 앞·뒤 열에서 서로 다른 각도(−2.15° / −6.45°)로 회전해 있습니다(곡선 선형).
|
||||
|
||||
## 8. 기둥 철근 (G2: P1~P5)
|
||||
|
||||
- 근거: 구조도(1) 정면(치수 사슬), 구조도(2) 단면 5개(주철근 두 겹·띠철근·크로스타이), 구조도(4) 재료표·철근 상세. 스크립트 `extract_g2.py` → `판독/g2_values.json`, 등록 `add_g2.py`(백업 `data/새재1교P1/backup/2026-10-15_g2/`)
|
||||
- 좌표: 구조도(1) 정면 z = 도면 y − 10,329.7(기초 하면 y 20,361.7 = EL 10.032), 기둥 중심 x 225,532. **기둥이 절단 표시로 끊겨 그려져** 띠철근 선이 42개만 그려져 있고(모두 사슬과 일치, 끊김 위쪽은 도면이 100 어긋남), 전체 단은 치수 사슬이 줍니다.
|
||||
|
||||
### 8.1 재료표·상세
|
||||
|
||||
| 마크 | 직경 | L (mm) | N | 모양 |
|
||||
| :--- | :--- | --: | --: | :--- |
|
||||
| P1 | H32 | 22,869 | 49 | 주철근 바깥 겹: 직선 21,835 + 90° 원호 r 340(534) + 다리 500 (밖으로) |
|
||||
| P2 | H32 | 22,869 | 49 | 주철근 안쪽 겹: 같은 모양, 다리는 안으로 |
|
||||
| P3 | H25 | 6,306 | 45 | 띠철근(커플러 반원 2개): r 1.004, a 3,073, b 80 |
|
||||
| P4 | H19 | 6,286 | 27 | 띠철근(커플러 반원 2개): r 1.001, a 3,078, b 65 |
|
||||
| P5 | H19 | 2,515 | 80 | 크로스타이: a 200, b 2,050, c 165, d 100, r 70 |
|
||||
|
||||
### 8.2 판독값
|
||||
|
||||
| 대상 | 값 | 근거 |
|
||||
| :--- | :--- | :--- |
|
||||
| 주철근 | 두 겹 49본씩, 반지름 975(P1) / 930(P2), 7.347° 간격, 0°부터. 다리 EL 10.182(기초 하면 + 150), 직선 EL 10.522 ~ 32.357 | 단면 5개 모두 같음, 정면 다리 작도 |
|
||||
| 띠철근 72단 | 기초 하면 + `100 \| 1.300 \| 4@300 \| 18@150 \| 36@300 \| 9@300 \| 4@300` (EL 11.432 ~ 30.032, 마지막은 코핑 안 500) | 정면 사슬 '띠철근외측' (합계 22.500 = 코핑 상면까지) |
|
||||
| 띠철근 구간 | P3 5 / P4 18 / P3 36 / P4 9 / P3 4 | 수량 P3 45·P4 27과 일치하는 유일한 교번 배정 [추론] |
|
||||
| 띠철근 반지름 | P3 1,003.5 / P4 1,000.5 (= 주철근 975 + 16 + 띠철근 반지름), 표 '1.004 / 1.001'은 반올림 | 곡선 길이 검산 |
|
||||
| 크로스타이 40단 × 2 | 기초 하면 + `100 \| 950 \| 600 \| 7@300 \| 15@600 \| 14@300 \| 2@600` (EL 11.082 ~ 28.182), 단마다 X·Y 두 개, Y를 19 위로 [추론] | 정면 사슬 '크로스타이' |
|
||||
|
||||
### 8.3 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 생성·검사기 | 기존 `column_rebar_ring.py`(옥성교 옵션: 안쪽 겹, 구간별 반지름, 90°/135° 크로스타이)·`g2_ring.py` 그대로, 엔진 변경 없음 |
|
||||
| 철근 | 주철근 98 + 띠철근 72단(반원 2개씩 144) + 크로스타이 80 = 322본(중심선·파이프 각 322, G2 객체 644, 앞 게이트 포함 총 663) |
|
||||
| G2 | PASS 41/41 — 개수·원길이(재료표 L), 주철근 반지름·분할·다리·상단, 띠철근 높이 사슬·구간·반지름, 크로스타이 단·본수·Y 높임, 콘크리트 내부·피복. 음성 시험(P1 수평 5, P3 수직 5) 검출, 재로드 663, G1 객체 19 불변 |
|
||||
| G5 | 재실행 PASS 183/183(앞 게이트 663 불변) |
|
||||
| 최소 피복(기록) | P1 109.0 / P2 134.0 / P3 84.0 / P4 90.0 / P5 65.5 |
|
||||
|
||||
- 1차 G2 실행에서 FAIL 2건(P3·P4 곡선 길이, 표 값 반지름 1,004 / 1,001 사용)이 났고, 반지름을 위 계산값으로 바로잡아 PASS했습니다.
|
||||
- [추론] 사용자 확인 필요: P3·P4 구간 배정, 크로스타이 Y 높임 19와 90°/135° 교번, 꼬리 = c 165, 커플러 위치(90°/270°).
|
||||
- 간섭 미검사: 주철근 다발과 크로스타이, 띠철근 이음부.
|
||||
|
||||
## 9. 기초 철근 (G3: B1~B12, UM)
|
||||
|
||||
- 근거: 구조도(1) 정면·측면 기초(점·선·치수 사슬), 구조도(3) 기초 평면, 구조도(4) 재료표·철근 상세. 스크립트 `extract_g3.py` → `판독/g3_values.json`, `extract_g3_bars.py` → `판독/g3_bars.json`(307본), `add_g3.py`(백업 `data/새재1교P1/backup/2026-10-15_g3/`)
|
||||
- 좌표: 구조도(1) 정면 중심 x 225,817.5, 측면 중심 x 242,892.5, z = 도면 y − 10,329.7. 기초 평면도는 7,700 × 7,700입니다. 평면 치수의 '8.000'은 사슬 합계(7,700 + 300)이며 치수 사슬 '−300'이 그 보정입니다.
|
||||
- 구조는 옥성교 G3와 같습니다(상·하면 X·Y 4층 U형 + 중간층 + 둘레 고리 + 연직 결속근).
|
||||
|
||||
### 9.1 재료표·상세
|
||||
|
||||
| 마크 | 직경 | L | N | 형상 |
|
||||
| :--- | :--- | --: | --: | :--- |
|
||||
| B1·B3 | H25 | 10,590 | 31·30 | 상면 Y방향 U형 a 7,500 + 다리 900 × 2(아래로), 겹이음 j 1,290 |
|
||||
| B2·B4 | H25 | 12,010 | 31·30 | 하면 Y방향 U형 a 7,500 + 다리 1,800 × 2(위로), j 910 |
|
||||
| B5·B7 | H25 | 11,190 | 27·26 | 상면 X방향 U형 a 7,500 + 다리 1,200 × 2, j 1,290 |
|
||||
| B6·B8 | H25 | 13,210 | 27·26 | 하면 X방향 U형 a 7,500 + 다리 2,400 × 2, j 910 |
|
||||
| B9 | H19 | 6,332 | 45 | 연직 'ㄷ'형: 위 a 1,244, 연직 b 2,444, 아래 c 100 |
|
||||
| B10 | H19 | 32,416 | 4 | 폐합 고리 7,544 × 7,544, 겹이음 560 × 4 |
|
||||
| B11·B12 | H19 | 7,700 | 11·23 | 중간층 U형 a 7,500 + 다리 100 × 2 |
|
||||
| UM | H22 | 5,496 | 80 | 조립용 A자형 받침 a 200, b 2,448, c 200 |
|
||||
|
||||
### 9.2 판독값
|
||||
|
||||
| 층 | 값 | 근거 |
|
||||
| :--- | :--- | :--- |
|
||||
| 하면 Y방향(B2/B4) | EL 10.132, x 61곳(−3,750, −3,675, −3,600 → @125 → 3,525, 3,650), 다리 1,800 위로 | 정면 점 61, 측면 다리선 |
|
||||
| 하면 X방향(B6/B8) | EL 10.1545, y **51곳**(−3,750 ~ 3,750 @150), 다리 2,400 위로 | 측면 점 51, 사슬 '52@150 = 7.800 −300', 정면 다리선 |
|
||||
| 상면 Y방향(B1/B3) | EL 12.532, x 61곳(하면과 같음), 다리 900 아래로 | 정면 점 |
|
||||
| 상면 X방향(B5/B7) | EL 12.5095, y 51곳, 다리 1,200 아래로 | 측면 점, 정면 다리선 |
|
||||
| 중간층 | Y방향(B12) 23곳 = EL 10.732에 8, 11.332에 7, 11.632에 8(x @1,000, 단마다 500 어긋남), X방향(B11) 11곳 = 같은 EL에 4·3·4(y −3,450, −1,050, 1,350, 3,750 / −2,250, 150, 2,550) | 정면·측면 점 |
|
||||
| B10 | 4단 EL 10.432 / 10.732 / 11.332 / 11.632, 모서리 ±3,772.5 | 정면·측면 모서리 점, 재료표 7,544 |
|
||||
| B9 | 정면 연직선 15곳 x −3,600 + 500 j(짝수 행 8, 홀수 행 7), 측면 다리 행 6(y −2,850 + 1,200 k), 위 EL 12.554 아래 EL 10.110 | 정면 EREC 선, 측면 다리선, 평면 아래 절반 기호 |
|
||||
|
||||
### 9.3 결정
|
||||
|
||||
> **[결정 2026-10-15 / 심영표] 옥성교 F1~F5 규칙을 그대로 적용, X방향 본수는 도면 51곳 채택(계획 FAIL).**
|
||||
|
||||
| # | 내용 | 채택안 | 다른 안 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| R1 | **[CONFLICT]** X방향 철근 본수: 작도 51곳 vs 재료표 B5 27 + B7 26 = 53(B6·B8도 같음) | 도면 51곳(B5 26, B7 25, B6 26, B8 25)으로 모델링, 재료표 53과의 차이 4건은 **계획 FAIL** 승인(운곡교 B12와 같은 방식) | 재료표 53곳(기초 밖 위치가 생겨 비권장) |
|
||||
| F1·F2 | B9 행·열 규칙으로 격자 전체 생성(작도는 아래 절반만), 45본 | 옥성교와 같음 [추론] | — |
|
||||
| F3 | 같은 모양 두 마크 교번, 겹이음 미모델 | 옥성교와 같음 [추론] | — |
|
||||
| F4 | 중간층 Y방향 B12를 19 위로(X·Y가 같은 높이로 교차) | 옥성교와 같음 [추론] | — |
|
||||
| F5 | UM 조립용 받침 80개 | 모델링하지 않고 기록만 | — |
|
||||
|
||||
### 9.4 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 생성 | 307본 중심선(`판독/g3_bars.json`)을 범용 `rebar_polylines.py`(G3: `footing_rebar`)가 파이프로 생성. 엔진 변경 없음 |
|
||||
| 검사기 | `g3_sj.py` 신설(옥성교 `g3_poly.py`의 복사본, 위치를 치수 사슬 대신 작도 점 목록으로 입력). 기존 검사기는 수정하지 않음 |
|
||||
| 철근 | B1~B8 214(상·하면 X·Y 4층), B9 45, B10 4, B11 11, B12 23 = 307 → G3 객체 614 |
|
||||
| G3 | PASS 72/76 — 계획 FAIL 4(B5~B8 본수), 미계획 FAIL 0. 개수·원길이, 4층 위치·높이·길이 7,500·다리 길이와 방향·교번, 중간층 위치·높이, B10 단·크기, B9 격자·높이·길이, 기초 밖 표본 0. 음성 시험(B1 수평 5, B10 수직 5) 검출, 재로드 1,277, G2까지 663 불변 |
|
||||
| G5 | 재실행 PASS 183/183(앞 게이트 1,277 불변) |
|
||||
| 최소 피복(기록) | B1~B5·B7 87.5, B6·B8 65.0, B9 68.5, B10 68.0, B11·B12 90.5 |
|
||||
|
||||
- 모델링하지 않은 것: UM 조립용 받침 80개(F5), 겹이음 j(F3).
|
||||
- 간섭 미검사: X·Y 다리와 모서리 철근, B9와 중간층 철근.
|
||||
- [추론] 사용자 확인 필요: F1~F4 재적용, B9 행 규칙(위 행은 평면에 그려지지 않음).
|
||||
@@ -0,0 +1,231 @@
|
||||
# 새재1교 P1 교각 도면 판독서 (형상·받침·철근)
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-15 | 심영표 | 최초 작성 (G1 형상·G5 받침 판독, 결정 N1~N3 반영, 모델·게이트 결과) | G1 138/138 · G5 183/183 PASS. 철근 G2~G4는 다음 Task |
|
||||
| v0.1.01 | 2026-10-15 | 심영표 | 8장 기둥 철근(G2: P1~P5) 판독·모델·게이트 결과 신설 | G1·G2·G5 PASS. 기초·코핑 철근은 다음 Task |
|
||||
| v0.1.02 | 2026-10-15 | 심영표 | 9장 기초 철근(G3: B1~B12, UM) 판독·결정·모델·게이트 결과 신설 | G1·G2·G3·G5 PASS(G3 계획 FAIL 4). 코핑 철근은 다음 Task |
|
||||
| v0.1.03 | 2026-10-15 | 심영표 | 10장 코핑·받침좌 철근(G4: C1~C20, S1·S2) 판독·적용 규칙·모델·게이트 결과 신설 | G1~G5 전부 PASS(G3 계획 FAIL 4). 사용자 지시 "진행해줘" |
|
||||
|
||||
## 1. 대상 도면
|
||||
|
||||
- `RAG/새재1교P1.dwg` (읽기 전용) — 한 파일에 교각 일반도(1)(2)와 구조도(1)~(4)(철근)가 들어 있습니다(문자 1,646개, DXF 1장, ODA 변환). 옥성교 P1과 같은 도면 틀(공주시 국도대체우회도로(봉정~방문), 삼안·유신·삼영)입니다.
|
||||
- 판독 스크립트: `Code/새재1교P1판독/convert_index.py`(변환·색인), `extract_g1.py`(→ `판독/g1_values.json`), `make_pier.py`(앱 교각 생성·값 입력)
|
||||
|
||||
## 2. 판독 좌표
|
||||
|
||||
| 대상 | 기준 |
|
||||
| :--- | :--- |
|
||||
| 정면도 | 기둥이 중간에서 끊겨 그려짐(절단 기호) → 기초 쪽 z = 도면 y − 14,716.5 (기초 하면 y 24,748.5 = EL 10.032), 코핑 쪽 z = 도면 y − 5,816.5 (코핑 하면 평평부 y 35,348.5 = EL 29.532). 중심 x 33,756.4 |
|
||||
| 단면도 | 중심 x 61,366.4, 같은 z 규칙 |
|
||||
| 평면도 | 기둥 중심 (34,904.3, 55,436.6) = 모델 원점, 평면 위쪽 = +Y(선형 진행 방향) |
|
||||
|
||||
## 3. 형상 판독 (G1)
|
||||
|
||||
| 부재 | 값 | 근거 |
|
||||
| :--- | :--- | :--- |
|
||||
| 버림 콘크리트 | 7,900 × 7,900 × 100, EL 9.932~10.032, fck 16 MPa | 정면 7.900, 100 |
|
||||
| 확대기초 | 7,700 × 7,700 × 2,600, EL 10.032~12.632, fck 27 MPa (**말뚝 없음**) | 정면 7.700, 2.600, 기초 평면도 |
|
||||
| 기둥 | 원형 Ø2,200, 높이 16,900, EL 12.632~29.532 | 정면 2.200, 16.900, 평면 원 r 1,100 |
|
||||
| 코핑 정면 (Y = 0 단면) | 하면 평평 ±1,200 (EL 29.532), 끝(±6,000)에서 EL 31.232까지 경사(높이 1,700), 끝 수직 높이 왼쪽 1,300·오른쪽 1,704, 상면 5단 | 정면 코핑 외곽 2F1A~2F27, 치수 1.300·1.704·1.700 |
|
||||
| 상면 5단 | x 경계 −3,722.5 / −1,215.6 / 1,291.3 / 3,798.2, 단 높이 EL 32.532 → 32.936(단마다 약 + 101, 상면 약 4 % 경사) | 정면 2.277·3@2.507·2.202, EL 32.532·32.936 |
|
||||
| 코핑 폭 | 3,000, 측면은 하면 ±1,100에서 EL 31.232의 ±1,500까지 테이퍼(경사 1,746.4) | 단면도 2DAF/2DB0 |
|
||||
| 평면 | 12,000 × 3,000 **직사각**(사각 없음) | 평면 28FA~28FD |
|
||||
| 콘크리트 강도 | 코핑 35 MPa, 기초 27 MPa, 기둥 35 MPa **[추론]**(N3) | 일반도 주기 |
|
||||
|
||||
## 4. 받침 판독 (G1 대좌·패드, G5)
|
||||
|
||||
| 항목 | 값 | 근거 |
|
||||
| :--- | :--- | :--- |
|
||||
| 대좌 | 5개, 평면 1,300(X) × 2,397(Y) **직사각**, 앞·뒤 받침이 함께 올라탐, 중심 x −4,976.0 / −2,469.1 / 37.9 / 2,544.8 / 5,051.6 | 평면 28D6~28F9, 표 C1~C6(700·999·2,397 / 650·650·1,300) |
|
||||
| 받침 패드 | 앞열 NO.1~5: y −499.7, 회전 −2.17° ~ −2.14°. 뒤열 NO.6~10: y +497.0, 회전 −6.40° ~ −6.50° (가장자리 750 × 750, 안쪽 650·550) | 평면 패드 2989~29A6, 표 S1·S2(1,000 / 997 / 1,003) |
|
||||
| 받침 | A × B = 550 × 550, h1 209(앞, NO.5는 208) / 194(뒤), h2 50, h3 132, h4 23 / 24 | ELEVATION TABLE |
|
||||
| EL.'X' | 앞 32.790 / 32.891 / 32.992 / 33.093 / 33.194, 뒤 32.776 / 32.877 / 32.978 / 33.079 / 33.180 | ELEVATION TABLE |
|
||||
| 솔플레이트 | L 650 × W 650, T 23(앞)·24(뒤), S(%) −0.460 … −0.452(앞), −0.504 … −0.496(뒤), T1 24·26, T2 22 | 솔플레이트 TABLE |
|
||||
|
||||
- 단 높이 규칙: 다른 교각과 같이 **단 높이 = EL.'X' − h1 − h2**. 표의 앞열이 만든 값(32,531 / 32,632 / 32,733 / 32,834 / 32,936)과 뒤열이 만든 값(32,532 / 32,633 / 32,734 / 32,835 / 32,936)이 1 mm 어긋나고(표 반올림), 작도선은 뒤열 값에 가깝습니다(32,532.0 / 32,633.1 / …). 모델은 두 값의 평균(.5)을 써서 앞·뒤 모두 0.5 mm 안에 둡니다. 1 mm 차이는 표 반올림으로 보며 FAIL로 두지 않았습니다.
|
||||
- 받침 번호: 평면도에서 ①~⑤가 아래 열(−Y), ⑥~⑩이 위 열(+Y), 모두 왼쪽에서 오른쪽입니다. 위 열 패드 x는 대좌 중심보다 약 75 mm 왼쪽(회전 때문)입니다.
|
||||
|
||||
## 5. 결정 요청과 결과
|
||||
|
||||
> **[결정 2026-10-15 / 심영표] N1~N3 모두 권장안 채택.**
|
||||
|
||||
| # | 내용 | 채택안 | 다른 안 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| N1 | 범위 | 형상 G1 + 받침 G5 먼저, 철근 G2~G4는 다음 요청에서 | 철근까지 한 번에 |
|
||||
| N2 | 대좌 상면 형상(표에는 앞 h1 209 / 뒤 h1 194뿐) | 앞·뒤 받침 위치를 잇는 평면 경사 [추론](옥성교 O2와 같은 방식) | 두 높이 수평 계단 |
|
||||
| N3 | 기둥 fck(도면 표기 없음) | 35 MPa(코핑과 같게) [추론] | 27 MPa |
|
||||
|
||||
- 솔플레이트 두꺼운 쪽: S < 0이므로 **−Y** (운곡교와 같은 규칙 [추론], 미해결 목록 #16). T1이 −Y 쪽이라는 도면 표시는 없음.
|
||||
|
||||
## 6. 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 생성 | 울산 형식 템플릿으로 앱 교각 생성 → 판독값 입력. 생성기는 기존 `concrete_tapered.py`(옥성교에서 확장한 옵션: 측면 테이퍼, 공유 대좌, 말뚝 선택)를 그대로 사용, 말뚝 없음 |
|
||||
| 검사기 | `g1_pedestal.py` 신설(옥성교 `g1_skew.py`의 복사본, 말뚝 없음·사각 0° 허용). 기존 검사기는 수정하지 않아 다른 교각에 영향 없음 |
|
||||
| G1 | PASS 138/138 — 객체 수, 닫힌 솔리드, 기초·버림·기둥 크기·EL, 코핑 정면 단면(하면·5단)과 측면 폭, 끝면, 이음·겹침, 체적, 대좌 5개·패드 10개(EL.'X', 평면 위치, 대좌 위 놓임). 음성 시험(BP02 수평 3, BS03 수직 2) 검출, 재로드 19 |
|
||||
| G5 | PASS 183/183 — 받침·솔플레이트 10쌍(높이 h3, 크기 550·650, 경사 S, 두꺼운 쪽, 색), 앞 게이트 객체 19개 불변, 재로드 39 |
|
||||
| 모델 | 객체 39(버림·기초·기둥·코핑 4, 대좌 5, 패드 10, 받침 10, 솔플레이트 10) |
|
||||
| 부피(m³) | 버림 6.241, 기초 154.154, 기둥 64.242, 코핑 86.923 |
|
||||
|
||||
- 1차 G1 실행에서 FAIL 3건(패드 윗면 = EL.'X')이 났습니다. 원인은 작도선의 단 높이(소수 .1)를 그대로 쓴 것이었고, 표 환산 규칙(위 평균값)으로 고쳐 PASS했습니다.
|
||||
- 모델링하지 않은 것: 철근 G2~G4(구조도 1~4에 있음), 코핑 상부 배수·점검 시설 등 작도 상세.
|
||||
- Rhino 렌더로 형상·대좌·패드 배치를 확인했습니다. 앱 확정·게이트 승인은 담당자 몫입니다.
|
||||
|
||||
## 7. 도면 확인 사항 (참고)
|
||||
|
||||
- 정면도 'EL. 32.532'(왼쪽 상면)와 표(앞열) 환산 32.531이 1 mm 다릅니다(표 반올림).
|
||||
- 정면도·단면도의 기둥이 중간에서 끊겨 그려져 있어 정면 길이가 실제(16,900)보다 짧습니다. 치수 문자(16.900)를 따랐습니다.
|
||||
- 사각은 없고(평면 직사각), 받침 패드만 앞·뒤 열에서 서로 다른 각도(−2.15° / −6.45°)로 회전해 있습니다(곡선 선형).
|
||||
|
||||
## 8. 기둥 철근 (G2: P1~P5)
|
||||
|
||||
- 근거: 구조도(1) 정면(치수 사슬), 구조도(2) 단면 5개(주철근 두 겹·띠철근·크로스타이), 구조도(4) 재료표·철근 상세. 스크립트 `extract_g2.py` → `판독/g2_values.json`, 등록 `add_g2.py`(백업 `data/새재1교P1/backup/2026-10-15_g2/`)
|
||||
- 좌표: 구조도(1) 정면 z = 도면 y − 10,329.7(기초 하면 y 20,361.7 = EL 10.032), 기둥 중심 x 225,532. **기둥이 절단 표시로 끊겨 그려져** 띠철근 선이 42개만 그려져 있고(모두 사슬과 일치, 끊김 위쪽은 도면이 100 어긋남), 전체 단은 치수 사슬이 줍니다.
|
||||
|
||||
### 8.1 재료표·상세
|
||||
|
||||
| 마크 | 직경 | L (mm) | N | 모양 |
|
||||
| :--- | :--- | --: | --: | :--- |
|
||||
| P1 | H32 | 22,869 | 49 | 주철근 바깥 겹: 직선 21,835 + 90° 원호 r 340(534) + 다리 500 (밖으로) |
|
||||
| P2 | H32 | 22,869 | 49 | 주철근 안쪽 겹: 같은 모양, 다리는 안으로 |
|
||||
| P3 | H25 | 6,306 | 45 | 띠철근(커플러 반원 2개): r 1.004, a 3,073, b 80 |
|
||||
| P4 | H19 | 6,286 | 27 | 띠철근(커플러 반원 2개): r 1.001, a 3,078, b 65 |
|
||||
| P5 | H19 | 2,515 | 80 | 크로스타이: a 200, b 2,050, c 165, d 100, r 70 |
|
||||
|
||||
### 8.2 판독값
|
||||
|
||||
| 대상 | 값 | 근거 |
|
||||
| :--- | :--- | :--- |
|
||||
| 주철근 | 두 겹 49본씩, 반지름 975(P1) / 930(P2), 7.347° 간격, 0°부터. 다리 EL 10.182(기초 하면 + 150), 직선 EL 10.522 ~ 32.357 | 단면 5개 모두 같음, 정면 다리 작도 |
|
||||
| 띠철근 72단 | 기초 하면 + `100 \| 1.300 \| 4@300 \| 18@150 \| 36@300 \| 9@300 \| 4@300` (EL 11.432 ~ 30.032, 마지막은 코핑 안 500) | 정면 사슬 '띠철근외측' (합계 22.500 = 코핑 상면까지) |
|
||||
| 띠철근 구간 | P3 5 / P4 18 / P3 36 / P4 9 / P3 4 | 수량 P3 45·P4 27과 일치하는 유일한 교번 배정 [추론] |
|
||||
| 띠철근 반지름 | P3 1,003.5 / P4 1,000.5 (= 주철근 975 + 16 + 띠철근 반지름), 표 '1.004 / 1.001'은 반올림 | 곡선 길이 검산 |
|
||||
| 크로스타이 40단 × 2 | 기초 하면 + `100 \| 950 \| 600 \| 7@300 \| 15@600 \| 14@300 \| 2@600` (EL 11.082 ~ 28.182), 단마다 X·Y 두 개, Y를 19 위로 [추론] | 정면 사슬 '크로스타이' |
|
||||
|
||||
### 8.3 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 생성·검사기 | 기존 `column_rebar_ring.py`(옥성교 옵션: 안쪽 겹, 구간별 반지름, 90°/135° 크로스타이)·`g2_ring.py` 그대로, 엔진 변경 없음 |
|
||||
| 철근 | 주철근 98 + 띠철근 72단(반원 2개씩 144) + 크로스타이 80 = 322본(중심선·파이프 각 322, G2 객체 644, 앞 게이트 포함 총 663) |
|
||||
| G2 | PASS 41/41 — 개수·원길이(재료표 L), 주철근 반지름·분할·다리·상단, 띠철근 높이 사슬·구간·반지름, 크로스타이 단·본수·Y 높임, 콘크리트 내부·피복. 음성 시험(P1 수평 5, P3 수직 5) 검출, 재로드 663, G1 객체 19 불변 |
|
||||
| G5 | 재실행 PASS 183/183(앞 게이트 663 불변) |
|
||||
| 최소 피복(기록) | P1 109.0 / P2 134.0 / P3 84.0 / P4 90.0 / P5 65.5 |
|
||||
|
||||
- 1차 G2 실행에서 FAIL 2건(P3·P4 곡선 길이, 표 값 반지름 1,004 / 1,001 사용)이 났고, 반지름을 위 계산값으로 바로잡아 PASS했습니다.
|
||||
- [추론] 사용자 확인 필요: P3·P4 구간 배정, 크로스타이 Y 높임 19와 90°/135° 교번, 꼬리 = c 165, 커플러 위치(90°/270°).
|
||||
- 간섭 미검사: 주철근 다발과 크로스타이, 띠철근 이음부.
|
||||
|
||||
## 9. 기초 철근 (G3: B1~B12, UM)
|
||||
|
||||
- 근거: 구조도(1) 정면·측면 기초(점·선·치수 사슬), 구조도(3) 기초 평면, 구조도(4) 재료표·철근 상세. 스크립트 `extract_g3.py` → `판독/g3_values.json`, `extract_g3_bars.py` → `판독/g3_bars.json`(307본), `add_g3.py`(백업 `data/새재1교P1/backup/2026-10-15_g3/`)
|
||||
- 좌표: 구조도(1) 정면 중심 x 225,817.5, 측면 중심 x 242,892.5, z = 도면 y − 10,329.7. 기초 평면도는 7,700 × 7,700입니다. 평면 치수의 '8.000'은 사슬 합계(7,700 + 300)이며 치수 사슬 '−300'이 그 보정입니다.
|
||||
- 구조는 옥성교 G3와 같습니다(상·하면 X·Y 4층 U형 + 중간층 + 둘레 고리 + 연직 결속근).
|
||||
|
||||
### 9.1 재료표·상세
|
||||
|
||||
| 마크 | 직경 | L | N | 형상 |
|
||||
| :--- | :--- | --: | --: | :--- |
|
||||
| B1·B3 | H25 | 10,590 | 31·30 | 상면 Y방향 U형 a 7,500 + 다리 900 × 2(아래로), 겹이음 j 1,290 |
|
||||
| B2·B4 | H25 | 12,010 | 31·30 | 하면 Y방향 U형 a 7,500 + 다리 1,800 × 2(위로), j 910 |
|
||||
| B5·B7 | H25 | 11,190 | 27·26 | 상면 X방향 U형 a 7,500 + 다리 1,200 × 2, j 1,290 |
|
||||
| B6·B8 | H25 | 13,210 | 27·26 | 하면 X방향 U형 a 7,500 + 다리 2,400 × 2, j 910 |
|
||||
| B9 | H19 | 6,332 | 45 | 연직 'ㄷ'형: 위 a 1,244, 연직 b 2,444, 아래 c 100 |
|
||||
| B10 | H19 | 32,416 | 4 | 폐합 고리 7,544 × 7,544, 겹이음 560 × 4 |
|
||||
| B11·B12 | H19 | 7,700 | 11·23 | 중간층 U형 a 7,500 + 다리 100 × 2 |
|
||||
| UM | H22 | 5,496 | 80 | 조립용 A자형 받침 a 200, b 2,448, c 200 |
|
||||
|
||||
### 9.2 판독값
|
||||
|
||||
| 층 | 값 | 근거 |
|
||||
| :--- | :--- | :--- |
|
||||
| 하면 Y방향(B2/B4) | EL 10.132, x 61곳(−3,750, −3,675, −3,600 → @125 → 3,525, 3,650), 다리 1,800 위로 | 정면 점 61, 측면 다리선 |
|
||||
| 하면 X방향(B6/B8) | EL 10.1545, y **51곳**(−3,750 ~ 3,750 @150), 다리 2,400 위로 | 측면 점 51, 사슬 '52@150 = 7.800 −300', 정면 다리선 |
|
||||
| 상면 Y방향(B1/B3) | EL 12.532, x 61곳(하면과 같음), 다리 900 아래로 | 정면 점 |
|
||||
| 상면 X방향(B5/B7) | EL 12.5095, y 51곳, 다리 1,200 아래로 | 측면 점, 정면 다리선 |
|
||||
| 중간층 | Y방향(B12) 23곳 = EL 10.732에 8, 11.332에 7, 11.632에 8(x @1,000, 단마다 500 어긋남), X방향(B11) 11곳 = 같은 EL에 4·3·4(y −3,450, −1,050, 1,350, 3,750 / −2,250, 150, 2,550) | 정면·측면 점 |
|
||||
| B10 | 4단 EL 10.432 / 10.732 / 11.332 / 11.632, 모서리 ±3,772.5 | 정면·측면 모서리 점, 재료표 7,544 |
|
||||
| B9 | 정면 연직선 15곳 x −3,600 + 500 j(짝수 행 8, 홀수 행 7), 측면 다리 행 6(y −2,850 + 1,200 k), 위 EL 12.554 아래 EL 10.110 | 정면 EREC 선, 측면 다리선, 평면 아래 절반 기호 |
|
||||
|
||||
### 9.3 결정
|
||||
|
||||
> **[결정 2026-10-15 / 심영표] 옥성교 F1~F5 규칙을 그대로 적용, X방향 본수는 도면 51곳 채택(계획 FAIL).**
|
||||
|
||||
| # | 내용 | 채택안 | 다른 안 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| R1 | **[CONFLICT]** X방향 철근 본수: 작도 51곳 vs 재료표 B5 27 + B7 26 = 53(B6·B8도 같음) | 도면 51곳(B5 26, B7 25, B6 26, B8 25)으로 모델링, 재료표 53과의 차이 4건은 **계획 FAIL** 승인(운곡교 B12와 같은 방식) | 재료표 53곳(기초 밖 위치가 생겨 비권장) |
|
||||
| F1·F2 | B9 행·열 규칙으로 격자 전체 생성(작도는 아래 절반만), 45본 | 옥성교와 같음 [추론] | — |
|
||||
| F3 | 같은 모양 두 마크 교번, 겹이음 미모델 | 옥성교와 같음 [추론] | — |
|
||||
| F4 | 중간층 Y방향 B12를 19 위로(X·Y가 같은 높이로 교차) | 옥성교와 같음 [추론] | — |
|
||||
| F5 | UM 조립용 받침 80개 | 모델링하지 않고 기록만 | — |
|
||||
|
||||
### 9.4 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 생성 | 307본 중심선(`판독/g3_bars.json`)을 범용 `rebar_polylines.py`(G3: `footing_rebar`)가 파이프로 생성. 엔진 변경 없음 |
|
||||
| 검사기 | `g3_sj.py` 신설(옥성교 `g3_poly.py`의 복사본, 위치를 치수 사슬 대신 작도 점 목록으로 입력). 기존 검사기는 수정하지 않음 |
|
||||
| 철근 | B1~B8 214(상·하면 X·Y 4층), B9 45, B10 4, B11 11, B12 23 = 307 → G3 객체 614 |
|
||||
| G3 | PASS 72/76 — 계획 FAIL 4(B5~B8 본수), 미계획 FAIL 0. 개수·원길이, 4층 위치·높이·길이 7,500·다리 길이와 방향·교번, 중간층 위치·높이, B10 단·크기, B9 격자·높이·길이, 기초 밖 표본 0. 음성 시험(B1 수평 5, B10 수직 5) 검출, 재로드 1,277, G2까지 663 불변 |
|
||||
| G5 | 재실행 PASS 183/183(앞 게이트 1,277 불변) |
|
||||
| 최소 피복(기록) | B1~B5·B7 87.5, B6·B8 65.0, B9 68.5, B10 68.0, B11·B12 90.5 |
|
||||
|
||||
- 모델링하지 않은 것: UM 조립용 받침 80개(F5), 겹이음 j(F3).
|
||||
- 간섭 미검사: X·Y 다리와 모서리 철근, B9와 중간층 철근.
|
||||
- [추론] 사용자 확인 필요: F1~F4 재적용, B9 행 규칙(위 행은 평면에 그려지지 않음).
|
||||
|
||||
|
||||
## 10. 코핑·받침좌 철근 (G4: C1~C20, S1·S2)
|
||||
|
||||
### 10.1 재료표·상세
|
||||
|
||||
| 구분 | 마크 | 지름 | 수량 | 비고 |
|
||||
| :--- | :--- | :--- | --: | :--- |
|
||||
| 상면 3단 | C1·C4 / C2·C3·C5·C6 | H29 | 12·11 / 12·12·11·11 | a 11,750, 다리 1,087(C1·C4) 또는 100 |
|
||||
| 하면 | C7 | H29 | 12 | 평평 ±1,178.5, 경사 끝 ±5,875, 위 끝 연직 525 |
|
||||
| 스터럽 | C8·C10·C12 / C9·C11·C13 | H25 | 74·38·76 / 74·38·76 | 직사각 / 5각형(측면 테이퍼를 따라 모따기), 이음 c 630 |
|
||||
| 측면 고리 | C16·C14, 타이 C17·C15 | H22 | 4·7, 24·42 | 위 4단 / 아래 7단, 단마다 타이 6줄 |
|
||||
| 보강 | C18, C19, C20 | H19 | 92, 23, 69 | C18 Y방향 U, C19 양끝 다리, C20 한끝 다리(L) |
|
||||
| 받침좌 | S1, S2 | H13 | 55, 100 | 대좌 5개 × 11 / × 20, 다리 700 |
|
||||
| 조립용 | UM | H22 | 80 | 모델링하지 않고 기록만 |
|
||||
|
||||
### 10.2 판독값 (정면 구조도(1), 단면 구조도(2))
|
||||
|
||||
- 정면 기준: 중심선 x 225,817.5, z = 도면 y − 1,429.7. 끝 x ±5,875.
|
||||
- 상면: 단면 사슬 23줄 @125(y −1,375~1,375), 마크 교번. C1·C4 EL 32.407, C2·C5 32.332, C3·C6 32.232.
|
||||
- C19·C20: 4조각 × 23줄. C20은 EL 32.508(x −3,597.6~−845.6), 32.609(−1,090.6~1,661.3), 32.710(1,416.3~4,168.2), 다리 370이 왼쪽 끝. C19는 EL 32.811(3,923.2~5,875), 다리 양쪽.
|
||||
- C7: y −1,375 + 250k의 12줄. 평평 EL 29.657 8줄, y ±1,125는 EL 30.184, y ±1,375는 EL 31.2465로 올라감.
|
||||
- 스터럽: 94곳 x = −5,788 + 125k. 구역 왼쪽 37 / 가운데 19(|x| ≤ 1,200) / 오른쪽 38. 곳마다 직사각 2(y −875~625, −625~875) + 5각형 2(y −1,375~375, −375~1,375).
|
||||
- **스터럽 윗단**: 도면 선은 받침 단 윗면 − 124.5(그림 겹침 22.5 보정 시 중심 − 102). 윗단 높이는 단 모서리가 아니라 도면의 구역 경계(곳 사이 x −3,600.5, −1,100.5, 1,399.5, 3,899.5)에서 바뀜. 단 모서리(−3,722.5 등)에서 바꾸면 높은 단 쪽 첫 스터럽이 낮은 단 윗면 1 mm 아래로 들어가 피복이 사라짐(1차 시도에서 확인).
|
||||
- 아래: 하면 + 102.5(경사부는 수직 방향 환산). 바깥 y = min(1,375, 971.6 + 0.2353(z − 29,532)).
|
||||
- 측면 고리: C16 EL 32.182·31.932·31.682·31.432, 반폭 1,352.5, x ±5,875. C14 EL 31.182~29.682(7단), x 5,484.4→1,249.1, 반폭 1,337.3→984.3. 타이 y ±352.5·602.5·852.5.
|
||||
- C18: 7개 높이 92곳(EL 32.457 10 · 32.432 10 · 32.3095 25 · 32.2095 25 · 31.682 12 · 30.682 8 · 29.682 2), 위 4단은 다리가 아래로, 아래 3단은 위로.
|
||||
- S1·S2: 대좌 1개당 S1 11(대좌 X방향 간격 −600, −500~500 @125, 600; 길이 2,297 Y방향) + S2 20(Y 간격 −1,148.5, −1,062.5~1,062.5 @125, 1,148.5; 길이 1,200 X방향), 다리 700 아래.
|
||||
|
||||
### 10.3 적용 규칙·결정 (옥성교 H1~H6 재적용 [추론])
|
||||
|
||||
> 이번 Task에서는 사용자에게 다시 묻지 않고 옥성교(2026-10-14)에서 승인된 규칙을 그대로 적용했습니다. 새재1교 도면에서 같은 해석이 맞는지는 아래 [추론] 항목을 사용자가 확인해야 합니다.
|
||||
|
||||
| # | 내용 | 적용안 | 상태 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| H1·H2 | 받침좌 철근(S1·S2)의 대좌 배치와 방향 | 대좌 평면 중심에 놓고 S1은 Y방향, S2는 X방향. 대좌 윗면 평균 높이 − 50(S1), 그 아래 13(S2). 윗면이 경사 평면이라 S1 높이는 ±17 mm 어긋남을 허용 | [추론] |
|
||||
| H3 | C7 올린 줄(y ±1,125, ±1,375)과 C18 아래 3단 다리 방향 | 올린 줄은 위 끝을 EL 32.400에서 덮어 코핑 윗면 밖으로 나가지 않게 함, C18 아래 3단은 다리를 위로 | [추론] |
|
||||
| H4 | 135° 갈고리(C15·C17)·겹이음 j·스터럽 이음 c 630 | 모델링하지 않음 | 한계 |
|
||||
| H5 | 같은 곳 스터럽 4개가 같은 평면에 겹침 | x 어긋남 직사각 ±12.5, 5각형 ±37.5 | [추론] |
|
||||
| H6 | 마크 교번(C1/C4 등) | 줄 번호 짝수/홀수 교번(도면 표지선 위치 확인 못함) | [추론] |
|
||||
|
||||
### 10.4 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
| :--- | :--- |
|
||||
| 생성 | 873본 중심선(`판독/g4_bars.json`)을 범용 `rebar_polylines.py`(G4: `coping_rebar`)가 파이프로 생성. 엔진 변경 없음 |
|
||||
| 검사기 | `g4_sj.py` 신설(옥성교 `g4_okseong.py`의 복사본, 평면 전단 제거·구역·단·받침좌를 새재1교 값으로 입력). 기존 검사기는 수정하지 않음 |
|
||||
| G4 | PASS 189/189 — 미계획 FAIL 0. 개수·원길이, 상면 3단, C19·C20 조각, C7, 스터럽(위치·윗단·아랫단·y), 측면 고리·타이, C18, 받침좌, 콘크리트 밖 표본 0. 음성 시험(C1 수평 5, C7 수직 5) 검출, 재로드 3,023, 앞 게이트 1,277 불변 |
|
||||
| G5 | 재실행 PASS 183/183(앞 게이트 3,023 불변) |
|
||||
| 최소 피복(기록) | C1~C7 110, C8~C13 84.3~89.5, C14~C17 114.0, C18 115.5, C19·C20 115, S1 133.1, S2 124.5 |
|
||||
|
||||
- 1차 게이트에서 FAIL 2건(스터럽 아래 높이)과 피복 음수(−11.1)가 나왔습니다. 원인은 ① 스터럽 x 어긋남을 아랫단 높이에 반영하지 않은 것과 ② 윗단을 단 모서리에서 바꾼 것이었고, 생성값을 고쳐 해소했습니다(검사기 기준은 도면 값 그대로).
|
||||
- 모델링하지 않은 것: UM 조립용 받침 80개, 135° 갈고리, 겹이음, 스터럽 이음.
|
||||
- 간섭 미검사: 상면 3단과 C19·C20·C7 사이, 스터럽과 측면 고리·C18.
|
||||
@@ -0,0 +1,191 @@
|
||||
# 옥성교 P1 교각 도면 판독서 (형상·받침)
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-14 | 심영표 | 최초 작성 (G1 형상·G5 받침 판독, 결정 요청 O1~O5) | 철근(G2~G4)은 다음 Task |
|
||||
| v0.1.01 | 2026-10-14 | 심영표 | 6장 O1~O5 결정 반영, 8장 모델·게이트 결과와 앱 수정 신설 | G1 147/147·G5 183/183 PASS |
|
||||
| v0.1.02 | 2026-10-14 | 심영표 | 9장 기둥 철근(G2: P1~P5) 판독 신설, 결정 요청 Q1~Q4 | 기초·코핑 철근은 다음 Task |
|
||||
| v0.1.03 | 2026-10-14 | 심영표 | 9.3 Q1~Q4 결정 반영, 9.4 G2 모델·게이트 결과 신설 | G1·G2·G5 PASS |
|
||||
| v0.1.04 | 2026-10-14 | 심영표 | 10장 기초 철근(G3: B1~B12, UM) 판독 신설, 결정 요청 F1~F5 | 방식: 철근별 중심선(사용자 결정) |
|
||||
| v0.1.05 | 2026-10-14 | 심영표 | 10.3 F1~F5 결정 반영, 10.4 G3 모델·게이트 결과 신설 | G1·G2·G3·G5 PASS |
|
||||
|
||||
## 1. 대상 도면
|
||||
|
||||
- `RAG/옥성교P1.dwg` (읽기 전용) — 한 파일에 교각 일반도(1)과 배근도 여러 장이 들어 있습니다(문자 1,718개).
|
||||
- 변환본·스크립트: `Code/옥성P1판독/` (`convert_index.py`, `dxftools.py`, `extract_g1.py` → `판독/g1_values.json`, `판독/일반도1.png`)
|
||||
- 앱 판독기 보완 1건: 솔플레이트 TABLE 창 안에 옆 ELEVATION TABLE 행이 끼어들어 머리행을 놓쳤습니다. 머리행 x 범위 밖의 숫자 줄은 건너뛰도록 고쳤습니다. 운곡교·울산 판독 결과와 Ramp-A 시험은 그대로입니다.
|
||||
|
||||
## 2. 형식
|
||||
|
||||
- **T형(말뚝기초) + 직선 경사 하면 코핑 + 사각(skew 18°) 평면**
|
||||
- 운곡교(말뚝기초), 울산(직선 경사 코핑), Ramp-A(측면 테이퍼)의 요소에, 처음 나오는 **평면 사각**이 더해진 형식입니다.
|
||||
- 강도: 기초 27 MPa, 기둥·코핑 35 MPa, 버림 16 MPa
|
||||
|
||||
## 3. 좌표 기준
|
||||
|
||||
- 원점 = 기둥 중심(평면 391,315.4 / 352,134.6). X = 코핑 길이 방향, Y = 평면 위쪽, Z = EL × 1000
|
||||
- z = 도면 y − 314,374.9
|
||||
- 기초 바닥 EL 12.175 ✓, 좌측 상면 EL 21.175 ✓, 우측 상면 21.128 ✓ ('EL. 12.175'·'EL. 21.175'·'EL. 21.128' 문자와 일치)
|
||||
- 정면도의 코핑 외곽은 중심선(y = 0) 위의 단면입니다. 평면에서 x는 y에 따라 x' = x − tan 18° · y만큼 밀립니다(y ±1,650에서 ∓536.1).
|
||||
|
||||
## 4. 판독값
|
||||
|
||||
| 부재 | 값 | 근거 |
|
||||
|---|---|---|
|
||||
| 버림 | 9,800 × 9,800 × 100, EL 12.075~12.175 | 정면 10355~1035B |
|
||||
| 기초 | 9,600 × 9,600 × 2,200, EL 12.175~14.375 (사각 아님) | 정면·단면도·기초 평면 |
|
||||
| 말뚝 | 내부굴착 강관말뚝 Ø609.0 × 12T, L 22.0 m, **5 × 5 @2,000** (가장자리 800), 머리 EL 12.275(기초 속 100) | 기초 평면 기호 25개, 정면·단면 '4@2.000=8.000' |
|
||||
| 기둥 | 원형 Ø2,500, EL 14.375~18.175 (3,800) | 정면·단면 |
|
||||
| 코핑 정면(y=0) | 하면 평탄 ±1,350 EL 18.175 → 직선 경사 → 끝 ±6,000 EL 19.675. 끝면 수직. 상면 5단: −6,000~−3,772.6 EL 21.175 / ~−1,296.4 21.209 / ~1,179.8 21.242 / ~3,656.0 21.188 / ~6,000 21.128 | 정면 1044B~10458 |
|
||||
| 코핑 측면 | 폭 3,300(EL 19.675 위) → 하면 2,500으로 직선 테이퍼 | 단면도 |
|
||||
| 코핑 평면 | 평행사변형: 상변 y +1,650 x −6,536.1~5,463.9, 하변 y −1,650 x −5,463.9~6,536.1. 끝면·상면 단 경계선 108°(사각 18°) | 평면 104A3~104AA |
|
||||
| 받침 대좌 | 5개, 평행사변형: x 폭 1,366.9 × y 2,600 (y −1,230.2~1,369.7), 앞뒤 받침 2개를 함께 받침 | 평면 1047F~104A2 |
|
||||
| 패드·받침 | 10개, 패드 하면 900 × 850 → 상면 800 × 750(A 700 × B 650 + 200/100), −18° 회전. 앞열 NO.1~5 y −530.2, 뒷열 NO.6~10 y +610.9, x 간격 2,476.2(뒷열 −370.8 밀림) | 평면 10D96~10DB3 |
|
||||
|
||||
**높이 검산**: 상면 5단 = EL.'X' − h1 − h2 (NO.1~5: 21.398·21.432·21.465·21.411·21.351 − 0.223) → 21.175·21.209·21.242·21.188·21.128 ✓ (1 mm 이내). 뒷열도 h1 194로 같은 상면 ✓
|
||||
|
||||
## 5. 받침 표 (앱 표 인식기)
|
||||
|
||||
- ELEVATION TABLE 10행: h1 173(앞열)/194(뒷열), h2 50, h3 148, h4 29, A 700, B 650, E 400/421 (E = h1+h2+h3+h4 ✓)
|
||||
- 솔플레이트 TABLE 10행: S 1.765 %, L 800, W 750, T 29, T1 22, T2 36 (T ± S·L/2 = 29 ± 7.06 → 21.9 / 36.1 ✓)
|
||||
|
||||
## 6. 결정 요청
|
||||
|
||||
> **[결정 2026-10-14 / 심영표] O1~O5 모두 권장안 채택.**
|
||||
|
||||
| # | 내용 | 권장안 | 다른 안 |
|
||||
|---|---|---|---|
|
||||
| O1 | [CONFLICT] 말뚝 배치: 기초 평면 치수 '5@1.600=8.000'(6열) vs 기호 25개(5 × 5 @2,000)·정면·단면 '4@2.000' | 5 × 5 @2,000 (치수 문자 오기로 기록) | 6 × 6 @1,600 |
|
||||
| O2 | 받침 대좌 상면: 대좌 하나가 앞뒤 받침을 함께 받는데 h1이 앞 173 / 뒤 194로 다름 | 앞뒤로 기울어진 평면 상면(앞 +173 → 뒤 +194) [추론] | 가운데에서 단차 / 앞뒤 대좌 분리 |
|
||||
| O3 | 사각의 적용 범위 | 코핑·상면 단 경계·대좌는 사각(평행사변형). 패드·받침·솔플레이트는 −18° 회전 직사각형. 기초·말뚝·기둥은 사각 없음 | — |
|
||||
| O4 | 솔플레이트 두꺼운 쪽 | S > 0, T2 36 → 교축 +Y 쪽이 두꺼움(울산과 같은 규칙) [추론] | −Y |
|
||||
| O5 | 강관말뚝 표현 | 속이 찬 원기둥 Ø609(속빈 강관과 속채움 콘크리트는 구분 안 함), 길이 22,000 [추론] | 두께 12의 속빈 관 |
|
||||
|
||||
- 참고: 기초 평면의 측량 좌표(X 429,97x / Y 207,59x)는 기록만 하고 모델은 로컬 좌표입니다(앱 범위).
|
||||
|
||||
## 7. 검사 기준값 (expected)
|
||||
|
||||
- 치수 문자: 기초 '9.600'·'2.200', 버림 100, 말뚝 '4@2.000=8.000'·'Ø609.0x12T, L=22.0M', 기둥 '2.500'·'3.800', 코핑 '12.000'·'1.500'·'1.500'·'3.300'(1,120·1,141·1,039)·'2.700'(1,350 × 2), EL 문자, 정면 받침 간격 '3@2.476=7.429'
|
||||
- 받침 표 값, 사각 18°·대좌 크기는 작도값([작도])
|
||||
|
||||
## 8. 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 앱 교각 | `Code/교각모델링앱/data/옥성교P1` (scope G1·G5). 생성기는 울산 `concrete_tapered.py`에 선택 옵션 4개(말뚝, 측면 테이퍼, 사각, 묶음 대좌)를 추가해 확장(사용자 결정). 옵션이 없으면 기존 경로 그대로 |
|
||||
| 검사기 | G1 `g1_skew.py` 신설(울산 검사기는 수정 안 함). G5는 기존 `g5_bearings.py`를 쓰되, 패드 축 방향을 윗면에서 구하도록 수정(바닥이 기울어진 패드 대응) |
|
||||
| 모델 | `data/옥성교P1/runs/current/G5.3dm` (객체 64: 버림·기초·기둥·코핑, 말뚝 25, 대좌 5, 패드 10, 받침 10, 솔플레이트 10) |
|
||||
| G1 | PASS 147/147 — 음성 시험(BP02 수평 3, BS03 수직 2) 검출, 재로드 44 |
|
||||
| G5 | PASS 183/183 — 음성 시험(BB04 수평 5, SP03 수직 5) 검출, 재로드 64, G1 객체 44 불변 |
|
||||
| 부피(m³) | 버림 8.876(말뚝 구멍 제외), 기초 202.752, 기둥 18.653, 코핑 92.869(치수 윤곽 적분과 0.1% 이내), 말뚝 1본 6.408 |
|
||||
| 보호 템플릿 | `data/_템플릿/옥성교P1형` |
|
||||
|
||||
- 1차 실행 결과 G1 137/147: '패드 중심 Y' 10건이 FAIL했습니다. 기울어진 패드 바닥 때문에 부피 무게중심이 −21.8 밀린 것으로, 검사 방법의 결함입니다. 평면 중심을 바운딩박스 중심으로 바꿔 해소했습니다.
|
||||
- 1차 실행에서 G5 검사기가 오류로 멈췄습니다. 패드의 가장 낮은 면이 수평이 아니었기 때문이고, 위와 같이 수정했습니다.
|
||||
- 앱 판독기 보완: 솔플레이트 표 머리행 x 범위 밖의 숫자 줄은 건너뜁니다(1장). 이 수정 전에 머리행 규칙을 세 번 고쳐 봤으나 울산 또는 Ramp-A 결과가 바뀌어 모두 되돌렸습니다(같은 방식 재시도 금지).
|
||||
- 육안 확인 미실시(캡처 수단 없음).
|
||||
|
||||
## 9. 기둥 철근 판독 (G2: P1~P5)
|
||||
|
||||
- 근거: 교각 구조도(1) 정면·단면, 구조도(2) 기둥 단면 4개, 구조도(4) 철근 상세·재료표·커플러 표. 스크립트 `Code/옥성P1판독/extract_g2.py` → `판독/g2_values.json`
|
||||
- 좌표: 구조도(1) 정면 z = 도면 y − 309,179.8, 기둥 중심 x 573,551.6
|
||||
|
||||
### 9.1 재료표·상세
|
||||
|
||||
| 마크 | 직경 | L | N | 형상 | 검산 |
|
||||
|---|---|---|---|---|---|
|
||||
| P1·P2 | H25 | 9,237 | 60·60 | 직선 a 8,313 + 굽힘 r 270(호 424) + 다리 c 500 | 8,313 + 424 + 500 = 9,237 ✓ |
|
||||
| P3 | H25 | 7,226 | 13 | 띠철근 반원 2조각, r 1,150, a 3,533, 커플러 b 80 | 2 × (3,533 + 80) = 7,226 ✓ |
|
||||
| P4 | H19 | 7,206 | 16 | 같은 형식, r 1,147, a 3,538, b 65 | 2 × (3,538 + 65) = 7,206 ✓ |
|
||||
| P5 | H16 | 2,722 | 40 | 연결철근 r 60, a 160, b 2,341, c 141, d 80 (90° 다리 + 135° 갈고리) | 2,722 ✓ |
|
||||
|
||||
- 커플러 표: 주철근 120(= P1 + P2), 띠철근 32·26
|
||||
|
||||
### 9.2 판독값
|
||||
|
||||
| 항목 | 값 | 근거 |
|
||||
|---|---|---|
|
||||
| 주철근 | **2겹**: P1 바깥 r 1,125 × 60, P2 안쪽 r 1,080 × 60, 둘 다 0°부터 6° 간격 | 단면 4개 모두 같음 |
|
||||
| 주철근 갈고리 | 바깥 링은 바깥으로, 안쪽 링은 안쪽으로 굽음(r 270, 다리 500) | 정면 작도 ARC 중심 ±1,395 / ±810 |
|
||||
| 주철근 위 끝 | EL 20.908 | 정면 작도(치수 없음) [작도] |
|
||||
| 띠철근 | 29단 = 13.775, 14.075, 14.375(2@300) → 16@150 → 8@300 → 2@600 (최상단 20.375). 16@150 구간 16단 = P4(H19), 나머지 13단 = P3(H25) | 사슬 '띠철근외측' = 작도 29선과 정확히 일치 ✓ |
|
||||
| 띠철근 반지름 | P3 1,150 = 1,125 + 12.5 + 12.5, P4 1,147 = 1,125 + 12.5 + 9.5 (주철근 바깥에 접함) | 재료표 r |
|
||||
| 연결철근 | 20단(13.825, 14.275, 8@300, 8@300, 2@600) × X·Y = 40 ✓, 직선 2,295 작도 | 사슬 '크로스타이', 단면 |
|
||||
|
||||
### 9.3 결정 요청
|
||||
|
||||
> **[결정 2026-10-14 / 심영표] Q1~Q4 모두 권장안 채택(Q1: 처음 고른 '운곡교 생성기 재사용'을 울산 생성기 확장으로 변경).**
|
||||
|
||||
| # | 내용 | 권장안 | 다른 안 |
|
||||
|---|---|---|---|
|
||||
| Q1 | 생성기: 사용자는 '운곡교 생성기 재사용'을 골랐으나, 띠철근이 커플러 반원 조각이고 주철근 갈고리가 있어 **울산 원형 기둥 생성기(`column_rebar_ring.py`)가 더 잘 맞음** | 울산 생성기에 선택 옵션 3개(안쪽 링·갈고리 방향, 구역별 띠철근 반지름, 90°/135° 연결철근)를 추가해 재사용. 울산 회귀로 확인 | 운곡교 생성기 확장 |
|
||||
| Q2 | [CONFLICT] 주철근 아래 끝: 작도 다리 EL 12.375(직선 8,263, L보다 50 짧음) vs 사슬 '150'(12.325)·재료표 a 8,313 | 치수·재료표(다리 12.325, 직선 8,313 → L 일치) | 작도(다리 12.375) |
|
||||
| Q3 | 연결철근 X·Y의 교차 | Y 방향을 16(철근 지름) 위로 올려 교차를 피함 [추론] (Ramp-A 결정 K3와 같음) | 같은 높이(울산과 같음, 교차 간섭 기록) |
|
||||
| Q4 | 띠철근 커플러 위치·연결철근 갈고리 방향 (도면 표시 없음) | 커플러 90°/270°(울산 규칙), 연결철근 90° 다리·135° 갈고리 좌우 단마다 교번 [추론] | 모든 단 같은 방향 |
|
||||
|
||||
### 9.4 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 생성기·검사기 | 울산 `column_rebar_ring.py`·`g2_ring.py`에 선택 옵션 추가(안쪽 링·안쪽 갈고리, 구역별 띠철근 반지름, 90°/135° 연결철근과 Y 올림). 패치 스크립트 `tools/patches/2026-10-14_patch_ring_okseong.py`, 백업 `backup/2026-10-14_okseong_g2/` |
|
||||
| 철근 | P1·P2 각 60(2겹), 띠철근 29단 × 반원 2조각(P3 13단·P4 16단), 연결철근 20단 × X·Y = 40 → G2 객체 436 |
|
||||
| G2 | PASS 39/39 — 개수·원길이(+커플러)·반지름(바깥·안쪽)·분할각·주철근 상하단·안쪽 갈고리 방향·띠철근 단 사슬·구역·반지름·연결철근 단(X 사슬, Y = X + 16)·콘크리트 밖 표본 0. 음성 시험(P1 수평 5, P3 수직 5) 검출, 재로드 480, G1 객체 44 불변 |
|
||||
| G5 | 재실행 PASS 183/183 (G2까지 480 불변) |
|
||||
| 최소 피복(기록) | P1 112.5, P2 137.5, P3 87.5, P4 93.5, P5 71.5 (손계산과 일치) |
|
||||
| 곡선 길이 − L(기록) | P1·P2 +0.1, P3 −0.3, P4 +0.8, P5 −140.6(갈고리 꼬리 작도 150 [추론]) |
|
||||
|
||||
## 10. 기초 철근 판독 (G3: B1~B12, UM)
|
||||
|
||||
- 방식: 철근별 중심선(사용자 결정 2026-10-14). 운곡교 기초 생성기는 마크 배치 규칙이 코드에 고정돼 있어 맞지 않습니다.
|
||||
- 근거: 구조도(1) 정면·단면도(기초 부분), 구조도(3) 기초 평면·기초 조립용 철근 상세, 구조도(4) 재료표·상세. 스크립트 `Code/옥성P1판독/extract_g3.py` → `판독/g3_values.json`
|
||||
|
||||
### 10.1 재료표·상세
|
||||
|
||||
| 마크 | 직경 | L | N | 형상 | 검산 |
|
||||
|---|---|---|---|---|---|
|
||||
| B1·B3 | H29 | 12,730 | 39·38 | U형 a 9,400 + 다리 b 900 × 2, 겹이음 j 1,530 | 9,400 + 1,800 + 1,530 ✓ |
|
||||
| B2·B4 | H29 | 14,070 | 39·38 | U형 a 9,400 + b 1,800 × 2, j 1,070 | ✓ |
|
||||
| B5·B7 | H29 | 12,880 | 38·37 | U형 a 9,400 + b 975 × 2, j 1,530 | ✓ |
|
||||
| B6·B8 | H29 | 14,370 | 38·37 | U형 a 9,400 + b 1,950 × 2, j 1,070 | ✓ |
|
||||
| B9 | H19 | 4,763 | 171 | 연직 'ㄷ'형: 위 a 586~548, 연직 b 1,998, 아래 c 100 | — (가변) |
|
||||
| B10 | H19 | 41,152 | 5 | 폐합 고리 9,448 × 9,448, 겹이음 560 × 6 | 4 × 9,448 + 3,360 ✓ |
|
||||
| B11·B12 | H19 | 10,160 | 19·19 | U형 a 9,400 + b 100 × 2, j 560 | ✓ |
|
||||
| UM | H22 | 4,504 | 92 | 조립용 A자형 받침: 발 200 × 2, 다리 1,952 × 2(70°), 위 200 | 200·2 + 1,952·2 + 200 ✓ |
|
||||
|
||||
### 10.2 판독값
|
||||
|
||||
| 층 | 값 | 근거 |
|
||||
|---|---|---|
|
||||
| 하면 Y방향(B2/B4) | EL 12.325, x 77곳(−4,700, −4,600, −4,500 → @125 → 4,500, 4,600, 4,700), 다리 1,800 위로 | 정면 점 77, 사슬 '100(하면)', 측면 다리선 |
|
||||
| 하면 X방향(B6/B8) | EL 12.3475, y 75곳(−4,700, −4,537.5, −4,375 → @125 → …), 다리 1,950 위로 | 측면 점 75, 사슬, 정면 다리선 |
|
||||
| 상면 Y방향(B1/B3) | EL 14.275, x 77곳, 다리 900 아래로 | 정면 점, 측면 다리선 13.375 |
|
||||
| 상면 X방향(B5/B7) | EL 14.2525, y 75곳, 다리 975 아래로 | 측면 점, 정면 다리선 13.300 |
|
||||
| 중간층 | Y방향 19(정면: EL 13.825에 x −4,000~4,000 @1,000의 9, EL 12.825에 −4,500~4,500 @1,000의 10), X방향 19(측면: 같은 규칙, 12.825는 ±4,537.5 포함) | 사슬 '18@500'·'538, 16@500, 538' |
|
||||
| B10 | 5단 EL 12.575 / 12.825 / 13.325 / 13.825 / 14.075, 모서리 ±4,722.5(9,445 중심 간격) | 정면·측면 모서리 점 |
|
||||
| B9 | 평면 x −4,530 + 500k(19열), y는 열마다 엇갈림(짝수 열 −4,268.8·−3,250·−2,250·−1,250·−250, 홀수 열 −3,750·−2,750·−1,750·−750). **아래 절반만 작도(78곳)** | 기초 평면 EREC 기호 |
|
||||
|
||||
### 10.3 결정 요청
|
||||
|
||||
> **[결정 2026-10-14 / 심영표] F1~F5 모두 권장안 채택.**
|
||||
|
||||
| # | 내용 | 권장안 | 다른 안 |
|
||||
|---|---|---|---|
|
||||
| F1 | B9 개수: 아래 절반 78곳을 대칭으로 펼치면 172곳, 재료표 N 171 | 대칭 172곳 중 기둥 중심에 가장 가까운 1곳을 빼서 171 [추론] | 172 그대로(개수 FAIL 기록) |
|
||||
| F2 | B9 형상·방향: 위 a(가변 586~548), 연직 b 1,998, 아래 c 100 | 평면 기호 방향(y)으로 'ㄷ'형, 상면 Y철근(14.275)과 하면 Y철근(12.325)을 감쌈. a는 567(평균) [추론] | — |
|
||||
| F3 | 같은 모양 두 마크(B1/B3, B2/B4, B5/B7, B6/B8)의 배치·겹이음 | 열마다 번갈아(가장자리부터 앞 마크) 두고, 겹이음 j는 모델링하지 않음(길이는 재료표 L로 기록) [추론] | — |
|
||||
| F4 | 중간층: B11·B12 중 어느 쪽이 X/Y인지 표시 없음, 다리 b 100 방향 표시 없음, X·Y가 같은 높이에서 교차 | B11 = X방향, B12 = Y방향, 다리 아래로, Y방향을 19 위로 올려 교차를 피함 [추론] | 같은 높이 |
|
||||
| F5 | 조립용 UM 92개: 상세(1,200 × 1,000 간격)는 있으나 평면 배치가 없음 | 모델링하지 않고 개수·형상만 기록(SPACER와 같은 처리) | 1,200 × 1,000 격자로 추정 배치 |
|
||||
|
||||
### 10.4 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 생성 방식 | `Code/옥성P1판독/extract_g3_bars.py`가 518본 중심선을 만들고(`판독/g3_bars.json`), 범용 `rebar_polylines.py`가 G3에서 `footing_rebar` 묶음을 씀. 엔진 수정: 생성기에 게이트 값(GATE) 전달(`pipeline.py`·`gates.py`), 패치 `tools/patches/2026-10-14_patch_gate_global.py`. 검사기 `g3_poly.py` 신설 |
|
||||
| 철근 | B1~B8 304(상·하면 X·Y 4층), B9 171, B10 5, B11·B12 각 19 → G3 객체 1,036 |
|
||||
| G3 | PASS 75/75 — 개수·원길이, 4층 위치(사슬)·높이·길이 9,400·다리 길이와 방향·교번, 중간층 높이·위치, B10 단·크기, B9 19열·높이 1,998, 기초 밖 표본 0. 음성 시험(B1 수평 5, B10 수직 5) 검출, 재로드 1,516, G2까지 480 불변 |
|
||||
| G5 | 재실행 PASS 183/183 (G3까지 1,516 불변) |
|
||||
| 최소 피복(기록) | B1~B5·B7 85.5, B6·B8 63.0(다리 위 끝), B9 66.5, B10 68.0, B11·B12 90.5 |
|
||||
|
||||
- B9 1차 생성은 155본이었습니다. 평면 아래 절반 중 오른쪽 8곳이 상세 표시 점선 원에 가려 그려지지 않았기 때문입니다. 작도 규칙(19열·엇갈린 행)으로 격자를 만들어 171본으로 바로잡았습니다(F1: 위 절반 대칭점 (470, 250) 제외).
|
||||
- 모델링하지 않은 것: UM 조립용 받침 92개(F5), 겹이음 j(F3).
|
||||
- 간섭 미검사: X·Y 다리와 모서리 철근, B9와 중간층 철근.
|
||||
@@ -0,0 +1,249 @@
|
||||
# 옥성교 P1 교각 도면 판독서 (형상·받침)
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-14 | 심영표 | 최초 작성 (G1 형상·G5 받침 판독, 결정 요청 O1~O5) | 철근(G2~G4)은 다음 Task |
|
||||
| v0.1.01 | 2026-10-14 | 심영표 | 6장 O1~O5 결정 반영, 8장 모델·게이트 결과와 앱 수정 신설 | G1 147/147·G5 183/183 PASS |
|
||||
| v0.1.02 | 2026-10-14 | 심영표 | 9장 기둥 철근(G2: P1~P5) 판독 신설, 결정 요청 Q1~Q4 | 기초·코핑 철근은 다음 Task |
|
||||
| v0.1.03 | 2026-10-14 | 심영표 | 9.3 Q1~Q4 결정 반영, 9.4 G2 모델·게이트 결과 신설 | G1·G2·G5 PASS |
|
||||
| v0.1.04 | 2026-10-14 | 심영표 | 10장 기초 철근(G3: B1~B12, UM) 판독 신설, 결정 요청 F1~F5 | 방식: 철근별 중심선(사용자 결정) |
|
||||
| v0.1.05 | 2026-10-14 | 심영표 | 10.3 F1~F5 결정 반영, 10.4 G3 모델·게이트 결과 신설 | G1·G2·G3·G5 PASS |
|
||||
| v0.1.06 | 2026-10-14 | 심영표 | 11장 코핑·교좌면 철근(G4: C1~C20, S1~S8) 판독 신설, 결정 요청 H1~H6 | 결정 대기 |
|
||||
|
||||
## 1. 대상 도면
|
||||
|
||||
- `RAG/옥성교P1.dwg` (읽기 전용) — 한 파일에 교각 일반도(1)과 배근도 여러 장이 들어 있습니다(문자 1,718개).
|
||||
- 변환본·스크립트: `Code/옥성P1판독/` (`convert_index.py`, `dxftools.py`, `extract_g1.py` → `판독/g1_values.json`, `판독/일반도1.png`)
|
||||
- 앱 판독기 보완 1건: 솔플레이트 TABLE 창 안에 옆 ELEVATION TABLE 행이 끼어들어 머리행을 놓쳤습니다. 머리행 x 범위 밖의 숫자 줄은 건너뛰도록 고쳤습니다. 운곡교·울산 판독 결과와 Ramp-A 시험은 그대로입니다.
|
||||
|
||||
## 2. 형식
|
||||
|
||||
- **T형(말뚝기초) + 직선 경사 하면 코핑 + 사각(skew 18°) 평면**
|
||||
- 운곡교(말뚝기초), 울산(직선 경사 코핑), Ramp-A(측면 테이퍼)의 요소에, 처음 나오는 **평면 사각**이 더해진 형식입니다.
|
||||
- 강도: 기초 27 MPa, 기둥·코핑 35 MPa, 버림 16 MPa
|
||||
|
||||
## 3. 좌표 기준
|
||||
|
||||
- 원점 = 기둥 중심(평면 391,315.4 / 352,134.6). X = 코핑 길이 방향, Y = 평면 위쪽, Z = EL × 1000
|
||||
- z = 도면 y − 314,374.9
|
||||
- 기초 바닥 EL 12.175 ✓, 좌측 상면 EL 21.175 ✓, 우측 상면 21.128 ✓ ('EL. 12.175'·'EL. 21.175'·'EL. 21.128' 문자와 일치)
|
||||
- 정면도의 코핑 외곽은 중심선(y = 0) 위의 단면입니다. 평면에서 x는 y에 따라 x' = x − tan 18° · y만큼 밀립니다(y ±1,650에서 ∓536.1).
|
||||
|
||||
## 4. 판독값
|
||||
|
||||
| 부재 | 값 | 근거 |
|
||||
|---|---|---|
|
||||
| 버림 | 9,800 × 9,800 × 100, EL 12.075~12.175 | 정면 10355~1035B |
|
||||
| 기초 | 9,600 × 9,600 × 2,200, EL 12.175~14.375 (사각 아님) | 정면·단면도·기초 평면 |
|
||||
| 말뚝 | 내부굴착 강관말뚝 Ø609.0 × 12T, L 22.0 m, **5 × 5 @2,000** (가장자리 800), 머리 EL 12.275(기초 속 100) | 기초 평면 기호 25개, 정면·단면 '4@2.000=8.000' |
|
||||
| 기둥 | 원형 Ø2,500, EL 14.375~18.175 (3,800) | 정면·단면 |
|
||||
| 코핑 정면(y=0) | 하면 평탄 ±1,350 EL 18.175 → 직선 경사 → 끝 ±6,000 EL 19.675. 끝면 수직. 상면 5단: −6,000~−3,772.6 EL 21.175 / ~−1,296.4 21.209 / ~1,179.8 21.242 / ~3,656.0 21.188 / ~6,000 21.128 | 정면 1044B~10458 |
|
||||
| 코핑 측면 | 폭 3,300(EL 19.675 위) → 하면 2,500으로 직선 테이퍼 | 단면도 |
|
||||
| 코핑 평면 | 평행사변형: 상변 y +1,650 x −6,536.1~5,463.9, 하변 y −1,650 x −5,463.9~6,536.1. 끝면·상면 단 경계선 108°(사각 18°) | 평면 104A3~104AA |
|
||||
| 받침 대좌 | 5개, 평행사변형: x 폭 1,366.9 × y 2,600 (y −1,230.2~1,369.7), 앞뒤 받침 2개를 함께 받침 | 평면 1047F~104A2 |
|
||||
| 패드·받침 | 10개, 패드 하면 900 × 850 → 상면 800 × 750(A 700 × B 650 + 200/100), −18° 회전. 앞열 NO.1~5 y −530.2, 뒷열 NO.6~10 y +610.9, x 간격 2,476.2(뒷열 −370.8 밀림) | 평면 10D96~10DB3 |
|
||||
|
||||
**높이 검산**: 상면 5단 = EL.'X' − h1 − h2 (NO.1~5: 21.398·21.432·21.465·21.411·21.351 − 0.223) → 21.175·21.209·21.242·21.188·21.128 ✓ (1 mm 이내). 뒷열도 h1 194로 같은 상면 ✓
|
||||
|
||||
## 5. 받침 표 (앱 표 인식기)
|
||||
|
||||
- ELEVATION TABLE 10행: h1 173(앞열)/194(뒷열), h2 50, h3 148, h4 29, A 700, B 650, E 400/421 (E = h1+h2+h3+h4 ✓)
|
||||
- 솔플레이트 TABLE 10행: S 1.765 %, L 800, W 750, T 29, T1 22, T2 36 (T ± S·L/2 = 29 ± 7.06 → 21.9 / 36.1 ✓)
|
||||
|
||||
## 6. 결정 요청
|
||||
|
||||
> **[결정 2026-10-14 / 심영표] O1~O5 모두 권장안 채택.**
|
||||
|
||||
| # | 내용 | 권장안 | 다른 안 |
|
||||
|---|---|---|---|
|
||||
| O1 | [CONFLICT] 말뚝 배치: 기초 평면 치수 '5@1.600=8.000'(6열) vs 기호 25개(5 × 5 @2,000)·정면·단면 '4@2.000' | 5 × 5 @2,000 (치수 문자 오기로 기록) | 6 × 6 @1,600 |
|
||||
| O2 | 받침 대좌 상면: 대좌 하나가 앞뒤 받침을 함께 받는데 h1이 앞 173 / 뒤 194로 다름 | 앞뒤로 기울어진 평면 상면(앞 +173 → 뒤 +194) [추론] | 가운데에서 단차 / 앞뒤 대좌 분리 |
|
||||
| O3 | 사각의 적용 범위 | 코핑·상면 단 경계·대좌는 사각(평행사변형). 패드·받침·솔플레이트는 −18° 회전 직사각형. 기초·말뚝·기둥은 사각 없음 | — |
|
||||
| O4 | 솔플레이트 두꺼운 쪽 | S > 0, T2 36 → 교축 +Y 쪽이 두꺼움(울산과 같은 규칙) [추론] | −Y |
|
||||
| O5 | 강관말뚝 표현 | 속이 찬 원기둥 Ø609(속빈 강관과 속채움 콘크리트는 구분 안 함), 길이 22,000 [추론] | 두께 12의 속빈 관 |
|
||||
|
||||
- 참고: 기초 평면의 측량 좌표(X 429,97x / Y 207,59x)는 기록만 하고 모델은 로컬 좌표입니다(앱 범위).
|
||||
|
||||
## 7. 검사 기준값 (expected)
|
||||
|
||||
- 치수 문자: 기초 '9.600'·'2.200', 버림 100, 말뚝 '4@2.000=8.000'·'Ø609.0x12T, L=22.0M', 기둥 '2.500'·'3.800', 코핑 '12.000'·'1.500'·'1.500'·'3.300'(1,120·1,141·1,039)·'2.700'(1,350 × 2), EL 문자, 정면 받침 간격 '3@2.476=7.429'
|
||||
- 받침 표 값, 사각 18°·대좌 크기는 작도값([작도])
|
||||
|
||||
## 8. 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 앱 교각 | `Code/교각모델링앱/data/옥성교P1` (scope G1·G5). 생성기는 울산 `concrete_tapered.py`에 선택 옵션 4개(말뚝, 측면 테이퍼, 사각, 묶음 대좌)를 추가해 확장(사용자 결정). 옵션이 없으면 기존 경로 그대로 |
|
||||
| 검사기 | G1 `g1_skew.py` 신설(울산 검사기는 수정 안 함). G5는 기존 `g5_bearings.py`를 쓰되, 패드 축 방향을 윗면에서 구하도록 수정(바닥이 기울어진 패드 대응) |
|
||||
| 모델 | `data/옥성교P1/runs/current/G5.3dm` (객체 64: 버림·기초·기둥·코핑, 말뚝 25, 대좌 5, 패드 10, 받침 10, 솔플레이트 10) |
|
||||
| G1 | PASS 147/147 — 음성 시험(BP02 수평 3, BS03 수직 2) 검출, 재로드 44 |
|
||||
| G5 | PASS 183/183 — 음성 시험(BB04 수평 5, SP03 수직 5) 검출, 재로드 64, G1 객체 44 불변 |
|
||||
| 부피(m³) | 버림 8.876(말뚝 구멍 제외), 기초 202.752, 기둥 18.653, 코핑 92.869(치수 윤곽 적분과 0.1% 이내), 말뚝 1본 6.408 |
|
||||
| 보호 템플릿 | `data/_템플릿/옥성교P1형` |
|
||||
|
||||
- 1차 실행 결과 G1 137/147: '패드 중심 Y' 10건이 FAIL했습니다. 기울어진 패드 바닥 때문에 부피 무게중심이 −21.8 밀린 것으로, 검사 방법의 결함입니다. 평면 중심을 바운딩박스 중심으로 바꿔 해소했습니다.
|
||||
- 1차 실행에서 G5 검사기가 오류로 멈췄습니다. 패드의 가장 낮은 면이 수평이 아니었기 때문이고, 위와 같이 수정했습니다.
|
||||
- 앱 판독기 보완: 솔플레이트 표 머리행 x 범위 밖의 숫자 줄은 건너뜁니다(1장). 이 수정 전에 머리행 규칙을 세 번 고쳐 봤으나 울산 또는 Ramp-A 결과가 바뀌어 모두 되돌렸습니다(같은 방식 재시도 금지).
|
||||
- 육안 확인 미실시(캡처 수단 없음).
|
||||
|
||||
## 9. 기둥 철근 판독 (G2: P1~P5)
|
||||
|
||||
- 근거: 교각 구조도(1) 정면·단면, 구조도(2) 기둥 단면 4개, 구조도(4) 철근 상세·재료표·커플러 표. 스크립트 `Code/옥성P1판독/extract_g2.py` → `판독/g2_values.json`
|
||||
- 좌표: 구조도(1) 정면 z = 도면 y − 309,179.8, 기둥 중심 x 573,551.6
|
||||
|
||||
### 9.1 재료표·상세
|
||||
|
||||
| 마크 | 직경 | L | N | 형상 | 검산 |
|
||||
|---|---|---|---|---|---|
|
||||
| P1·P2 | H25 | 9,237 | 60·60 | 직선 a 8,313 + 굽힘 r 270(호 424) + 다리 c 500 | 8,313 + 424 + 500 = 9,237 ✓ |
|
||||
| P3 | H25 | 7,226 | 13 | 띠철근 반원 2조각, r 1,150, a 3,533, 커플러 b 80 | 2 × (3,533 + 80) = 7,226 ✓ |
|
||||
| P4 | H19 | 7,206 | 16 | 같은 형식, r 1,147, a 3,538, b 65 | 2 × (3,538 + 65) = 7,206 ✓ |
|
||||
| P5 | H16 | 2,722 | 40 | 연결철근 r 60, a 160, b 2,341, c 141, d 80 (90° 다리 + 135° 갈고리) | 2,722 ✓ |
|
||||
|
||||
- 커플러 표: 주철근 120(= P1 + P2), 띠철근 32·26
|
||||
|
||||
### 9.2 판독값
|
||||
|
||||
| 항목 | 값 | 근거 |
|
||||
|---|---|---|
|
||||
| 주철근 | **2겹**: P1 바깥 r 1,125 × 60, P2 안쪽 r 1,080 × 60, 둘 다 0°부터 6° 간격 | 단면 4개 모두 같음 |
|
||||
| 주철근 갈고리 | 바깥 링은 바깥으로, 안쪽 링은 안쪽으로 굽음(r 270, 다리 500) | 정면 작도 ARC 중심 ±1,395 / ±810 |
|
||||
| 주철근 위 끝 | EL 20.908 | 정면 작도(치수 없음) [작도] |
|
||||
| 띠철근 | 29단 = 13.775, 14.075, 14.375(2@300) → 16@150 → 8@300 → 2@600 (최상단 20.375). 16@150 구간 16단 = P4(H19), 나머지 13단 = P3(H25) | 사슬 '띠철근외측' = 작도 29선과 정확히 일치 ✓ |
|
||||
| 띠철근 반지름 | P3 1,150 = 1,125 + 12.5 + 12.5, P4 1,147 = 1,125 + 12.5 + 9.5 (주철근 바깥에 접함) | 재료표 r |
|
||||
| 연결철근 | 20단(13.825, 14.275, 8@300, 8@300, 2@600) × X·Y = 40 ✓, 직선 2,295 작도 | 사슬 '크로스타이', 단면 |
|
||||
|
||||
### 9.3 결정 요청
|
||||
|
||||
> **[결정 2026-10-14 / 심영표] Q1~Q4 모두 권장안 채택(Q1: 처음 고른 '운곡교 생성기 재사용'을 울산 생성기 확장으로 변경).**
|
||||
|
||||
| # | 내용 | 권장안 | 다른 안 |
|
||||
|---|---|---|---|
|
||||
| Q1 | 생성기: 사용자는 '운곡교 생성기 재사용'을 골랐으나, 띠철근이 커플러 반원 조각이고 주철근 갈고리가 있어 **울산 원형 기둥 생성기(`column_rebar_ring.py`)가 더 잘 맞음** | 울산 생성기에 선택 옵션 3개(안쪽 링·갈고리 방향, 구역별 띠철근 반지름, 90°/135° 연결철근)를 추가해 재사용. 울산 회귀로 확인 | 운곡교 생성기 확장 |
|
||||
| Q2 | [CONFLICT] 주철근 아래 끝: 작도 다리 EL 12.375(직선 8,263, L보다 50 짧음) vs 사슬 '150'(12.325)·재료표 a 8,313 | 치수·재료표(다리 12.325, 직선 8,313 → L 일치) | 작도(다리 12.375) |
|
||||
| Q3 | 연결철근 X·Y의 교차 | Y 방향을 16(철근 지름) 위로 올려 교차를 피함 [추론] (Ramp-A 결정 K3와 같음) | 같은 높이(울산과 같음, 교차 간섭 기록) |
|
||||
| Q4 | 띠철근 커플러 위치·연결철근 갈고리 방향 (도면 표시 없음) | 커플러 90°/270°(울산 규칙), 연결철근 90° 다리·135° 갈고리 좌우 단마다 교번 [추론] | 모든 단 같은 방향 |
|
||||
|
||||
### 9.4 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 생성기·검사기 | 울산 `column_rebar_ring.py`·`g2_ring.py`에 선택 옵션 추가(안쪽 링·안쪽 갈고리, 구역별 띠철근 반지름, 90°/135° 연결철근과 Y 올림). 패치 스크립트 `tools/patches/2026-10-14_patch_ring_okseong.py`, 백업 `backup/2026-10-14_okseong_g2/` |
|
||||
| 철근 | P1·P2 각 60(2겹), 띠철근 29단 × 반원 2조각(P3 13단·P4 16단), 연결철근 20단 × X·Y = 40 → G2 객체 436 |
|
||||
| G2 | PASS 39/39 — 개수·원길이(+커플러)·반지름(바깥·안쪽)·분할각·주철근 상하단·안쪽 갈고리 방향·띠철근 단 사슬·구역·반지름·연결철근 단(X 사슬, Y = X + 16)·콘크리트 밖 표본 0. 음성 시험(P1 수평 5, P3 수직 5) 검출, 재로드 480, G1 객체 44 불변 |
|
||||
| G5 | 재실행 PASS 183/183 (G2까지 480 불변) |
|
||||
| 최소 피복(기록) | P1 112.5, P2 137.5, P3 87.5, P4 93.5, P5 71.5 (손계산과 일치) |
|
||||
| 곡선 길이 − L(기록) | P1·P2 +0.1, P3 −0.3, P4 +0.8, P5 −140.6(갈고리 꼬리 작도 150 [추론]) |
|
||||
|
||||
## 10. 기초 철근 판독 (G3: B1~B12, UM)
|
||||
|
||||
- 방식: 철근별 중심선(사용자 결정 2026-10-14). 운곡교 기초 생성기는 마크 배치 규칙이 코드에 고정돼 있어 맞지 않습니다.
|
||||
- 근거: 구조도(1) 정면·단면도(기초 부분), 구조도(3) 기초 평면·기초 조립용 철근 상세, 구조도(4) 재료표·상세. 스크립트 `Code/옥성P1판독/extract_g3.py` → `판독/g3_values.json`
|
||||
|
||||
### 10.1 재료표·상세
|
||||
|
||||
| 마크 | 직경 | L | N | 형상 | 검산 |
|
||||
|---|---|---|---|---|---|
|
||||
| B1·B3 | H29 | 12,730 | 39·38 | U형 a 9,400 + 다리 b 900 × 2, 겹이음 j 1,530 | 9,400 + 1,800 + 1,530 ✓ |
|
||||
| B2·B4 | H29 | 14,070 | 39·38 | U형 a 9,400 + b 1,800 × 2, j 1,070 | ✓ |
|
||||
| B5·B7 | H29 | 12,880 | 38·37 | U형 a 9,400 + b 975 × 2, j 1,530 | ✓ |
|
||||
| B6·B8 | H29 | 14,370 | 38·37 | U형 a 9,400 + b 1,950 × 2, j 1,070 | ✓ |
|
||||
| B9 | H19 | 4,763 | 171 | 연직 'ㄷ'형: 위 a 586~548, 연직 b 1,998, 아래 c 100 | — (가변) |
|
||||
| B10 | H19 | 41,152 | 5 | 폐합 고리 9,448 × 9,448, 겹이음 560 × 6 | 4 × 9,448 + 3,360 ✓ |
|
||||
| B11·B12 | H19 | 10,160 | 19·19 | U형 a 9,400 + b 100 × 2, j 560 | ✓ |
|
||||
| UM | H22 | 4,504 | 92 | 조립용 A자형 받침: 발 200 × 2, 다리 1,952 × 2(70°), 위 200 | 200·2 + 1,952·2 + 200 ✓ |
|
||||
|
||||
### 10.2 판독값
|
||||
|
||||
| 층 | 값 | 근거 |
|
||||
|---|---|---|
|
||||
| 하면 Y방향(B2/B4) | EL 12.325, x 77곳(−4,700, −4,600, −4,500 → @125 → 4,500, 4,600, 4,700), 다리 1,800 위로 | 정면 점 77, 사슬 '100(하면)', 측면 다리선 |
|
||||
| 하면 X방향(B6/B8) | EL 12.3475, y 75곳(−4,700, −4,537.5, −4,375 → @125 → …), 다리 1,950 위로 | 측면 점 75, 사슬, 정면 다리선 |
|
||||
| 상면 Y방향(B1/B3) | EL 14.275, x 77곳, 다리 900 아래로 | 정면 점, 측면 다리선 13.375 |
|
||||
| 상면 X방향(B5/B7) | EL 14.2525, y 75곳, 다리 975 아래로 | 측면 점, 정면 다리선 13.300 |
|
||||
| 중간층 | Y방향 19(정면: EL 13.825에 x −4,000~4,000 @1,000의 9, EL 12.825에 −4,500~4,500 @1,000의 10), X방향 19(측면: 같은 규칙, 12.825는 ±4,537.5 포함) | 사슬 '18@500'·'538, 16@500, 538' |
|
||||
| B10 | 5단 EL 12.575 / 12.825 / 13.325 / 13.825 / 14.075, 모서리 ±4,722.5(9,445 중심 간격) | 정면·측면 모서리 점 |
|
||||
| B9 | 평면 x −4,530 + 500k(19열), y는 열마다 엇갈림(짝수 열 −4,268.8·−3,250·−2,250·−1,250·−250, 홀수 열 −3,750·−2,750·−1,750·−750). **아래 절반만 작도(78곳)** | 기초 평면 EREC 기호 |
|
||||
|
||||
### 10.3 결정 요청
|
||||
|
||||
> **[결정 2026-10-14 / 심영표] F1~F5 모두 권장안 채택.**
|
||||
|
||||
| # | 내용 | 권장안 | 다른 안 |
|
||||
|---|---|---|---|
|
||||
| F1 | B9 개수: 아래 절반 78곳을 대칭으로 펼치면 172곳, 재료표 N 171 | 대칭 172곳 중 기둥 중심에 가장 가까운 1곳을 빼서 171 [추론] | 172 그대로(개수 FAIL 기록) |
|
||||
| F2 | B9 형상·방향: 위 a(가변 586~548), 연직 b 1,998, 아래 c 100 | 평면 기호 방향(y)으로 'ㄷ'형, 상면 Y철근(14.275)과 하면 Y철근(12.325)을 감쌈. a는 567(평균) [추론] | — |
|
||||
| F3 | 같은 모양 두 마크(B1/B3, B2/B4, B5/B7, B6/B8)의 배치·겹이음 | 열마다 번갈아(가장자리부터 앞 마크) 두고, 겹이음 j는 모델링하지 않음(길이는 재료표 L로 기록) [추론] | — |
|
||||
| F4 | 중간층: B11·B12 중 어느 쪽이 X/Y인지 표시 없음, 다리 b 100 방향 표시 없음, X·Y가 같은 높이에서 교차 | B11 = X방향, B12 = Y방향, 다리 아래로, Y방향을 19 위로 올려 교차를 피함 [추론] | 같은 높이 |
|
||||
| F5 | 조립용 UM 92개: 상세(1,200 × 1,000 간격)는 있으나 평면 배치가 없음 | 모델링하지 않고 개수·형상만 기록(SPACER와 같은 처리) | 1,200 × 1,000 격자로 추정 배치 |
|
||||
|
||||
### 10.4 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 생성 방식 | `Code/옥성P1판독/extract_g3_bars.py`가 518본 중심선을 만들고(`판독/g3_bars.json`), 범용 `rebar_polylines.py`가 G3에서 `footing_rebar` 묶음을 씀. 엔진 수정: 생성기에 게이트 값(GATE) 전달(`pipeline.py`·`gates.py`), 패치 `tools/patches/2026-10-14_patch_gate_global.py`. 검사기 `g3_poly.py` 신설 |
|
||||
| 철근 | B1~B8 304(상·하면 X·Y 4층), B9 171, B10 5, B11·B12 각 19 → G3 객체 1,036 |
|
||||
| G3 | PASS 75/75 — 개수·원길이, 4층 위치(사슬)·높이·길이 9,400·다리 길이와 방향·교번, 중간층 높이·위치, B10 단·크기, B9 19열·높이 1,998, 기초 밖 표본 0. 음성 시험(B1 수평 5, B10 수직 5) 검출, 재로드 1,516, G2까지 480 불변 |
|
||||
| G5 | 재실행 PASS 183/183 (G3까지 1,516 불변) |
|
||||
| 최소 피복(기록) | B1~B5·B7 85.5, B6·B8 63.0(다리 위 끝), B9 66.5, B10 68.0, B11·B12 90.5 |
|
||||
|
||||
- B9 1차 생성은 155본이었습니다. 평면 아래 절반 중 오른쪽 8곳이 상세 표시 점선 원에 가려 그려지지 않았기 때문입니다. 작도 규칙(19열·엇갈린 행)으로 격자를 만들어 171본으로 바로잡았습니다(F1: 위 절반 대칭점 (470, 250) 제외).
|
||||
- 모델링하지 않은 것: UM 조립용 받침 92개(F5), 겹이음 j(F3).
|
||||
- 간섭 미검사: X·Y 다리와 모서리 철근, B9와 중간층 철근.
|
||||
|
||||
|
||||
## 11. 코핑·교좌면 철근 판독 (G4: C1~C20, S1~S8)
|
||||
|
||||
- 근거: 구조도(1) 평면·정면·측면, 구조도(2) 코핑 단면 2개·교좌면 상세 4개, 구조도(4) 철근 상세·재료표. 좌표: 정면 z = 도면 y − 309,179.8, 정면 중심 x 573,551.6, 측면 중심 x 592,540.9.
|
||||
- 판독 스크립트: `Code/옥성P1판독/g4_shapes_dump.py`(모양표↔재료표 짝맞춤 → `판독/g4_shapes.json`). 모델 생성은 결정 후 `extract_g4.py`.
|
||||
- 방식: G2·G3와 같이 철근별 중심선. 평면 사각 18°이므로 코핑 철근은 단면(y = 0) 좌표로 만든 뒤 코핑 형상과 같은 전단(x' = x − tan18°·y)을 적용합니다.
|
||||
|
||||
### 11.1 재료표 (총 1,163본)
|
||||
|
||||
| 마크 | 직경 | L (mm) | N | 모양·도면 위치 |
|
||||
|---|---|---|---|---|
|
||||
| C1 / C4 | H32 | 15,754 | 13 / 12 | 직선 a 11,750 + 아래 다리 b·c 1,247, 3단 EL 21.0078 (이음 j 1,510) |
|
||||
| C2 / C5 | H32 | 13,460 | 13 / 12 | 직선 a 11,750 + 다리 100, 2단 EL 20.9278 |
|
||||
| C3 / C6 | H32 | 13,460 | 13 / 12 | 직선 a 11,750 + 다리 100, 1단 EL 20.8278 |
|
||||
| C7 | H32 | 14,474 | 13 | 바닥 꺾인 철근: 위 끝 연직 a 606, 경사 b 4,774(162°), 평평 c 2,662 (EL 18.295, 코핑 하면) |
|
||||
| C8 / C10 / C12 | H25 | 9,570 / 11,065 / 9,502 | 39 / 27 / 40 | 폐합 스터럽 (폭 a 2,057, 높이 b 가변, 이음 c 630): 왼쪽 / 가운데 / 오른쪽 구간 |
|
||||
| C9 / C11 / C13 | H25 | 7,401 / 7,992 / 6,662 | 78 / 54 / 80 | 5각형 스터럽 (안쪽 연직 b, 바깥 c1 + 모따기 c2), 각 위치 2개 |
|
||||
| C14 | H22 | 22,584 | 6 | 사다리꼴 폐합 고리 (a 10,475~3,496, b 3,207, 이음 550 × 4), 측면 아래 6단 |
|
||||
| C16 | H22 | 32,222 | 6 | 직사각 폐합 고리 (a 11,804, b 3,207, 이음 550 × 4), 측면 위 6단 |
|
||||
| C15 | H22 | 7,632 | 24 | 측면 띠(양끝 135° 갈고리, a 10,465~3,486), 아래 6단 × 4줄 |
|
||||
| C17 | H22 | 13,001 | 24 | 측면 띠(양끝 135° 갈고리, a 11,794, 이음 550), 위 6단 × 4줄 |
|
||||
| C18 | H19 | 3,790 | 117 | 가로(Y) U형 a 3,050 + 아래 다리 370 |
|
||||
| C19 | H19 | 2,966 | 25 | 상면 가운데 U형 a 2,226 + 아래 다리 370 (EL 21.1222) |
|
||||
| C20 | H19 | 2,967 | 75 | 상면 L형 a 2,721~2,472 + 아래 다리 370, 3구간 × 25 |
|
||||
| S1 / S5 | H19 / H16 | 4,029 | 11 / 44 | 교좌면 위 그물 긴 철근 U형 a 2,629 + 다리 700 |
|
||||
| S2 / S6 | H19 / H16 | 2,662 | 21 / 84 | 교좌면 위 그물 짧은 철근 U형 a 1,262 + 다리 700 |
|
||||
| S3 / S7 | H22 / H19 | 2,500 | 22 / 88 | 교좌면 아래 그물 직선 2,500, 2층 × 11 |
|
||||
| S4 / S8 | H22 / H19 | 1,250 | 42 / 168 | 교좌면 아래 그물 직선 1,250, 2층 × 21 |
|
||||
|
||||
### 11.2 판독값 (도면 선·점에서 직접)
|
||||
|
||||
| 대상 | 판독 | 근거 |
|
||||
|---|---|---|
|
||||
| 상면 3단 | y 25줄(−1,525, −1,375 → @125 → 1,375, 1,525), 마크는 번갈아(가장자리부터 C1·C2·C3, 다음 C4·C5·C6), 직선 x ±5,875 | 단면 사슬 `125 \| 150 \| 22@125=2.750 \| 150 \| 125`, 정면 선 |
|
||||
| C19 | EL 21.1222, x −1,171.4 ~ 1,054.8, 다리 370, y 25줄 | 정면 선, 측면 점 25 |
|
||||
| C20 | 3구간 × 25줄: x −5,875 ~ −3,402.6 (EL 21.055), −3,647.6 ~ −926.4 (21.0886), 809.8 ~ 3,531.0 (21.0684), 다리 370 | 정면 선·연직선 |
|
||||
| C7 | 정면 (±5,875, 20,367.2) → (±5,875, 19,760.8) → (±1,331.1, 18,295) 하면 경사 | 정면 선 |
|
||||
| C7 y | 11줄 @250(−1,250 ~ 1,250) + 측면 테이퍼면 위 2본(±1,525, EL 19.6914). 측면 점: ±1,000까지 EL 18.295, ±1,250 EL 18.6602, ±1,525 EL 19.6914 | 측면 점 13 |
|
||||
| 스터럽 x | 왼쪽 −5,725 ~ −4,225 @150(11) + −4,125 ~ −1,425 @100(28) = 39(C8·C9), 가운데 −1,325 ~ 1,275 @100 = 27(C10·C11), 오른쪽 1,375 ~ 4,175 @100(29) + 4,275 ~ 5,775 @150(11) = 40(C12·C13) | 정면 연직선 106개 (39 + 27 + 40, 재료표 N과 일치) |
|
||||
| 스터럽 단면 | 폭 −1,000 ~ 1,000(C8·C10·C12), 5각형 안쪽 연직 y ±500, 바깥 y ±1,525 → EL 19.6914부터 측면 테이퍼를 따라 ±1,146.7(EL 18.2725) | 측면 선 |
|
||||
| 스터럽 높이 | 위 = 코핑 상면 − 97.5, 아래 = 하면 경사 위 22.5 | 정면 선 위·아래 끝, c1 1,420·1,453이 재료표와 일치 |
|
||||
| 측면 고리 | 위 6단 EL 20.9221 / 20.7964 / 20.5464 / 20.2964 / 20.0464 / 19.7964 (x ±5,875, y ±1,502.5, C16 고리 + C17 띠 y ±977.5·±522.5), 아래 6단 EL 19.5464 / 19.2964 / 19.0464 / 18.7964 / 18.5464 / 18.4207 (하면 경사 따라 x ±5,210.4 … ±1,720.8, y는 면 따라 ±1,463.9 … ±1,163.7, C14 고리 + C15 띠) | 정면 선, 측면 점 |
|
||||
| C18 | 가로 U형 117 = 점 117곳(정면): EL 21.0684(1) / 21.0478(11) / 20.9053(29) / 20.8053(29) / 20.7964(15) / 20.5464(14) / 19.5464(13) / 18.5464(5), 폭은 측면 선(±1,525 → 낮은 단은 면 따라 ±1,486 / ±1,220) | 정면 점, 측면 선 |
|
||||
| 대좌 5개 | 가운데(3번) EL 21.2422가 가장 높음. 상면 그물 = 대좌 상면 − 50, 하면 그물 = 상면 − 373 / − 473, 다리 700 아래 | 구조도(2) 교좌면 C-D 단면 사슬 `50 \| 123 \| 200 \| 100 \| 277` |
|
||||
| 교좌면 그물 | S5 11줄(1,300 폭 `50 \| 100 \| 8@125=1.000 \| 100 \| 50`), S6 21줄(2,600 `50 \| 125 \| 18@125=2.250 \| 125 \| 50`), S7 2층 × 11, S8 2층 × 21(2,500 `20@125`, 1,250 `10@125`) | 구조도(2) 상세 |
|
||||
|
||||
### 11.3 결정 요청
|
||||
|
||||
| # | 내용 | 권장안 | 다른 안 |
|
||||
|---|---|---|---|
|
||||
| H1 | S1~S4(H19·H22 굵은 그물)를 어느 대좌에 쓰는지 도면에 표시 없음. 재료표는 S1~S4가 대좌 1개분, S5~S8이 4개분(= 5개 대좌) | 가운데(3번, EL 21.2422 가장 높음) 대좌에 S1~S4, 나머지 4개에 S5~S8 [추론] | 1번 대좌 / S1~S4는 모델링하지 않고 기록만 |
|
||||
| H2 | 교좌면 그물의 방향. 대좌는 사각 18° 평행사변형(코핑 끝면과 평행한 변 2,733.7, X방향 변 1,367)이고 도면 상세는 90° 돌린 모양 | 긴 철근(S1·S3·S5·S7)은 끝면과 평행한 변 방향, 짧은 철근(S2·S4·S6·S8)은 X방향. 간격 125는 직교 거리 [추론] | 대좌에 직교하는 격자로 놓고 평행사변형 안에 맞춤 |
|
||||
| H3 | 도면 모순 3건 처리: ① C7 y ±1,250·±1,525 2본은 측면 테이퍼면 위에 같은 모양으로 올림(+365 / +1,396)이며 위 끝 연직은 짧아짐 ② C18 낮은 단(EL 19.5, 18.5)은 코핑 폭이 좁아 a 3,050이 안 들어감 → 면 폭에 맞춤(설계 길이 3,790은 기록) ③ C20는 정면 선만 있고 측면 점이 없어 상면 y 25줄과 같다고 봄 | 위 ①②③ 모두 [추론]으로 채택 | ③을 모델링하지 않고 기록만 |
|
||||
| H4 | 135° 갈고리(C15·C17 양끝)와 겹이음(C1~C7, C14·C16·C17) | 갈고리는 직선 끝(길이는 재료표 L 기록), 겹이음은 모델링하지 않음. 폐합 고리 C14·C16은 닫힌 사각 | 갈고리를 꺾은선으로 모델링 |
|
||||
| H5 | S5·S6(같은 H16)이 같은 높이로 작도(교차 간섭) | 울산·Ramp-A와 같이 S6을 S5 아래 직경(16)만큼 | 같은 높이 |
|
||||
| H6 | C14 / C16 폭 b 3,207은 측면 점 y ±1,502.5(3,005)보다 큼. 길이는 변형 | 도면 점 위치(±1,502.5)를 따르고 원길이는 기록만(변형 마크) | b 3,207 사용 |
|
||||
@@ -0,0 +1,269 @@
|
||||
# 옥성교 P1 교각 도면 판독서 (형상·받침)
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-14 | 심영표 | 최초 작성 (G1 형상·G5 받침 판독, 결정 요청 O1~O5) | 철근(G2~G4)은 다음 Task |
|
||||
| v0.1.01 | 2026-10-14 | 심영표 | 6장 O1~O5 결정 반영, 8장 모델·게이트 결과와 앱 수정 신설 | G1 147/147·G5 183/183 PASS |
|
||||
| v0.1.02 | 2026-10-14 | 심영표 | 9장 기둥 철근(G2: P1~P5) 판독 신설, 결정 요청 Q1~Q4 | 기초·코핑 철근은 다음 Task |
|
||||
| v0.1.03 | 2026-10-14 | 심영표 | 9.3 Q1~Q4 결정 반영, 9.4 G2 모델·게이트 결과 신설 | G1·G2·G5 PASS |
|
||||
| v0.1.04 | 2026-10-14 | 심영표 | 10장 기초 철근(G3: B1~B12, UM) 판독 신설, 결정 요청 F1~F5 | 방식: 철근별 중심선(사용자 결정) |
|
||||
| v0.1.05 | 2026-10-14 | 심영표 | 10.3 F1~F5 결정 반영, 10.4 G3 모델·게이트 결과 신설 | G1·G2·G3·G5 PASS |
|
||||
| v0.1.06 | 2026-10-14 | 심영표 | 11장 코핑·교좌면 철근(G4: C1~C20, S1~S8) 판독 신설, 결정 요청 H1~H6 | 결정 반영은 v0.1.07 |
|
||||
| v0.1.07 | 2026-10-14 | 심영표 | 11.3 H1~H6 결정 반영, 11.4 G4 모델·게이트 결과 신설 | G1~G5 전 게이트 PASS |
|
||||
|
||||
## 1. 대상 도면
|
||||
|
||||
- `RAG/옥성교P1.dwg` (읽기 전용) — 한 파일에 교각 일반도(1)과 배근도 여러 장이 들어 있습니다(문자 1,718개).
|
||||
- 변환본·스크립트: `Code/옥성P1판독/` (`convert_index.py`, `dxftools.py`, `extract_g1.py` → `판독/g1_values.json`, `판독/일반도1.png`)
|
||||
- 앱 판독기 보완 1건: 솔플레이트 TABLE 창 안에 옆 ELEVATION TABLE 행이 끼어들어 머리행을 놓쳤습니다. 머리행 x 범위 밖의 숫자 줄은 건너뛰도록 고쳤습니다. 운곡교·울산 판독 결과와 Ramp-A 시험은 그대로입니다.
|
||||
|
||||
## 2. 형식
|
||||
|
||||
- **T형(말뚝기초) + 직선 경사 하면 코핑 + 사각(skew 18°) 평면**
|
||||
- 운곡교(말뚝기초), 울산(직선 경사 코핑), Ramp-A(측면 테이퍼)의 요소에, 처음 나오는 **평면 사각**이 더해진 형식입니다.
|
||||
- 강도: 기초 27 MPa, 기둥·코핑 35 MPa, 버림 16 MPa
|
||||
|
||||
## 3. 좌표 기준
|
||||
|
||||
- 원점 = 기둥 중심(평면 391,315.4 / 352,134.6). X = 코핑 길이 방향, Y = 평면 위쪽, Z = EL × 1000
|
||||
- z = 도면 y − 314,374.9
|
||||
- 기초 바닥 EL 12.175 ✓, 좌측 상면 EL 21.175 ✓, 우측 상면 21.128 ✓ ('EL. 12.175'·'EL. 21.175'·'EL. 21.128' 문자와 일치)
|
||||
- 정면도의 코핑 외곽은 중심선(y = 0) 위의 단면입니다. 평면에서 x는 y에 따라 x' = x − tan 18° · y만큼 밀립니다(y ±1,650에서 ∓536.1).
|
||||
|
||||
## 4. 판독값
|
||||
|
||||
| 부재 | 값 | 근거 |
|
||||
|---|---|---|
|
||||
| 버림 | 9,800 × 9,800 × 100, EL 12.075~12.175 | 정면 10355~1035B |
|
||||
| 기초 | 9,600 × 9,600 × 2,200, EL 12.175~14.375 (사각 아님) | 정면·단면도·기초 평면 |
|
||||
| 말뚝 | 내부굴착 강관말뚝 Ø609.0 × 12T, L 22.0 m, **5 × 5 @2,000** (가장자리 800), 머리 EL 12.275(기초 속 100) | 기초 평면 기호 25개, 정면·단면 '4@2.000=8.000' |
|
||||
| 기둥 | 원형 Ø2,500, EL 14.375~18.175 (3,800) | 정면·단면 |
|
||||
| 코핑 정면(y=0) | 하면 평탄 ±1,350 EL 18.175 → 직선 경사 → 끝 ±6,000 EL 19.675. 끝면 수직. 상면 5단: −6,000~−3,772.6 EL 21.175 / ~−1,296.4 21.209 / ~1,179.8 21.242 / ~3,656.0 21.188 / ~6,000 21.128 | 정면 1044B~10458 |
|
||||
| 코핑 측면 | 폭 3,300(EL 19.675 위) → 하면 2,500으로 직선 테이퍼 | 단면도 |
|
||||
| 코핑 평면 | 평행사변형: 상변 y +1,650 x −6,536.1~5,463.9, 하변 y −1,650 x −5,463.9~6,536.1. 끝면·상면 단 경계선 108°(사각 18°) | 평면 104A3~104AA |
|
||||
| 받침 대좌 | 5개, 평행사변형: x 폭 1,366.9 × y 2,600 (y −1,230.2~1,369.7), 앞뒤 받침 2개를 함께 받침 | 평면 1047F~104A2 |
|
||||
| 패드·받침 | 10개, 패드 하면 900 × 850 → 상면 800 × 750(A 700 × B 650 + 200/100), −18° 회전. 앞열 NO.1~5 y −530.2, 뒷열 NO.6~10 y +610.9, x 간격 2,476.2(뒷열 −370.8 밀림) | 평면 10D96~10DB3 |
|
||||
|
||||
**높이 검산**: 상면 5단 = EL.'X' − h1 − h2 (NO.1~5: 21.398·21.432·21.465·21.411·21.351 − 0.223) → 21.175·21.209·21.242·21.188·21.128 ✓ (1 mm 이내). 뒷열도 h1 194로 같은 상면 ✓
|
||||
|
||||
## 5. 받침 표 (앱 표 인식기)
|
||||
|
||||
- ELEVATION TABLE 10행: h1 173(앞열)/194(뒷열), h2 50, h3 148, h4 29, A 700, B 650, E 400/421 (E = h1+h2+h3+h4 ✓)
|
||||
- 솔플레이트 TABLE 10행: S 1.765 %, L 800, W 750, T 29, T1 22, T2 36 (T ± S·L/2 = 29 ± 7.06 → 21.9 / 36.1 ✓)
|
||||
|
||||
## 6. 결정 요청
|
||||
|
||||
> **[결정 2026-10-14 / 심영표] O1~O5 모두 권장안 채택.**
|
||||
|
||||
| # | 내용 | 권장안 | 다른 안 |
|
||||
|---|---|---|---|
|
||||
| O1 | [CONFLICT] 말뚝 배치: 기초 평면 치수 '5@1.600=8.000'(6열) vs 기호 25개(5 × 5 @2,000)·정면·단면 '4@2.000' | 5 × 5 @2,000 (치수 문자 오기로 기록) | 6 × 6 @1,600 |
|
||||
| O2 | 받침 대좌 상면: 대좌 하나가 앞뒤 받침을 함께 받는데 h1이 앞 173 / 뒤 194로 다름 | 앞뒤로 기울어진 평면 상면(앞 +173 → 뒤 +194) [추론] | 가운데에서 단차 / 앞뒤 대좌 분리 |
|
||||
| O3 | 사각의 적용 범위 | 코핑·상면 단 경계·대좌는 사각(평행사변형). 패드·받침·솔플레이트는 −18° 회전 직사각형. 기초·말뚝·기둥은 사각 없음 | — |
|
||||
| O4 | 솔플레이트 두꺼운 쪽 | S > 0, T2 36 → 교축 +Y 쪽이 두꺼움(울산과 같은 규칙) [추론] | −Y |
|
||||
| O5 | 강관말뚝 표현 | 속이 찬 원기둥 Ø609(속빈 강관과 속채움 콘크리트는 구분 안 함), 길이 22,000 [추론] | 두께 12의 속빈 관 |
|
||||
|
||||
- 참고: 기초 평면의 측량 좌표(X 429,97x / Y 207,59x)는 기록만 하고 모델은 로컬 좌표입니다(앱 범위).
|
||||
|
||||
## 7. 검사 기준값 (expected)
|
||||
|
||||
- 치수 문자: 기초 '9.600'·'2.200', 버림 100, 말뚝 '4@2.000=8.000'·'Ø609.0x12T, L=22.0M', 기둥 '2.500'·'3.800', 코핑 '12.000'·'1.500'·'1.500'·'3.300'(1,120·1,141·1,039)·'2.700'(1,350 × 2), EL 문자, 정면 받침 간격 '3@2.476=7.429'
|
||||
- 받침 표 값, 사각 18°·대좌 크기는 작도값([작도])
|
||||
|
||||
## 8. 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 앱 교각 | `Code/교각모델링앱/data/옥성교P1` (scope G1·G5). 생성기는 울산 `concrete_tapered.py`에 선택 옵션 4개(말뚝, 측면 테이퍼, 사각, 묶음 대좌)를 추가해 확장(사용자 결정). 옵션이 없으면 기존 경로 그대로 |
|
||||
| 검사기 | G1 `g1_skew.py` 신설(울산 검사기는 수정 안 함). G5는 기존 `g5_bearings.py`를 쓰되, 패드 축 방향을 윗면에서 구하도록 수정(바닥이 기울어진 패드 대응) |
|
||||
| 모델 | `data/옥성교P1/runs/current/G5.3dm` (객체 64: 버림·기초·기둥·코핑, 말뚝 25, 대좌 5, 패드 10, 받침 10, 솔플레이트 10) |
|
||||
| G1 | PASS 147/147 — 음성 시험(BP02 수평 3, BS03 수직 2) 검출, 재로드 44 |
|
||||
| G5 | PASS 183/183 — 음성 시험(BB04 수평 5, SP03 수직 5) 검출, 재로드 64, G1 객체 44 불변 |
|
||||
| 부피(m³) | 버림 8.876(말뚝 구멍 제외), 기초 202.752, 기둥 18.653, 코핑 92.869(치수 윤곽 적분과 0.1% 이내), 말뚝 1본 6.408 |
|
||||
| 보호 템플릿 | `data/_템플릿/옥성교P1형` |
|
||||
|
||||
- 1차 실행 결과 G1 137/147: '패드 중심 Y' 10건이 FAIL했습니다. 기울어진 패드 바닥 때문에 부피 무게중심이 −21.8 밀린 것으로, 검사 방법의 결함입니다. 평면 중심을 바운딩박스 중심으로 바꿔 해소했습니다.
|
||||
- 1차 실행에서 G5 검사기가 오류로 멈췄습니다. 패드의 가장 낮은 면이 수평이 아니었기 때문이고, 위와 같이 수정했습니다.
|
||||
- 앱 판독기 보완: 솔플레이트 표 머리행 x 범위 밖의 숫자 줄은 건너뜁니다(1장). 이 수정 전에 머리행 규칙을 세 번 고쳐 봤으나 울산 또는 Ramp-A 결과가 바뀌어 모두 되돌렸습니다(같은 방식 재시도 금지).
|
||||
- 육안 확인 미실시(캡처 수단 없음).
|
||||
|
||||
## 9. 기둥 철근 판독 (G2: P1~P5)
|
||||
|
||||
- 근거: 교각 구조도(1) 정면·단면, 구조도(2) 기둥 단면 4개, 구조도(4) 철근 상세·재료표·커플러 표. 스크립트 `Code/옥성P1판독/extract_g2.py` → `판독/g2_values.json`
|
||||
- 좌표: 구조도(1) 정면 z = 도면 y − 309,179.8, 기둥 중심 x 573,551.6
|
||||
|
||||
### 9.1 재료표·상세
|
||||
|
||||
| 마크 | 직경 | L | N | 형상 | 검산 |
|
||||
|---|---|---|---|---|---|
|
||||
| P1·P2 | H25 | 9,237 | 60·60 | 직선 a 8,313 + 굽힘 r 270(호 424) + 다리 c 500 | 8,313 + 424 + 500 = 9,237 ✓ |
|
||||
| P3 | H25 | 7,226 | 13 | 띠철근 반원 2조각, r 1,150, a 3,533, 커플러 b 80 | 2 × (3,533 + 80) = 7,226 ✓ |
|
||||
| P4 | H19 | 7,206 | 16 | 같은 형식, r 1,147, a 3,538, b 65 | 2 × (3,538 + 65) = 7,206 ✓ |
|
||||
| P5 | H16 | 2,722 | 40 | 연결철근 r 60, a 160, b 2,341, c 141, d 80 (90° 다리 + 135° 갈고리) | 2,722 ✓ |
|
||||
|
||||
- 커플러 표: 주철근 120(= P1 + P2), 띠철근 32·26
|
||||
|
||||
### 9.2 판독값
|
||||
|
||||
| 항목 | 값 | 근거 |
|
||||
|---|---|---|
|
||||
| 주철근 | **2겹**: P1 바깥 r 1,125 × 60, P2 안쪽 r 1,080 × 60, 둘 다 0°부터 6° 간격 | 단면 4개 모두 같음 |
|
||||
| 주철근 갈고리 | 바깥 링은 바깥으로, 안쪽 링은 안쪽으로 굽음(r 270, 다리 500) | 정면 작도 ARC 중심 ±1,395 / ±810 |
|
||||
| 주철근 위 끝 | EL 20.908 | 정면 작도(치수 없음) [작도] |
|
||||
| 띠철근 | 29단 = 13.775, 14.075, 14.375(2@300) → 16@150 → 8@300 → 2@600 (최상단 20.375). 16@150 구간 16단 = P4(H19), 나머지 13단 = P3(H25) | 사슬 '띠철근외측' = 작도 29선과 정확히 일치 ✓ |
|
||||
| 띠철근 반지름 | P3 1,150 = 1,125 + 12.5 + 12.5, P4 1,147 = 1,125 + 12.5 + 9.5 (주철근 바깥에 접함) | 재료표 r |
|
||||
| 연결철근 | 20단(13.825, 14.275, 8@300, 8@300, 2@600) × X·Y = 40 ✓, 직선 2,295 작도 | 사슬 '크로스타이', 단면 |
|
||||
|
||||
### 9.3 결정 요청
|
||||
|
||||
> **[결정 2026-10-14 / 심영표] Q1~Q4 모두 권장안 채택(Q1: 처음 고른 '운곡교 생성기 재사용'을 울산 생성기 확장으로 변경).**
|
||||
|
||||
| # | 내용 | 권장안 | 다른 안 |
|
||||
|---|---|---|---|
|
||||
| Q1 | 생성기: 사용자는 '운곡교 생성기 재사용'을 골랐으나, 띠철근이 커플러 반원 조각이고 주철근 갈고리가 있어 **울산 원형 기둥 생성기(`column_rebar_ring.py`)가 더 잘 맞음** | 울산 생성기에 선택 옵션 3개(안쪽 링·갈고리 방향, 구역별 띠철근 반지름, 90°/135° 연결철근)를 추가해 재사용. 울산 회귀로 확인 | 운곡교 생성기 확장 |
|
||||
| Q2 | [CONFLICT] 주철근 아래 끝: 작도 다리 EL 12.375(직선 8,263, L보다 50 짧음) vs 사슬 '150'(12.325)·재료표 a 8,313 | 치수·재료표(다리 12.325, 직선 8,313 → L 일치) | 작도(다리 12.375) |
|
||||
| Q3 | 연결철근 X·Y의 교차 | Y 방향을 16(철근 지름) 위로 올려 교차를 피함 [추론] (Ramp-A 결정 K3와 같음) | 같은 높이(울산과 같음, 교차 간섭 기록) |
|
||||
| Q4 | 띠철근 커플러 위치·연결철근 갈고리 방향 (도면 표시 없음) | 커플러 90°/270°(울산 규칙), 연결철근 90° 다리·135° 갈고리 좌우 단마다 교번 [추론] | 모든 단 같은 방향 |
|
||||
|
||||
### 9.4 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 생성기·검사기 | 울산 `column_rebar_ring.py`·`g2_ring.py`에 선택 옵션 추가(안쪽 링·안쪽 갈고리, 구역별 띠철근 반지름, 90°/135° 연결철근과 Y 올림). 패치 스크립트 `tools/patches/2026-10-14_patch_ring_okseong.py`, 백업 `backup/2026-10-14_okseong_g2/` |
|
||||
| 철근 | P1·P2 각 60(2겹), 띠철근 29단 × 반원 2조각(P3 13단·P4 16단), 연결철근 20단 × X·Y = 40 → G2 객체 436 |
|
||||
| G2 | PASS 39/39 — 개수·원길이(+커플러)·반지름(바깥·안쪽)·분할각·주철근 상하단·안쪽 갈고리 방향·띠철근 단 사슬·구역·반지름·연결철근 단(X 사슬, Y = X + 16)·콘크리트 밖 표본 0. 음성 시험(P1 수평 5, P3 수직 5) 검출, 재로드 480, G1 객체 44 불변 |
|
||||
| G5 | 재실행 PASS 183/183 (G2까지 480 불변) |
|
||||
| 최소 피복(기록) | P1 112.5, P2 137.5, P3 87.5, P4 93.5, P5 71.5 (손계산과 일치) |
|
||||
| 곡선 길이 − L(기록) | P1·P2 +0.1, P3 −0.3, P4 +0.8, P5 −140.6(갈고리 꼬리 작도 150 [추론]) |
|
||||
|
||||
## 10. 기초 철근 판독 (G3: B1~B12, UM)
|
||||
|
||||
- 방식: 철근별 중심선(사용자 결정 2026-10-14). 운곡교 기초 생성기는 마크 배치 규칙이 코드에 고정돼 있어 맞지 않습니다.
|
||||
- 근거: 구조도(1) 정면·단면도(기초 부분), 구조도(3) 기초 평면·기초 조립용 철근 상세, 구조도(4) 재료표·상세. 스크립트 `Code/옥성P1판독/extract_g3.py` → `판독/g3_values.json`
|
||||
|
||||
### 10.1 재료표·상세
|
||||
|
||||
| 마크 | 직경 | L | N | 형상 | 검산 |
|
||||
|---|---|---|---|---|---|
|
||||
| B1·B3 | H29 | 12,730 | 39·38 | U형 a 9,400 + 다리 b 900 × 2, 겹이음 j 1,530 | 9,400 + 1,800 + 1,530 ✓ |
|
||||
| B2·B4 | H29 | 14,070 | 39·38 | U형 a 9,400 + b 1,800 × 2, j 1,070 | ✓ |
|
||||
| B5·B7 | H29 | 12,880 | 38·37 | U형 a 9,400 + b 975 × 2, j 1,530 | ✓ |
|
||||
| B6·B8 | H29 | 14,370 | 38·37 | U형 a 9,400 + b 1,950 × 2, j 1,070 | ✓ |
|
||||
| B9 | H19 | 4,763 | 171 | 연직 'ㄷ'형: 위 a 586~548, 연직 b 1,998, 아래 c 100 | — (가변) |
|
||||
| B10 | H19 | 41,152 | 5 | 폐합 고리 9,448 × 9,448, 겹이음 560 × 6 | 4 × 9,448 + 3,360 ✓ |
|
||||
| B11·B12 | H19 | 10,160 | 19·19 | U형 a 9,400 + b 100 × 2, j 560 | ✓ |
|
||||
| UM | H22 | 4,504 | 92 | 조립용 A자형 받침: 발 200 × 2, 다리 1,952 × 2(70°), 위 200 | 200·2 + 1,952·2 + 200 ✓ |
|
||||
|
||||
### 10.2 판독값
|
||||
|
||||
| 층 | 값 | 근거 |
|
||||
|---|---|---|
|
||||
| 하면 Y방향(B2/B4) | EL 12.325, x 77곳(−4,700, −4,600, −4,500 → @125 → 4,500, 4,600, 4,700), 다리 1,800 위로 | 정면 점 77, 사슬 '100(하면)', 측면 다리선 |
|
||||
| 하면 X방향(B6/B8) | EL 12.3475, y 75곳(−4,700, −4,537.5, −4,375 → @125 → …), 다리 1,950 위로 | 측면 점 75, 사슬, 정면 다리선 |
|
||||
| 상면 Y방향(B1/B3) | EL 14.275, x 77곳, 다리 900 아래로 | 정면 점, 측면 다리선 13.375 |
|
||||
| 상면 X방향(B5/B7) | EL 14.2525, y 75곳, 다리 975 아래로 | 측면 점, 정면 다리선 13.300 |
|
||||
| 중간층 | Y방향 19(정면: EL 13.825에 x −4,000~4,000 @1,000의 9, EL 12.825에 −4,500~4,500 @1,000의 10), X방향 19(측면: 같은 규칙, 12.825는 ±4,537.5 포함) | 사슬 '18@500'·'538, 16@500, 538' |
|
||||
| B10 | 5단 EL 12.575 / 12.825 / 13.325 / 13.825 / 14.075, 모서리 ±4,722.5(9,445 중심 간격) | 정면·측면 모서리 점 |
|
||||
| B9 | 평면 x −4,530 + 500k(19열), y는 열마다 엇갈림(짝수 열 −4,268.8·−3,250·−2,250·−1,250·−250, 홀수 열 −3,750·−2,750·−1,750·−750). **아래 절반만 작도(78곳)** | 기초 평면 EREC 기호 |
|
||||
|
||||
### 10.3 결정 요청
|
||||
|
||||
> **[결정 2026-10-14 / 심영표] F1~F5 모두 권장안 채택.**
|
||||
|
||||
| # | 내용 | 권장안 | 다른 안 |
|
||||
|---|---|---|---|
|
||||
| F1 | B9 개수: 아래 절반 78곳을 대칭으로 펼치면 172곳, 재료표 N 171 | 대칭 172곳 중 기둥 중심에 가장 가까운 1곳을 빼서 171 [추론] | 172 그대로(개수 FAIL 기록) |
|
||||
| F2 | B9 형상·방향: 위 a(가변 586~548), 연직 b 1,998, 아래 c 100 | 평면 기호 방향(y)으로 'ㄷ'형, 상면 Y철근(14.275)과 하면 Y철근(12.325)을 감쌈. a는 567(평균) [추론] | — |
|
||||
| F3 | 같은 모양 두 마크(B1/B3, B2/B4, B5/B7, B6/B8)의 배치·겹이음 | 열마다 번갈아(가장자리부터 앞 마크) 두고, 겹이음 j는 모델링하지 않음(길이는 재료표 L로 기록) [추론] | — |
|
||||
| F4 | 중간층: B11·B12 중 어느 쪽이 X/Y인지 표시 없음, 다리 b 100 방향 표시 없음, X·Y가 같은 높이에서 교차 | B11 = X방향, B12 = Y방향, 다리 아래로, Y방향을 19 위로 올려 교차를 피함 [추론] | 같은 높이 |
|
||||
| F5 | 조립용 UM 92개: 상세(1,200 × 1,000 간격)는 있으나 평면 배치가 없음 | 모델링하지 않고 개수·형상만 기록(SPACER와 같은 처리) | 1,200 × 1,000 격자로 추정 배치 |
|
||||
|
||||
### 10.4 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 생성 방식 | `Code/옥성P1판독/extract_g3_bars.py`가 518본 중심선을 만들고(`판독/g3_bars.json`), 범용 `rebar_polylines.py`가 G3에서 `footing_rebar` 묶음을 씀. 엔진 수정: 생성기에 게이트 값(GATE) 전달(`pipeline.py`·`gates.py`), 패치 `tools/patches/2026-10-14_patch_gate_global.py`. 검사기 `g3_poly.py` 신설 |
|
||||
| 철근 | B1~B8 304(상·하면 X·Y 4층), B9 171, B10 5, B11·B12 각 19 → G3 객체 1,036 |
|
||||
| G3 | PASS 75/75 — 개수·원길이, 4층 위치(사슬)·높이·길이 9,400·다리 길이와 방향·교번, 중간층 높이·위치, B10 단·크기, B9 19열·높이 1,998, 기초 밖 표본 0. 음성 시험(B1 수평 5, B10 수직 5) 검출, 재로드 1,516, G2까지 480 불변 |
|
||||
| G5 | 재실행 PASS 183/183 (G3까지 1,516 불변) |
|
||||
| 최소 피복(기록) | B1~B5·B7 85.5, B6·B8 63.0(다리 위 끝), B9 66.5, B10 68.0, B11·B12 90.5 |
|
||||
|
||||
- B9 1차 생성은 155본이었습니다. 평면 아래 절반 중 오른쪽 8곳이 상세 표시 점선 원에 가려 그려지지 않았기 때문입니다. 작도 규칙(19열·엇갈린 행)으로 격자를 만들어 171본으로 바로잡았습니다(F1: 위 절반 대칭점 (470, 250) 제외).
|
||||
- 모델링하지 않은 것: UM 조립용 받침 92개(F5), 겹이음 j(F3).
|
||||
- 간섭 미검사: X·Y 다리와 모서리 철근, B9와 중간층 철근.
|
||||
|
||||
|
||||
## 11. 코핑·교좌면 철근 판독 (G4: C1~C20, S1~S8)
|
||||
|
||||
- 근거: 구조도(1) 평면·정면·측면, 구조도(2) 코핑 단면 2개·교좌면 상세 4개, 구조도(4) 철근 상세·재료표. 좌표: 정면 z = 도면 y − 309,179.8, 정면 중심 x 573,551.6, 측면 중심 x 592,540.9.
|
||||
- 판독 스크립트: `Code/옥성P1판독/g4_shapes_dump.py`(모양표↔재료표 짝맞춤 → `판독/g4_shapes.json`). 모델 생성은 결정 후 `extract_g4.py`.
|
||||
- 방식: G2·G3와 같이 철근별 중심선. 평면 사각 18°이므로 코핑 철근은 단면(y = 0) 좌표로 만든 뒤 코핑 형상과 같은 전단(x' = x − tan18°·y)을 적용합니다.
|
||||
|
||||
### 11.1 재료표 (총 1,163본)
|
||||
|
||||
| 마크 | 직경 | L (mm) | N | 모양·도면 위치 |
|
||||
|---|---|---|---|---|
|
||||
| C1 / C4 | H32 | 15,754 | 13 / 12 | 직선 a 11,750 + 아래 다리 b·c 1,247, 3단 EL 21.0078 (이음 j 1,510) |
|
||||
| C2 / C5 | H32 | 13,460 | 13 / 12 | 직선 a 11,750 + 다리 100, 2단 EL 20.9278 |
|
||||
| C3 / C6 | H32 | 13,460 | 13 / 12 | 직선 a 11,750 + 다리 100, 1단 EL 20.8278 |
|
||||
| C7 | H32 | 14,474 | 13 | 바닥 꺾인 철근: 위 끝 연직 a 606, 경사 b 4,774(162°), 평평 c 2,662 (EL 18.295, 코핑 하면) |
|
||||
| C8 / C10 / C12 | H25 | 9,570 / 11,065 / 9,502 | 39 / 27 / 40 | 폐합 스터럽 (폭 a 2,057, 높이 b 가변, 이음 c 630): 왼쪽 / 가운데 / 오른쪽 구간 |
|
||||
| C9 / C11 / C13 | H25 | 7,401 / 7,992 / 6,662 | 78 / 54 / 80 | 5각형 스터럽 (안쪽 연직 b, 바깥 c1 + 모따기 c2), 각 위치 2개 |
|
||||
| C14 | H22 | 22,584 | 6 | 사다리꼴 폐합 고리 (a 10,475~3,496, b 3,207, 이음 550 × 4), 측면 아래 6단 |
|
||||
| C16 | H22 | 32,222 | 6 | 직사각 폐합 고리 (a 11,804, b 3,207, 이음 550 × 4), 측면 위 6단 |
|
||||
| C15 | H22 | 7,632 | 24 | 측면 띠(양끝 135° 갈고리, a 10,465~3,486), 아래 6단 × 4줄 |
|
||||
| C17 | H22 | 13,001 | 24 | 측면 띠(양끝 135° 갈고리, a 11,794, 이음 550), 위 6단 × 4줄 |
|
||||
| C18 | H19 | 3,790 | 117 | 가로(Y) U형 a 3,050 + 아래 다리 370 |
|
||||
| C19 | H19 | 2,966 | 25 | 상면 가운데 U형 a 2,226 + 아래 다리 370 (EL 21.1222) |
|
||||
| C20 | H19 | 2,967 | 75 | 상면 L형 a 2,721~2,472 + 아래 다리 370, 3구간 × 25 |
|
||||
| S1 / S5 | H19 / H16 | 4,029 | 11 / 44 | 교좌면 위 그물 긴 철근 U형 a 2,629 + 다리 700 |
|
||||
| S2 / S6 | H19 / H16 | 2,662 | 21 / 84 | 교좌면 위 그물 짧은 철근 U형 a 1,262 + 다리 700 |
|
||||
| S3 / S7 | H22 / H19 | 2,500 | 22 / 88 | 교좌면 아래 그물 직선 2,500, 2층 × 11 |
|
||||
| S4 / S8 | H22 / H19 | 1,250 | 42 / 168 | 교좌면 아래 그물 직선 1,250, 2층 × 21 |
|
||||
|
||||
### 11.2 판독값 (도면 선·점에서 직접)
|
||||
|
||||
| 대상 | 판독 | 근거 |
|
||||
|---|---|---|
|
||||
| 상면 3단 | y 25줄(−1,525, −1,375 → @125 → 1,375, 1,525), 마크는 번갈아(가장자리부터 C1·C2·C3, 다음 C4·C5·C6), 직선 x ±5,875 | 단면 사슬 `125 \| 150 \| 22@125=2.750 \| 150 \| 125`, 정면 선 |
|
||||
| C19 | EL 21.1222, x −1,171.4 ~ 1,054.8, 다리 370, y 25줄 | 정면 선, 측면 점 25 |
|
||||
| C20 | 3구간 × 25줄: x −5,875 ~ −3,402.6 (EL 21.055), −3,647.6 ~ −926.4 (21.0886), 809.8 ~ 3,531.0 (21.0684), 다리 370 | 정면 선·연직선 |
|
||||
| C7 | 정면 (±5,875, 20,367.2) → (±5,875, 19,760.8) → (±1,331.1, 18,295) 하면 경사 | 정면 선 |
|
||||
| C7 y | 11줄 @250(−1,250 ~ 1,250) + 측면 테이퍼면 위 2본(±1,525, EL 19.6914). 측면 점: ±1,000까지 EL 18.295, ±1,250 EL 18.6602, ±1,525 EL 19.6914 | 측면 점 13 |
|
||||
| 스터럽 x | 왼쪽 −5,725 ~ −4,225 @150(11) + −4,125 ~ −1,425 @100(28) = 39(C8·C9), 가운데 −1,325 ~ 1,275 @100 = 27(C10·C11), 오른쪽 1,375 ~ 4,175 @100(29) + 4,275 ~ 5,775 @150(11) = 40(C12·C13) | 정면 연직선 106개 (39 + 27 + 40, 재료표 N과 일치) |
|
||||
| 스터럽 단면 | 폭 −1,000 ~ 1,000(C8·C10·C12), 5각형 안쪽 연직 y ±500, 바깥 y ±1,525 → EL 19.6914부터 측면 테이퍼를 따라 ±1,146.7(EL 18.2725) | 측면 선 |
|
||||
| 스터럽 높이 | 위 = 코핑 상면 − 97.5, 아래 = 하면 경사 위 22.5 | 정면 선 위·아래 끝, c1 1,420·1,453이 재료표와 일치 |
|
||||
| 측면 고리 | 위 6단 EL 20.9221 / 20.7964 / 20.5464 / 20.2964 / 20.0464 / 19.7964 (x ±5,875, y ±1,502.5, C16 고리 + C17 띠 y ±977.5·±522.5), 아래 6단 EL 19.5464 / 19.2964 / 19.0464 / 18.7964 / 18.5464 / 18.4207 (하면 경사 따라 x ±5,210.4 … ±1,720.8, y는 면 따라 ±1,463.9 … ±1,163.7, C14 고리 + C15 띠) | 정면 선, 측면 점 |
|
||||
| C18 | 가로 U형 117 = 점 117곳(정면): EL 21.0684(1) / 21.0478(11) / 20.9053(29) / 20.8053(29) / 20.7964(15) / 20.5464(14) / 19.5464(13) / 18.5464(5), 폭은 측면 선(±1,525 → 낮은 단은 면 따라 ±1,486 / ±1,220) | 정면 점, 측면 선 |
|
||||
| 대좌 5개 | 가운데(3번) EL 21.2422가 가장 높음. 상면 그물 = 대좌 상면 − 50, 하면 그물 = 상면 − 373 / − 473, 다리 700 아래 | 구조도(2) 교좌면 C-D 단면 사슬 `50 \| 123 \| 200 \| 100 \| 277` |
|
||||
| 교좌면 그물 | S5 11줄(1,300 폭 `50 \| 100 \| 8@125=1.000 \| 100 \| 50`), S6 21줄(2,600 `50 \| 125 \| 18@125=2.250 \| 125 \| 50`), S7 2층 × 11, S8 2층 × 21(2,500 `20@125`, 1,250 `10@125`) | 구조도(2) 상세 |
|
||||
|
||||
### 11.3 결정 요청
|
||||
|
||||
> **[결정 2026-10-14 / 심영표] H1~H6 모두 권장안 채택.**
|
||||
|
||||
| # | 내용 | 권장안 | 다른 안 |
|
||||
|---|---|---|---|
|
||||
| H1 | S1~S4(H19·H22 굵은 그물)를 어느 대좌에 쓰는지 도면에 표시 없음. 재료표는 S1~S4가 대좌 1개분, S5~S8이 4개분(= 5개 대좌) | 가운데(3번, EL 21.2422 가장 높음) 대좌에 S1~S4, 나머지 4개에 S5~S8 [추론] | 1번 대좌 / S1~S4는 모델링하지 않고 기록만 |
|
||||
| H2 | 교좌면 그물의 방향. 대좌는 사각 18° 평행사변형(코핑 끝면과 평행한 변 2,733.7, X방향 변 1,367)이고 도면 상세는 90° 돌린 모양 | 긴 철근(S1·S3·S5·S7)은 끝면과 평행한 변 방향, 짧은 철근(S2·S4·S6·S8)은 X방향. 간격 125는 직교 거리 [추론] | 대좌에 직교하는 격자로 놓고 평행사변형 안에 맞춤 |
|
||||
| H3 | 도면 모순 3건 처리: ① C7 y ±1,250·±1,525 2본은 측면 테이퍼면 위에 같은 모양으로 올림(+365 / +1,396)이며 위 끝 연직은 짧아짐 ② C18 낮은 단(EL 19.5, 18.5)은 코핑 폭이 좁아 a 3,050이 안 들어감 → 면 폭에 맞춤(설계 길이 3,790은 기록) ③ C20는 정면 선만 있고 측면 점이 없어 상면 y 25줄과 같다고 봄 | 위 ①②③ 모두 [추론]으로 채택 | ③을 모델링하지 않고 기록만 |
|
||||
| H4 | 135° 갈고리(C15·C17 양끝)와 겹이음(C1~C7, C14·C16·C17) | 갈고리는 직선 끝(길이는 재료표 L 기록), 겹이음은 모델링하지 않음. 폐합 고리 C14·C16은 닫힌 사각 | 갈고리를 꺾은선으로 모델링 |
|
||||
| H5 | S5·S6(같은 H16)이 같은 높이로 작도(교차 간섭) | 울산·Ramp-A와 같이 S6을 S5 아래 직경(16)만큼 | 같은 높이 |
|
||||
| H6 | C14 / C16 폭 b 3,207은 측면 점 y ±1,502.5(3,005)보다 큼. 길이는 변형 | 도면 점 위치(±1,502.5)를 따르고 원길이는 기록만(변형 마크) | b 3,207 사용 |
|
||||
|
||||
### 11.4 모델·게이트 결과
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 생성 방식 | `Code/옥성P1판독/extract_g4.py`가 1,163본 중심선을 만들고(`판독/g4_bars.json`), 범용 `rebar_polylines.py`가 G4에서 `coping_rebar` 묶음을 씀(엔진 수정 없음). 검사기 `g4_okseong.py` 신설. 등록 `add_g4.py`(백업 `data/옥성교P1/backup/2026-10-14_g4/`) |
|
||||
| 철근 | C1~C6 75, C7 13, C8~C13 318(스터럽 106곳), C14·C16 고리 12, C15·C17 띠 48, C18 117, C19 25, C20 75, S1~S8 480 → G4 객체 2,326 |
|
||||
| G4 | PASS 251/251 — 개수·파이프, 원길이(L − 이음), 상면 3단 y 25줄·높이·끝·다리, C19·C20, C7 높이·끝, 스터럽 위치(106곳)·위·아래·단면, 측면 고리·띠 12단, C18 8단, 교좌면 5대좌 위치·높이·길이·층, 콘크리트 밖 표본 0. 음성 시험(C1 수평 5, C7 수직 5) 검출, 재로드 3,842 |
|
||||
| 전체 재실행 | G1 147/147 · G2 39/39 · G3 75/75 · G4 251/251 · G5 183/183 모두 PASS, 앞 게이트 객체 불변(44 → 480 → 1,516 → 3,842), 모델 3,862 객체 |
|
||||
| 최소 피복(기록) | C1~C6 102.9, C7 97.5, C8~C13 79.5~85.0, C14~C17 107.9~108.4, C18 115.5, C19·C20 109.4~110.5, S1~S8 136.8~180.0(코핑 면까지) |
|
||||
|
||||
- 검사 중 고친 것: ① C9 스터럽 x −5725에서 모따기가 1.5 mm로 짧아 파이프 생성 실패 → 20 mm 미만이면 옆면을 곧게 둠 ② C18 낮은 두 단(EL 19.5464, 18.5464)은 다리를 아래로 두면 코핑 하면을 벗어남(피복 −8.1) → 다리를 면을 따라 위로(H3 ② 세부 [추론]) ③ 고리 길이·C18 폭은 모서리 필렛으로 바깥 상자가 줄어들어 허용 오차를 50 / 30 mm로 명시.
|
||||
- 도면 해독에서 알게 된 것: 정면 작도 선·점이 재료표와 맞는 지표 — 스터럽 연직선 106 = 39 + 27 + 40(C8·C10·C12 수), C18 점 117, C7 13 = 9 + 2 + 2, 측면 고리 6 + 6단 × 4줄 = 24(C15·C17), b 3,207 = 3,050 / cos 18°(C14·C16 고리 변이 끝면과 평행).
|
||||
- 도면과 다른 점(기록): 스터럽 폭 a 2,057 = 작도 2,000 + 57로 읽음, C16·C14 고리는 작도 점(x ±5,875, y ±1,502.5)을 따라 재료표 길이보다 약 203 mm 짧음, C8~C13 스터럽 길이는 겹침 c 630 미모델로 재료표 평균보다 약 450~1,130 짧음, C20 길이 평균 3,008 / 재료표 2,967.
|
||||
- 모델링하지 않은 것: 135° 갈고리(C15·C17), 겹이음 j(C1~C7·C14·C16·C17), 스터럽 이음 c 630. 5각형 스터럽은 같은 면에 겹치지 않도록 x +20 [추론].
|
||||
- 간섭 미검사: 스터럽·상면 철근·측면 고리의 교차, C18과 측면 고리, 교좌면 다리와 스터럽.
|
||||
- 사용자 확인 필요 [추론]: H1~H6 전부, 스터럽 평면 전단 적용(끝면과 평행한 면), C18 낮은 두 단 다리 위로, 5각형 x +20.
|
||||
@@ -0,0 +1,101 @@
|
||||
# 분석 — 운곡교 P1 교각 도면 판독 (콘크리트 형상)
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-07 | 심영표 | 신규 작성 | 최초 버전 (Task: 교각 모델링 #2·#3) |
|
||||
| v0.1.01 | 2026-10-07 | 심영표 | §4 U1 해소: 대좌 높이 기준을 EL.'X'−(h1+h2)로 정정, §4-1 계산표 추가 | 사용자 지정 기준 (Task: 받침대좌높이검토) |
|
||||
|
||||
## 0. 개요
|
||||
|
||||
- **대상**: [D1] `C0050205-025` 교각도(1), [D2] `C0050205-026` 교각도(2), [D3] `C0050205-027` 교각도(3) — 모두 `RAG/`, 완도방향 P1
|
||||
- **방법**: [ref: 분석_통로박스모델링과정 §2.1~2.3] 박스 파이프라인 ①② 적용
|
||||
- ① ODA File Converter 27.1.0 → DXF (AC1032). 감사 기록: `Code/교각모델링/입력DXF/conversion_audit.json`
|
||||
- ② ezdxf 전수 집계(`survey_dxf.py`) → 도면틀 영역 렌더(`render_region.py`) → 뷰별 콘크리트 레이어(`CS-CONC*`)·중심선·치수문자 추출(`extract_outline.py`)
|
||||
- **모집단**: 3매 전수 — 모델공간 엔티티 11,077 / 2,192 / 2,526, 문자 1,146 / 560 / 660. DIMENSION 엔티티 0건(치수는 분해된 선+문자) → 치수값은 `CS-DIMT` 문자로 판독.
|
||||
- **단위**: 모델공간 1 단위 = 1 mm 실척 (검증: D1 정면도 기초 외곽 9,350.0 = 치수 `9.350`)
|
||||
- **판독 범위 제외**: D1 도면틀(x 0~48,500, y 0~34,500) 밖 작도 잔여물(교량 평면 선형, 횡단면도, 사본 뷰 등)은 시트 외 자료로 판독에서 제외.
|
||||
|
||||
## 1. 뷰 분류 (전수)
|
||||
|
||||
| 도면 | 뷰 | 축척 | 형상 근거 여부 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| D1 | 평면도 (코핑 상면) | 1:60 | ○ 코핑 평면·소단·받침 대좌 배치 |
|
||||
| D1 | 정면도 (교축직각) | 1:60 | ○ 기초·기둥·코핑 프로파일, EL |
|
||||
| D1 | 단면도 (교축방향, 기둥 중심) | 1:60 | ○ 코핑 폭·기초 폭·받침 대좌 높이 |
|
||||
| D1 | 단면 A-A, B-B (코핑 단면) | 1:60 | △ 코핑 3.100 폭 확인(배근 주체) |
|
||||
| D1 | 단면 C-C, D-D, E-E (기둥 단면) | 1:60 | ○ 기둥 원형 D=2.000 |
|
||||
| D2 | 기초 평면도 | 1:60 | ○ 기초 9.350×7.800, 기둥 r=1.000, 말뚝 기호 |
|
||||
| D2 | 교좌면 보강철근, 단면 C-C | 1:30 | △ 대좌 보강 범위 2.500×1.200 (철근) |
|
||||
| D2 | 교량받침 상세, 솔플레이트 상세, ELEVATION TABLE, 연단거리 검토 | 1:20 | △ 받침·대좌 높이(h1~h4, E) |
|
||||
| D2 | 주철근 조립도 ①②CYCLE | 1:120 | × 철근 |
|
||||
| D3 | 철근 재료표(SD400/SD500), 가공도, COUPLER 상세, 기초 조립용 철근 | NONE | × 철근 (콘크리트 형상 근거 없음) |
|
||||
|
||||
## 2. 객체 장부 (물리 발생 단위)
|
||||
|
||||
| ID | 객체 | 발생 수 | 사용 뷰 | 접합 객체 | 판정 |
|
||||
| :--- | :--- | :-- | :--- | :--- | :--- |
|
||||
| LC | 버림 콘크리트 (fck=15MPa) | 1 | D1 정면도·단면도 | FT 하면 | 확정 |
|
||||
| FT | 기초 (fck=27MPa) | 1 | D1 정면도·단면도, D2 기초평면도 | LC, CL, (PL) | 확정 |
|
||||
| CL | 기둥 (원형, fck=40MPa) | 1 | D1 정면도·단면도·단면 C~E, D2 기초평면도 | FT 상면, CP 하면 | 확정 |
|
||||
| CP | 코핑 (fck=40MPa) | 1 | D1 평면도·정면도·단면도·단면 A/B | CL 상면, (BP) | 확정 (§4 미해결 1건) |
|
||||
| BP | 받침 대좌 (교좌 하부) | 5개소 × 전·후열 = 10 | D1 평면도·단면도, D2 받침상세·ELEVATION TABLE | CP 상면 | **미확정** (§4) |
|
||||
| PL | 내부굴착 복합말뚝 Φ600×9T, L=24.4m | 30 | D1 정면도·단면도 | FT | **미확정** (범위) |
|
||||
|
||||
재료 근거: D1/D2/D3 공통 표기 `콘크리트 : fck=40MPa (기둥, 코핑부) / fck=27MPa (기초부)`, D1 정면도 `버림 CON'C fck = 15 MPa`.
|
||||
|
||||
## 3. 확정 치수 (출처 포함)
|
||||
|
||||
좌표계: X = 교축직각(정면도 좌→우), Y = 교축(단면도 좌→우), Z = 표고(EL). 원점 X=Y=0 = 교각 중심선. 상세 출처(엔티티 핸들)는 `Code/교각모델링/params.json`의 `src` 항목.
|
||||
|
||||
| 객체 | 항목 | 값 | 근거 | 교차 대조 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| LC | 평면 | 9,550 × 8,000 | D1 정면도 1CC24, 단면도 1CE40 (기초 +100) | 정면·단면 일치 |
|
||||
| LC | 두께 | 100 (EL 26.108~26.208) | D1 정면도 1CC23 | — |
|
||||
| FT | 평면 | 9,350 × 7,800 | D1 dim `9.350`, `7.800` | D2 기초평면도 선분 9,350.0 × 7,800.0 일치 |
|
||||
| FT | 두께·하단 | 2,200 / EL 26.208 | D1 dim `2.200`, `EL. 26.208` | 정면·단면 일치 |
|
||||
| FT | 기둥 편심 | 0 (동심) | D1 `3.675+1.000`, `2.900+1.000` | D2 기초평면도 원 중심 = 기초 중심 |
|
||||
| CL | 직경 | 2,000 | D1 단면 C-C/D-D/E-E `2.000` | D2 ARC r=1,000, D1 정면도 선분 간격 2,000.0 |
|
||||
| CL | 높이 | 12,003 (EL 28.408~40.411) | D1 dim `12.003` | 정면·단면 일치. **기둥은 파단선으로 축약 작도** → 작도 길이 미사용 |
|
||||
| CP | 하단 길이 | 12,400 | D1 `12.400` | 정면도 선분 끝점 간 12,400.0 |
|
||||
| CP | 폭(Y) | 3,100 | D1 단면도·단면 A/B `3.100` | 평면도 3,100.0 |
|
||||
| CP | 하면 평탄부 | X = ±1,100, EL 40.411 | D1 `5.100`+`100`+`1.000`, 1C4BD | EL 역산: 43.411−1.500−1.500 = 40.411 ✓ |
|
||||
| CP | 하면 곡선 | R = 12,000, 평탄부 끝 → 선단 하단 상승 1,500 | D1 `R=12.000`, `1.500` | ARC 1C4BF/1C4C0 r=12,000.0, 끝점 일치 |
|
||||
| CP | 선단 단면 | 하단 X=±6,200(EL 41.911) → 상단 X=±6,000 (경사, 200 내측) | D1 상단 `200` | 평면도 내측선 6162.4/18162.4 일치 |
|
||||
| CP | 상면 소단 | 5단: EL 43.411 / 43.483 / 43.555 / 43.627 / 43.698 | D1 `EL. 43.411`, `EL. 43.698`, 단면도 `EL. 43.555` | 경계 X: 평면도 `2.199`, `3@2.505`, `2.284` ↔ 정면도 선분 일치 |
|
||||
| CP | 선단 높이 | 좌 1,500 / 우 1,787 | D1 `1.500`, `1.787` | 총높이 `17.203`, `17.490` 합산 일치 |
|
||||
|
||||
**판독 표기**: 중간 소단 EL 43.483·43.627은 치수 문자가 없고 작도 단차(71.8~71.9)로 판독했다 `[CAD 정점 판독]`. 양단·중앙 EL과 선형 관계가 성립한다(5단 등분 71.85).
|
||||
|
||||
## 4. 미해결·충돌 (HITL 대상)
|
||||
|
||||
| # | 구분 | 내용 | 양측 근거 |
|
||||
| :-- | :--- | :--- | :--- |
|
||||
| U1 | ~~`[CONFLICT DETECTED]` 받침 대좌 높이~~ **해소 (v0.1.01)** | ~~대좌 상면 기준 불일치~~ → v0.1.00의 "211mm 차이"는 EL.'X'에서 E(=h1+h2+h3+h4)를 뺀 **해석 오류**였다. 사용자 지정 기준 EL.'X'−(h1+h2)로 계산하면 10개소 모두 코핑 상면과 일치한다(§4-1). | ⓐ D2 ELEVATION TABLE EL.'X', h1, h2 ⓑ D1 코핑 소단 상면. ⓒ **잔여**: D1 단면도의 대좌 작도 높이 169.4는 TABLE h1 164와 5.4mm 차이 (139.0은 일치) |
|
||||
| U2 | 받침 대좌 형상 | 평면 2,500×1,200을 전열(약 4.4°)·후열(약 3.1°)로 회전 배치. 단면도에서는 1,250씩 두 개(전·후열)로 높이가 다름 | D1 평면도 1C0CE 등, 단면도 1C612~1C615 |
|
||||
| U3 | `[CLARIFICATION NEEDED]` 코핑 하면 원 r=1,100 | D1 평면도에 은선(CS-CONC-MINR) 원 r=1,100. 정면도 하면 평탄부 폭 2,200과 같음 | 해석 ⓐ 하면 = 정면 곡선의 Y방향 압출(띠형) ⓑ 원형 평탄부. **단면도는 중심 단면이어서 구분 불가** |
|
||||
| U4 | 말뚝 포함 여부 | 복합말뚝 30본(6×5, 간격 1,550, 연단 800), L=24.4m, 두부 100 근입 | D1 정면도·단면도 `5@1.550`, `4@1.550`, 말뚝 표기 |
|
||||
|
||||
## 4-1. 받침 대좌 높이 검토 (v0.1.01 추가)
|
||||
|
||||
기준식: **EL.'X' = 코핑 상면 + h1 + h2**. 계산: `Code/교각모델링/calc_bearing_seat.py` → `Code/교각모델링/검증/bearing_seat_check.json`. 표 값은 [D2] ELEVATION TABLE 문자를 좌표 정렬로 추출했고, 코핑 상면은 [D1]에서 독립 판독한 값이다. 받침 NO.1~5(3500kN)와 NO.6~10(2800kN)은 각각 거더선 1~5(정면도 좌→우)에 대응한다.
|
||||
|
||||
| NO | 받침 | EL.'X' | h1 | h2 | EL.'X'−(h1+h2) | 코핑 상면 | 차이(mm) |
|
||||
| :-- | :--- | :--- | :-- | :-- | :--- | :--- | :-- |
|
||||
| 1 | 3500kN 양방향 | 43.625 | 164 | 50 | 43.411 | 43.411 | 0 |
|
||||
| 2 | 3500kN 양방향 | 43.697 | 164 | 50 | 43.483 | 43.483 | 0 |
|
||||
| 3 | 3500kN 교축방향 | 43.768 | 164 | 50 | 43.554 | 43.555 | −1 |
|
||||
| 4 | 3500kN 양방향 | 43.840 | 164 | 50 | 43.626 | 43.627 | −1 |
|
||||
| 5 | 3500kN 양방향 | 43.912 | 164 | 50 | 43.698 | 43.698 | 0 |
|
||||
| 6 | 2800kN 양방향 | 43.600 | 139 | 50 | 43.411 | 43.411 | 0 |
|
||||
| 7 | 2800kN 양방향 | 43.672 | 139 | 50 | 43.483 | 43.483 | 0 |
|
||||
| 8 | 2800kN 교축방향 | 43.744 | 139 | 50 | 43.555 | 43.555 | 0 |
|
||||
| 9 | 2800kN 양방향 | 43.816 | 139 | 50 | 43.627 | 43.627 | 0 |
|
||||
| 10 | 2800kN 양방향 | 43.887 | 139 | 50 | 43.698 | 43.698 | 0 |
|
||||
|
||||
- 판정: 10/10 일치 (±1mm, −1mm 2건은 표고 소수 셋째 자리 반올림 범위)
|
||||
- E열 = h1+h2+h3+h4 (425 / 400)는 10개소 모두 성립. E는 코핑 상면에서 받침 상단까지의 전체 높이로 해석된다 `[추론]`
|
||||
- **동일 방식 재시도 금지**: EL.'X'−E로 대좌 하단을 구하면 −211mm가 나온다
|
||||
|
||||
## 5. 다음 단계
|
||||
|
||||
설계서(`DOC/03_설계/설계_운곡교P1교각모델링_2026-10-07_v0.1.00.md`)에서 부재 구분·형상 규칙을 확정한다. U1~U4는 사용자가 판단한다(HITL).
|
||||
@@ -0,0 +1,60 @@
|
||||
# 분석 — 운곡교 P1 코핑 철근 판독 (C1~C16, S1·S2)
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-07 | 심영표 | 신규 작성 | Task 코핑철근모델링 Step 2 #1 (중간 산출물, G4) |
|
||||
| v0.1.01 | 2026-10-07 | 심영표 | 오류 정정 2건(스터럽 원길이 식, 스터럽 폭), §4 스터럽 높이 규칙 추가 | 정정 |
|
||||
| v0.1.02 | 2026-10-07 | 심영표 | §5 C12·C13 판독(K2 해소) 추가 | 사용자 요청: C12·C13 추가 |
|
||||
|
||||
## 0. 근거·방법
|
||||
|
||||
- [D1] 정면도 코핑부(우측 절반 작도), 단면 A-A(선단부, 깊이 1,531.8). 단면 B-B는 이번 추출에서 외곽을 찾지 못함 `미실시`
|
||||
- [D2] 주철근 조립도 ①CYCLE(C1·C2·C3·C7), ②CYCLE(C4·C5·C6·C8)
|
||||
- [D3] SD400 재료표·가공도
|
||||
- 추출: `Code/교각모델링/판독/front.json`(정면도), DXF 직접 조회(단면 A-A). 좌표 X = 교축직각(정면도 x − 12,159.4), Z = 절대표고 mm
|
||||
|
||||
## 1. 확정에 가까운 항목 (재료표와 정합)
|
||||
|
||||
| 마크 | 판독 | 근거 | 재료표 대조 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| C1~C6 상면 3단 | 직선 a는 수평 3단 EL 43.311 / 43.211 / 43.111 (좌측 소단 43.411 − 100부터 100씩 아래). 양끝 다리는 경사 선단면을 따라 내려감 | 정면도 수평선 43,311 (0~5,942), 43,211 (0~5,953), 43,111 (0~5,964). A-A 상면 3단 z 1,427.3/1,327.3/1,227.3 | 반길이가 단마다 11씩 증가 → a 11,855 < 11,880 < 11,904 증가와 일치. **1단 = C1·C4(다리 1,319/1,315), 2단 = C2·C5, 3단 = C3·C6** `[추론, 근거: a 증가 순서]` |
|
||||
| C1~C6 꺾임각 | x1 98° = 좌측 선단 경사(200/1,500 → 97.6°), x2 96° = 우측(200/1,787 → 96.4°) | D1 선단면 | 재료표 98°·96°와 일치 |
|
||||
| 상면 폭 방향 위치 | Y = 100, 237, 362 … 2,862, 3,000 (24곳/단) | A-A `100`,`137`,`21@125=2.625`,`138`,`100` | 단마다 24 = 12(①CYCLE) + 12(②CYCLE) |
|
||||
| C7·C8 하면 | 24곳 (A-A 하면 z 105), 중앙 수평부 2,148 (정면도 EL 40.511, X ±1,074)에서 하면 곡선을 따라 올라가고 끝에서 650 다리 | 정면도·A-A | c 2.148 일치. 12 + 12 = 24 |
|
||||
| C10 | 스터럽 위치 X = 0, ±300, ±600, ±900 (7곳) × 위치당 3개 = 21 | 정면도 수직선 @300 | 21 일치 |
|
||||
| C9·C11 | X = ±1,150 ~ ±5,900 @250 (좌·우 각 20곳) × 3 = 60·60. 높이 b가 하면 곡선을 따라 변함. 우측 선단이 더 깊어(1,787) 최솟값이 큼 → **C9 = 좌측, C11 = 우측** `[추론]` | 정면도 수직선 하단 z가 곡선 추종 | 60·60 일치, b 최솟값 1,376 / 1,664 경향 일치 |
|
||||
| 스터럽 원길이 식 | ~~IV: L = 2a + 2b + c~~ → **[정정 v0.1.01] L = 2a + 2b + 2c** (C10: 2×1,407 + 2×2,998 + 2×750 = 10,310 ✓). 변길이 C9·C11은 **b = (최대 + 최소)/2**로 계산한 길이(C11: 2,310 → 8,934 ✓, C9: 2,166 → 8,647 ✓) | D3 | — |
|
||||
|
||||
## 2. 미확정·충돌 (HITL 대상)
|
||||
|
||||
| # | 내용 | 양측 근거 |
|
||||
| :-- | :--- | :--- |
|
||||
| K1 | **[CONFLICT] 스터럽 폭**: 재료표 a = 1,407, 단면 A-A 작도 폭 **1,160 / 1,740 / 1,160** ([정정 v0.1.01] 가운데는 1,740. 다리 Y = 100·680·1,260·1,840·2,420·3,000, 스터럽 (100~1,260)·(680~2,420)·(1,840~3,000)). 사용자 결정: 작도 폭 | D3 vs D1 A-A |
|
||||
| K2 | **C12·C13 수평 폐합 철근**: X 형상, b = 1,407 (폭), a = 12.228~3.151 (C12), 12.167~12.044 (C13). 정면도 수평선 9단(EL 40.761~42.761 @250, 길이가 하면 곡선을 따라 줄어듦)과 A-A 측면 점 4단(z 131.8~881.8, 단마다 6점)과 대응하나, **폭 방향 배치(단마다 몇 개, 어느 Y)가 1,407 폭과 맞지 않음**. C13 원길이 식 미해결(2a + 2b + c = 27,604 ≠ 29,345) | D1·D3 |
|
||||
| K3 | **C14·C15·C16 (H19)**: 상면 횡방향(C14 III 2,900 + 갈고리 350×2, A-A `@1.000` 표기)과 측면 보조근으로 추정. 정면도 점 분포(EL 43.089·43.189 두 줄 @1,000, 41.011~42.511 엇갈림)로 C14 ≈ 40개 위치가 보이나 41본과 1 차이, C15·C16 배치 미확인 | D1 |
|
||||
| K4 | **C7·C8 곡선부**: VII의 r1·r2(굽힘 반지름)와 j가 재료표에 비어 있음. 하면 곡선 R 12,000을 100 안쪽으로 따라가는 것으로 해석하면 원길이 13,994와 맞는지 계산 필요 | D3 |
|
||||
| K5 | C1/C4, C2/C5, C3/C6, C7/C8의 폭 방향 교대 순서(어느 마크가 Y=100에서 시작하는지)는 도면 근거 없음 | — |
|
||||
| K6 | **S1·S2**: D2 교좌면 보강 상세(2,500×1,200, H19 @125, 깊이 700)를 받침 10개소의 대좌 아래에 배치. S1 50 / S2 105의 개소별 배분은 미확인 | D2 |
|
||||
| K7 | 단면 B-B(기둥부, 깊이 3,144)의 측면 `9@250=2.250`과 상면 단차부 `10@250` 미추출 | D1 |
|
||||
|
||||
## 3. 판단
|
||||
|
||||
- C1~C6, C7·C8, C9~C11은 재료표와 맞는 해석이 나왔다(폭 K1·교대 K5·곡선 K4는 남음)
|
||||
- C12~C16과 S1·S2는 판독 근거가 부족해 추정 비중이 크다. 추가 판독에는 D2 조립도·단면 B-B 정밀 추출이 필요하다
|
||||
|
||||
## 4. 스터럽 높이 규칙 (v0.1.01 추가, 검산 완료)
|
||||
|
||||
- 하단: |X| ≤ 1,073.9는 EL 40.511, 그 밖은 하면 원호와 동심인 R 12,100 원(중심 (±6,951.9, 29,934.6)) 위
|
||||
- 상단(우측, 작도): X < 3,900은 43,454.7, X ≥ 3,900은 43,598.4
|
||||
- 상단(좌측, 작도 없음): 소단 상면 − 100 `[추론]` → |X| < 1,296은 43,455, 1,296~3,801은 43,383, 그 밖은 43,311
|
||||
- 재료표 b = 작도 높이 + 54.3 (C10 2,998, C11 최소 1,664로 확인)
|
||||
- 검산: 모델 b 범위 우측 2,956.1~1,663.9 (C11 2,956~1,664 ✓), 좌측 2,956.4~1,376.5 (C9 2,956~1,376 ✓) — `[추론]`인 좌측 규칙이 C9 최솟값과 일치
|
||||
- 같은 방식으로 C1 다리 끝(정면도 사선 1C3DA 끝 (6,089, 42,003.8))과 C7 곡선 끝(계산 (6,086.8, 42,003.6))이 만나는 것을 확인 — 하면 곡선부 해석(R 12,100, 호 길이 5,273) 지지
|
||||
|
||||
## 5. C12·C13 수평 폐합 철근 (v0.1.02, K2 해소)
|
||||
|
||||
- 단면 A-A 측면 점 Y(코핑 폭 기준) = 127, 707, 1,233, 1,867, 2,393, 2,973 → 각각 스터럽 다리(100·680·1,260·1,840·2,420·3,000)에서 27 안쪽. **스터럽마다 안쪽에 수평 폐합 철근 1개**: (127~1,233)·(707~2,393)·(1,867~2,973), 폭 1,106 / 1,686 / 1,106
|
||||
- 정면도 9단 EL 40.761~42.761 @250 × 단마다 3개 = 27 = C12 18(아래 6단) + C13 9(위 3단)
|
||||
- 단 끝: 하면 동심원 R 12,100 위(아래 단) 또는 선단면에서 100.8 안쪽(위 단). 모델 길이 + 54.3 = 재료표 a: C12 3,150.9~12,228.2 (재료표 3,151~12,228 ✓), C13 12,166.9~12,044.2 (12,167~12,044 ✓). 우측 끝점이 정면도 작도(1,548 … 6,004)와 일치
|
||||
- 원길이 L = 2a + 2b + 4c (c = 580): C12 (최대+최소)/2 = 7,689.5 → 2×7,689.5 + 2×1,407 + 4×580 = 20,513 ✓, C13 12,105.5 → 29,345 ✓
|
||||
- **[미확정] 폭**: 재료표 b = 1,407 vs 작도 1,106/1,686/1,106 — 스터럽 K1과 같은 유형. K1 결정(작도)을 준용해 모델링하고 사용자 확인을 받는다
|
||||
@@ -0,0 +1,109 @@
|
||||
# 운곡교 P2 교각 도면 판독 (앱 입력 작성)
|
||||
|
||||
| 항목 | 내용 |
|
||||
|---|---|
|
||||
| 담당자 | 심영표 |
|
||||
| 작성 | Agent 초안 (사용자 확정 전) |
|
||||
| 대상 도면 | C0050205-028·029·030 운곡교 교각도(1)(2)(3)(완도방향 P2) — 앱 업로드 사본 (D1·D2·D3) |
|
||||
| 결과 입력 | `Code/교각모델링앱/data/운곡교p2/params.json`, `expected.json` (이전 판은 `backup/`) |
|
||||
| 판독 스크립트 | `Code/운곡교P2판독/` (`dxftools.py`, `extract_r1.py`~`extract_r5.py`) |
|
||||
| 검증 | 앱 게이트 G1~G5 (CLI `tools/run_gates.py`) |
|
||||
|
||||
## 1. 요약
|
||||
|
||||
- p2 도면은 **P1 도면을 바탕으로 수정한 것**입니다. 좌표계가 같습니다(정면도 기둥 중심 x 12,159.4, 코핑 하면 y 16,515.6, 평면 기준점 (12,162.4, 26,412.3)).
|
||||
- 형식은 P1과 같은 T형이고 치수만 바뀌었습니다. 기초가 X로 1,000 커졌고, 전체 표고는 약 1 m 낮으며, 기둥은 130 깁니다.
|
||||
- P1 판독 규칙과 사용자 결정을 그대로 적용해 **G1~G5 모두 PASS**했습니다. 계획 FAIL은 G3 2건(B9·B12 본수)과 G4 5건(C9~C13 작도 폭)입니다.
|
||||
- **같은 도면 안에서 갱신되지 않은 부분**이 여럿 있습니다. 측면도의 받침 높이, 평면도의 패드 크기, 단면의 띠철근 반지름, 재료표의 B9 본수가 P1 값 그대로입니다. 판독에서는 P1 규칙대로 표·재료표 값을 채택하거나(작도 vs 표) 작도를 채택했습니다(본수). **p2에 대해 사용자 확인이 필요합니다**(6장).
|
||||
|
||||
## 2. 주요 치수 (P1 대비)
|
||||
|
||||
| 항목 | P1 | P2 | 근거 |
|
||||
|---|---|---|---|
|
||||
| 기초 하면 EL | 26.208 | **25.123** | D1 'EL. 25.123' |
|
||||
| 기초 X × Y × 두께 | 9,350 × 7,800 × 2,200 | **10,350** × 7,800 × 2,200 | D1 '10.350', 21A76 |
|
||||
| 말뚝 배치 | 6 × 5, 1,550 공통 | 6 × 5, **X 1,750 / Y 1,550** | D1 '5@1.750=8.750', '4@1.550' |
|
||||
| 말뚝 길이 | 24.4 m | **25.9 m** | D1 'L=25.9M' |
|
||||
| 기둥 높이 | 12,003 | **12,133** | D1 '12.133' |
|
||||
| 코핑 하면 / 상면 EL | 40.411 / 43.411·43.555·43.698 | **39.456 / 42.456·42.602·42.748** | D1 EL 문자, 17.333 = 2.200 + 12.133 + 3.000 |
|
||||
| 코핑 상면 단 X | 2.199, 3@2.505, 2.284 | **2.219, 3@2.502, 2.274** | D1 평면 치수 |
|
||||
| 코핑 우측 높이 | 1,787 | **1,792** | D1 '1.792' |
|
||||
| 받침 용량 | 3,500 / 2,800 kN | **2,800 kN 전부** | D2 TABLE |
|
||||
| 받침 EL.'X' (NO.1) | 43.625 | **42.686** | D2 TABLE |
|
||||
| h1 (전열 / 후열) | 164 / 139 | **180 / 155** | D2 TABLE |
|
||||
| h3 | 181 | **165** | D2 TABLE |
|
||||
| B (NO.1 / NO.3) | 640 / 790 | **540 / 650** | D2 TABLE |
|
||||
| 대좌 회전 | 4.405° | **3.088°** | D1 평면 20C1E |
|
||||
| 받침 열 S1 (전열) | 852 | **851** | D2 TABLE |
|
||||
|
||||
검산: 모든 받침에서 EL.'X' − h1 − h2가 해당 코핑 단 높이와 1 mm 이내로 일치했습니다(예: NO.1 42.686 − 0.230 = 42.456).
|
||||
|
||||
## 3. 철근 (P1 대비)
|
||||
|
||||
| 부위 | 바뀐 점 | 근거 |
|
||||
|---|---|---|
|
||||
| 기둥 | P1·P2 주철근 +130 (A 16.343 / 16.683), 상단 EL 42.106. P4·P5 **H29**, R904, 커플러 틈 85. P3 **37개**, R899 | D3, D1 'P4 H29@100', '37@300=11.100' |
|
||||
| 기초 | Y 방향 철근 개수 증가(B1·B2·B3 42, B4 39), X 방향 길이 +1,000 (B5 A 10.150), B10 10,198 × 7,644, B9 38 × 29열 | D3, D1 '78@125=9.750', '39@250', '37@250' |
|
||||
| 코핑 | 작도 전체가 P1 − 955 mm. C3·C6 **H25**. C2·C5 12.082, C15 2.774, C16 5.605 | D3, D1 정면도 |
|
||||
| 받침·솔플레이트 | W 640 / 750 (= B + 100), L 800 (= A + 100), h3 165 | D2 TABLE |
|
||||
|
||||
## 4. 판독 방법
|
||||
|
||||
- **params(생성값)**: D1 작도 객체 좌표를 핸들로 직접 읽었습니다(예: 기초 21A76, 코핑 20D63·20E77~20E7F, 대좌 20C1E~20C21, 패드 20C6D·20C64). 받침 값은 D2 표를 썼습니다.
|
||||
- **expected(검사 기준)**: 치수 문자, EL 문자, D2·D3 표를 썼습니다. 생성값과 따로 입력해 검사의 독립성을 지켰습니다. 다만 코핑 중간 단 EL(42.529·42.675)과 철근 단 높이 일부는 치수 문자가 없어 작도에서 유도했습니다 `[derived]`.
|
||||
- P1과 같은 유형의 판단에는 P1의 사용자 결정을 그대로 썼습니다(6장).
|
||||
|
||||
## 5. 검증 (앱 게이트)
|
||||
|
||||
| 게이트 | 결과 | 계획 FAIL | 음성 시험 | 재로드 | 앞 게이트 객체 |
|
||||
|---|---|---|---|---|---|
|
||||
| G1 형상 | PASS 171/171 | 0 | 검출 / 검출 | 일치 (54) | — |
|
||||
| G2 기둥 철근 | PASS 42/42 | 0 | 검출 / 검출 | 일치 | 불변 (54) |
|
||||
| G3 기초 철근 | PASS 71/73 | 2 (B9·B12 본수) | 검출 / 검출 | 일치 | 불변 (538) |
|
||||
| G4 코핑 철근 | PASS 111/116 | 5 (C9~C13 폭) | 검출 / 검출 | 일치 | 불변 (2,358) |
|
||||
| G5 받침·솔플레이트 | PASS 183/183 | 0 | 검출 / 검출 | 일치 (3,350) | 불변 (3,330) |
|
||||
|
||||
- 최종 모델 객체는 3,350개입니다(P1 3,190). 기초 철근 841개, 띠철근 1단이 늘었습니다.
|
||||
- 앱 엔진을 2곳 고친 뒤 P1 회귀를 확인했습니다(7장).
|
||||
- 한계: 판독과 검사 기준 입력을 같은 주체(Agent)가 했습니다. 독립 검증이 아닌 자기검증이므로 사용자 확인이 필요합니다.
|
||||
|
||||
## 6. 충돌과 적용한 결정
|
||||
|
||||
> **사용자 확정 (2026-10-12)**: 1~6번은 P1 규칙대로 확정, 9번 솔플레이트 두꺼운 쪽 −Y 유지. 7·8번 `[추론]`은 P1과 같은 방식으로 유지합니다.
|
||||
|
||||
| # | 판정 | 내용 | 적용 (P1 결정 준용) |
|
||||
|---|---|---|---|
|
||||
| 1 | 불일치 | D1 측면도 대좌 높이 163.4 / 139, 받침 높이 181 = P1 값 그대로 vs D2 TABLE h1 180 / 155, h3 165 | 표 값 채택 (P1 OPEN #5와 같은 유형) |
|
||||
| 2 | 불일치 | D1 평면도 패드 900 × 840 (B = 640) vs TABLE B 540 / 650 | 표 값 채택 |
|
||||
| 3 | 불일치 | D1 단면 띠철근 원호 897.5 (P1 그대로) vs D3 R904 (P4·P5) / R899 (P3) | 재료표 R 채택 (P1 H2) |
|
||||
| 4 | 불일치 | B9 본수: 작도 551 (38 × 29 엇갈림) vs D3 493 (P1 값 그대로) | 작도 채택, 계획 FAIL (P1 F2) |
|
||||
| 5 | 불일치 | B12 본수: 작도 32 vs D3 38 | 작도 채택, 계획 FAIL (P1 F2) |
|
||||
| 6 | 불일치 | C9~C13 폭: 작도 폭 vs 재료표 (P1과 같음) | 작도 폭, 계획 FAIL (P1 K1) |
|
||||
| 7 | 확인 필요 | 거더 1·2 대좌·패드는 미작도 → 거더 5를 평행 이동 (거더 4 대조 오차 0.13 mm) | `[추론]` (P1과 같음) |
|
||||
| 8 | 확인 필요 | 코핑 좌측 스터럽 상단 = 좌측 단 − 100, C16 좌단 = 단 3 좌단 + 100, C14 갈고리 위 4본 | `[추론]` (P1과 같음, 재료표 범위와 일치) |
|
||||
| 9 | 확인 필요 | 솔플레이트 두꺼운 쪽 −Y | P1 결정 준용 (p2 확인 안 함) |
|
||||
| 10 | 표시 | P1의 '콘크리트 숨김'은 P1 전용 결정 → p2는 모두 표시 | 요구사항 기본값 |
|
||||
|
||||
## 7. 앱 개선 목록 (이번 판독에서 드러난 일반화 결함)
|
||||
|
||||
| # | 내용 | 처리 |
|
||||
|---|---|---|
|
||||
| A1 | 말뚝 간격이 X·Y 공통 값 하나뿐 (p2 X 1,750 / Y 1,550) | **수정함**: `pitch_x`·`pitch_y` (기존 `pitch` 호환) — `concrete.py`, `checks/g1_shape.py` |
|
||||
| A2 | 띠철근 반지름이 하나뿐 (p2 P3 899 / P4·P5 904) | **수정함**: `hoops.radius_by_mark` — `column_rebar.py` |
|
||||
| A3 | 재료표의 범위 문자('12.228~3.151')가 머리행 열과 어긋나 표 인식에서 빠짐 | 미수정 (위치로 직접 읽음) |
|
||||
| A4 | 표 후보값은 expected와 철근 직경만 바꾸고, 같은 표에서 오는 params(받침·솔플레이트)는 바꾸지 않음 | 미수정 |
|
||||
| A5 | 철근 위치 목록(기초 81·42개 등)을 JSON으로 직접 써야 함 → 치수 사슬(시작·간격·개수)로 입력하는 형식 필요 | 미수정 |
|
||||
| A6 | D1 작도 객체 판독(핸들 지정)은 앱에 없음 — 이번엔 스크립트로 수행 | 미수정 (P1·P2가 같은 도면 틀이라 템플릿 판독 가능성 있음) |
|
||||
| A7 | 음성 시험 대상(BS08·SP08)은 받침 10개 전제 — p2는 10개라 통과 | 미수정 |
|
||||
|
||||
## 8. 다음 단계
|
||||
|
||||
1. 6장의 충돌 처리를 사용자가 확인합니다(특히 1·2·4·5·9).
|
||||
2. 앱 화면에서 p2 묶음을 확정하고 게이트를 승인합니다. 이 판독서와 각 묶음의 `src`를 근거로 씁니다.
|
||||
3. 7장 미수정 항목은 앱 개선 Task로 넘깁니다(OPEN #19).
|
||||
|
||||
## 변경 이력
|
||||
|
||||
| 버전 | 일자 | 내용 |
|
||||
|---|---|---|
|
||||
| v0.1.00 | 2026-10-12 | 최초 작성 (R1~R5 판독, 게이트 G1~G5 PASS) |
|
||||
@@ -0,0 +1,104 @@
|
||||
# 분석 — 기존 통로박스 구조물 모델링 과정 (교각 적용 관점)
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-07 | 심영표 | 신규 작성 | 최초 버전 (Task: 교각 모델링 #1) |
|
||||
|
||||
## 0. 개요
|
||||
|
||||
- **분석 대상**: `RAG/design-model-box-sample_2` (Drawing Model Studio, 통로박스 도면 → 콘크리트·철근 3D 모델 웹 프로그램)
|
||||
- **분석 목적**: 박스 구조물의 모델링 과정을 단계별로 분해하여, 운곡교 P1 교각(콘크리트 우선) 모델링에 이식할 **과정·원칙·데이터 구조**를 도출한다.
|
||||
- **모집단·범위**: 문서 23건 중 모델링 과정 문서 6건 전수 + ERD 코드 위치표의 모듈 중 ①~③ 단계 핵심 모듈 8건 표본 (선정 기준: ERD `코드 위치` 표와 DWG·DXF·치수·객체 스키마 직접 관련 모듈). 운영·배포·뷰어·철근 감사 문서(17건)는 콘크리트 범위 밖이므로 목록 확인만 수행.
|
||||
|
||||
| 근거 문서 식별 | 경로 |
|
||||
| :--- | :--- |
|
||||
| [A1] | `docs/DRAWING_TO_MODEL_ERD.md` |
|
||||
| [A2] | `docs/OBJECT_MODEL_CONTRACT.md` |
|
||||
| [A3] | `docs/OBJECT_MODELING_DEFINITIONS_AND_CRITERIA.md` |
|
||||
| [A4] | `src/backend/DRAWING_MODELING_RULES.md` |
|
||||
| [A5] | `docs/AGENTS.md` |
|
||||
| [A6] | `README.md` |
|
||||
|
||||
## 1. 전체 모델링 흐름 (5단계)
|
||||
|
||||
[출처: A1, 「전체 그림」·「코드 위치」]
|
||||
|
||||
| 단계 | 입력 | 처리 | 출력 | 핵심 코드 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| ① 도면 입력 | DWG·DXF | 원본 식별(도면명·SHA-256), DWG→DXF 변환 | 판독 가능한 DXF | `dwg_conversion.py` |
|
||||
| ② 정보 추출 | DXF | 문자·선분·치수·BLOCK/INSERT 판독, 뷰(평면·입면·단면·상세·배근도·재료표) 분류 | 도면 근거(EVIDENCE) | `dxf_vector_parser.py`, `dxf_text_encoding.py`, `cad_sheet_regions.py`, `cad_dimension_authority.py` |
|
||||
| ③ 객체·형상 | 도면 근거 | 물리 객체 구분 → 외곽·두께·표고 연결 → 콘크리트 생성 | `concrete_components[]` | `server.py`(`call_model_plan`), `box_member_schema.py` |
|
||||
| ④ 철근 | 콘크리트 + 배근 근거 | 한 본 형상 + 설치기준(시작·끝·간격), 객체 귀속 | 본별 3D 경로 | `progressive_rebar.py` 등 |
|
||||
| ⑤ 검사·보고 | 콘크리트 + 철근 | 전체 콘크리트 합집합 이탈 검사, 객체별 이미지 | PDF·작업 JSON | `air_exposure.js`, `model_report.js` |
|
||||
|
||||
**교각 적용 범위**: 이번 Task는 ①②③⑤(형상 검사)만 적용하고 ④ 철근은 후속 Task로 분리한다 (Step 0 사용자 확정).
|
||||
|
||||
## 2. 단계별 세부 분석
|
||||
|
||||
### 2.1 ① 도면 입력
|
||||
|
||||
- DWG는 LibreDWG `dwg2dxf`로만 변환하며, "unsafe decoder fallback"을 금지한다. 변환 감사 기록(원본·출력 SHA-256, 엔티티 수, `drawing_verified=False`)을 남긴다. [출처: `dwg_conversion.py` L11-43]
|
||||
- 기존 DXF를 덮어쓰지 않는다(`existing DXF must not be overwritten`). [출처: 동 L14]
|
||||
- DXF 문자 인코딩: 2007 이상은 UTF-8, 이전 판은 HEADER의 코드페이지(`$DWGCODEPAGE`)로 해독한다. [출처: `dxf_text_encoding.py` docstring]
|
||||
- **교각 적용**: 본 PC에는 `dwg2dxf`가 없고 ODA File Converter가 설치되어 있다 → ODA로 변환하되 동일한 감사 항목(SHA-256·엔티티 수)을 기록한다. 변환 엔진이 다르다는 점을 판독서에 명시한다.
|
||||
|
||||
### 2.2 ② 도면 정보 추출
|
||||
|
||||
- DXF를 의존성 없는 파서로 읽어 엔티티 유형·레이어·블록 계보·월드 좌표를 보존한다. 래스터 이미지는 형상 근거가 아니다. [출처: `dxf_vector_parser.py` docstring]
|
||||
- 한 DXF 안의 도면틀(frame)을 분리하여 시트 영역을 나눈다(파일명으로 분기하지 않음). [출처: `cad_sheet_regions.py`]
|
||||
- **치수 권위 원칙**: "Numeric drawing dimensions drive distances; CAD vertices locate datums only." — 거리는 치수 문자(값)로, CAD 정점은 기준점 위치로만 쓴다. [출처: `cad_dimension_authority.py` L1]
|
||||
- 모든 뷰(평면·정면·배면·종단·횡단·단면·상세·배근도·재료표)를 분류하고, 한 뷰만으로 3D를 결정하지 않는다. 충돌 근거는 임의 선택하지 않고 충돌 장부로 남긴다. [출처: A4 §2]
|
||||
|
||||
### 2.3 ③ 객체·형상 생성
|
||||
|
||||
- **객체 장부 선행**: 카테고리 분류 후 실제 존재하는 부재를 물리 발생 단위로 나누고, 각 객체에 역할·구간·위치·사용 뷰·도면 근거·접합 객체를 기록한다. [출처: A4 §3]
|
||||
- **다중 뷰 폐합**: 평면 → 위치·방향·시종점, 정면·종단 → 상하단 프로파일·표고, 단면·상세 → 폭·두께. 세 축이 동시에 만족될 때만 닫힌 3D 객체를 만들고, 원도면 뷰로 재투영해 오차를 검사한다. [출처: A4 §4]
|
||||
- **접합과 연속성**: 붙는 객체는 동일한 물리 경계·표고를 공유한다. 고립·중복·틈·관통·잘못된 겹침 금지. [출처: A4 §5]
|
||||
- **형상 데이터 구조**: `concrete_components[]` 항목은 ⓐ 평면 외곽 `footprint_xy_m` + `bottom_z_m`/`top_z_m` (각기둥 압출) 또는 ⓑ `vertices_xyz_m` + `faces` (일반 다면체 메시) 중 하나로 표현한다. [출처: `server.py` 키 출현 빈도 — footprint_xy_m 129회, top_z_m 112회, bottom_z_m 105회, vertices_xyz_m 41회, faces 27회]
|
||||
- **형상과 철근의 분리**: `memberModel.objects[물리 ID]` 아래 `geometry`(원본 콘크리트 ID·사용 뷰)와 `reinforcement`를 분리 기록한다. [출처: A2 「형상과 철근 분리」]
|
||||
- 비직육면체 부재(예: 헌치)는 실제 단면을 압출한 닫힌 다면체로 만들고 사각 덩어리로 대체하지 않는다. [출처: A4 §10-1]
|
||||
|
||||
### 2.4 ⑤ 검사·출력 게이트
|
||||
|
||||
- 필수 객체 수, 평면·입면·단면 투영, 객체 접합을 검사한다. 미통과 결과는 확정본으로 저장하지 않고 미통과 근거와 함께 초안으로 표시한다. [출처: A4 §11]
|
||||
- 결과를 맞추려고 도면 치수·허용오차·통과 조건을 바꾸지 않는다. 수치 연산 오차와 도면 불일치를 구분하고 오차를 숨기지 않는다. [출처: A5 「도면 일치와 수정 완료 기준」]
|
||||
- 콘크리트 수량은 실제 형상 산식(`길이×폭×두께`, `사다리꼴 넓이×두께` 등)으로 표시한다. [출처: A5 「캐시·JSON·수량·보고서」]
|
||||
|
||||
## 3. 공통 원칙 (구조물 종류와 무관)
|
||||
|
||||
| # | 원칙 | 근거 | 교각 적용 |
|
||||
| :-- | :--- | :--- | :--- |
|
||||
| P1 | 현재 입력 도면이 형상·수치의 유일한 권위. 기존 모델 좌표·치수 복사 금지 | A4 §1 | 박스 모델의 어떤 수치도 교각에 쓰지 않음 |
|
||||
| P2 | 카테고리 상식은 누락 뷰·객체 탐색용으로만, 형상 발명 금지 | A4 §1 | "교각엔 보통 ~가 있다"로 부재를 만들지 않음 |
|
||||
| P3 | 치수 문자가 거리의 권위, CAD 정점은 기준점 | `cad_dimension_authority.py` | 치수 엔티티 측정값 우선, 도면 축척 확인 |
|
||||
| P4 | 객체 장부 → 다중 뷰 폐합 → 재투영 검증 순서 고정 | A4 §3·§4·§12 | 판독서에 객체 장부 작성 후 설계 |
|
||||
| P5 | 접합 객체는 경계·표고 공유, 틈·겹침 금지 | A4 §5 | 기초↔기둥↔코핑 접합면 공유 검사 |
|
||||
| P6 | 파일명·작업 ID로 분기 금지 (범용 코드) | A2, A5 | 생성 코드는 `params.json`만 입력으로 받음 |
|
||||
| P7 | 충돌 근거는 장부·사용자 확인으로 | A4 §2 | `[CONFLICT DETECTED]`로 HITL 처리 |
|
||||
| P8 | 형상과 철근 데이터 분리 | A2 | 콘크리트 모델에 철근 레이어 미포함, 후속 확장 대비 객체 ID 부여 |
|
||||
|
||||
## 4. 박스 → 교각 대응표
|
||||
|
||||
| 박스 개념 | 박스 예 | 교각 대응 (예정, 도면 판독 후 확정) |
|
||||
| :--- | :--- | :--- |
|
||||
| 구조물 카테고리 | 통로박스 | 교각 (P1, 완도방향) |
|
||||
| 물리 객체 | 본체(슬래브·벽체), 날개벽, 헌치, 난간벽, 브라켓, 접속슬래브 | 기초(확대기초/말뚝캡), 기둥(구체), 코핑(캡빔), 받침 대좌, 전단키 등 — **도면에 존재하는 것만** |
|
||||
| 발생 단위 | 블럭·좌우·시종점 | 기둥 개수·받침 위치(교축/교축직각) |
|
||||
| 평면 뷰 | 평면도 | 기초 평면도·코핑 평면도 |
|
||||
| 입면·종단 | 정면도·종단도 | 정면도(교축직각), 측면도(교축) |
|
||||
| 단면·상세 | 횡단면·헌치 상세 | 기둥 단면, 코핑 단면, 대좌 상세 |
|
||||
| 표고 | 종단 경사·EL | 기초 하단 EL, 기초 상단 EL, 코핑 상단 EL, 받침면 EL |
|
||||
| 형상 표현 | `footprint_xy_m`+z 또는 메시 | 기초·기둥: 압출 / 코핑(변단면): 메시 또는 단면 압출 |
|
||||
|
||||
## 5. 교각 모델링 이식 방침 (Step 1 승인안의 구체화)
|
||||
|
||||
1. **①**: ODA File Converter로 DWG→DXF, SHA-256·엔티티 수 감사 기록.
|
||||
2. **②**: 파이썬 DXF 판독 스크립트로 레이어·문자·치수 전수 집계 → 뷰 영역 분리 → 치수표 작성. 각 값에 `도면/뷰/엔티티 핸들` 출처 부여.
|
||||
3. **③**: 객체 장부 → 설계서(부재 구분·형상 규칙, **HITL**) → `params.json` → Rhino 생성(부재별 레이어, 닫힌 솔리드).
|
||||
4. **⑤**: 모델 실측값(바운딩·단면·표고)과 `params.json`·도면 치수의 독립 대조 + 접합면 틈·겹침 검사.
|
||||
|
||||
## 6. 한계
|
||||
|
||||
- `server.py`의 `call_model_plan`은 외부 AI 판독 경로를 포함한다 [출처: A1 ②]. 본 Task는 해당 서비스를 사용하지 않고 로컬 판독 + 사람 확인(HITL)으로 대체한다.
|
||||
- 박스 프로그램 코드는 실행하지 않았다(WSL·Python 3.14 전제 [출처: A6]). 본 분석은 문서·소스 정적 분석이다.
|
||||
- 철근(④) 관련 문서 17건은 이번 범위 밖으로 내용 분석을 하지 않았다(`미실시`).
|
||||
Whitespace-only changes.
@@ -0,0 +1,179 @@
|
||||
# 설계 — 운곡교 P1 교각 콘크리트 모델링 (부재 구분·형상 규칙)
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-07 | 심영표 | 신규 작성 | 최초 버전 (Task #4, HITL — 승인 전 `[미확정]`) |
|
||||
| v0.1.01 | 2026-10-07 | 심영표 | §3 U1~U4 사용자 결정 반영, 말뚝 형상·접합 규칙 추가 | HITL 승인 (U4는 제안안과 달리 '포함' 선택) |
|
||||
| v0.1.02 | 2026-10-07 | 심영표 | 받침 대좌(h1)·h2 패드 형상·접합·검증 규칙 추가, 출력 모델 v0.1.01 | HITL: Task 받침대좌모델링 Plan 승인 (h2 포함, 거더선 1·2 평행 이동 [추론]) |
|
||||
| v0.1.03 | 2026-10-07 | 심영표 | §5 기둥 철근(P1~P6) 배근 규칙 초안 추가 — HITL 항목 [미확정] | Task 기둥철근모델링 #2 |
|
||||
| v0.1.04 | 2026-10-07 | 심영표 | §5 H1~H3 사용자 결정 반영, [미확정] 해제 | HITL 승인 (H1 재료표 상단, H2 단면 작도 반지름, H3 §5.2 제안) |
|
||||
| v0.1.05 | 2026-10-07 | 심영표 | §6 확대기초 철근(B1~B12) 배근 규칙 초안 — F1~F3 [미확정] | Task 기초철근모델링 #2 |
|
||||
| v0.1.06 | 2026-10-07 | 심영표 | §6 F1~F3 사용자 결정 반영, [미확정] 해제, B9 갈고리 형상 구체화 | HITL 승인 (F1 작도 높이, F2 B12 작도 28본, F3 §6.2 제안) |
|
||||
| v0.1.07 | 2026-10-07 | 심영표 | §7 코핑 철근 1차(C1~C11) 배근 규칙 추가 | HITL 2026-10-07: 1차 범위 C1~C11, K1 작도 폭, K5 ①CYCLE부터 |
|
||||
| v0.1.08 | 2026-10-07 | 심영표 | §7 C12·C13 규칙 추가 (폭 [미확정], K1 준용) | 사용자 요청 2026-10-07 '철근번호 C12, C13 철근을 추가해줘' |
|
||||
| v0.1.09 | 2026-10-07 | 심영표 | C12·C13 폭 확정, §7 C14·C15·C16·S1·S2 규칙 추가 | HITL 2026-10-07: 작도 폭 확정, C14~C16·S1·S2 추정안 채택 |
|
||||
| v0.1.10 | 2026-10-08 | 심영표 | §8 교량받침·솔플레이트 규칙 추가 | 사용자 지시·HITL 2026-10-08 |
|
||||
|
||||
> 상태: **확정** (2026-10-07 사용자 HITL 결정). 근거: [ref: 분석_운곡교P1교각도면판독 v0.1.01]
|
||||
|
||||
## 1. 모델 기준
|
||||
|
||||
| 항목 | 규칙 |
|
||||
| :--- | :--- |
|
||||
| 도구 | Rhino 8 (Rhino MCP `run_python`, RhinoCommon) |
|
||||
| 단위 | mm |
|
||||
| 좌표 | X = 교축직각(정면도 좌→우), Y = 교축(단면도 좌→우), **Z = 절대표고 EL×1000** (예: EL 26.208 → Z 26,208) |
|
||||
| 원점 | X=Y=0 = 교각 중심선 (평면 측량좌표 미반영 — 도면에 교각 중심 좌표 미표기) |
|
||||
| 입력 | `Code/교각모델링/params.json` 단일 입력. 생성 코드는 파일명·도면명으로 분기하지 않음 [ref: 박스 분석 P6] |
|
||||
| 출력 | `Code/교각모델링/출력/실행_운곡교P1교각모델_2026-10-07_v0.1.01.3dm` (구판 v0.1.00은 `출력/backup/`) (※ F3: 바이너리는 DOC 불가) |
|
||||
| 레이어 | 부재별 1레이어: `P1::버림콘크리트`, `P1::기초`, `P1::기둥`, `P1::코핑`, `P1::말뚝`, `P1::받침대좌`, `P1::받침패드` |
|
||||
| 객체 속성 | 각 솔리드 UserText: `id`, `role`, `fck`, `source_views` (박스 `memberModel.geometry` 대응, 철근 후속 확장용) |
|
||||
|
||||
## 2. 부재별 형상 규칙
|
||||
|
||||
| 부재 | 표현 방식 | 생성 규칙 |
|
||||
| :--- | :--- | :--- |
|
||||
| 버림 콘크리트 | 직육면체 − 말뚝 관통부 | 9,550×8,000, Z 26,108~26,208. 말뚝 30본이 관통하는 원형 부분을 불리언 차집합으로 제거 |
|
||||
| 말뚝 | 원기둥 30본 | Φ600 (`Φ600.0X9T` 외경), L 24,400. 두부 Z 26,308(기초 하면 +100 근입) ~ 선단 Z 1,908. 배치 X = −3,875 + 1,550·i (i=0~5), Y = −3,100 + 1,550·j (j=0~4) [D1 `800`+`5@1.550=7.750`+`800`, `800`+`4@1.550=6.200`+`800`]. 내부 굴착·충전 구성은 표현하지 않음(외형만) |
|
||||
| 기초 | 직육면체 | 9,350×7,800, Z 26,208~28,408 |
|
||||
| 기둥 | 원기둥 | D 2,000, Z 28,408~40,411 |
|
||||
| 코핑 | **정면 프로파일(XZ) 폐합선 → Y방향 ±1,550 압출** | 폐합선 순서: 하면 평탄부(±1,100, Z 40,411) → R12,000 원호 → 선단 하단(±6,200, Z 41,911) → 경사 단면 → 상단(±6,000) → 5단 소단 상면. 원호 중심은 끝점 2개와 R로 계산(도면 정점 좌표 미사용) |
|
||||
| 받침 대좌 (h1) | 평면 사변형 압출, 10개 | 거더선 k(1~5)마다 2,500×1,200 외곽(회전 4.405°)을 전열·후열 분할선으로 나눈 두 사변형. Z: 하단 = 해당 거더선의 코핑 소단 상면, 상단 = 하단 + h1 (전열 3500kN NO.1~5 h1 164 / 후열 2800kN NO.6~10 h1 139). 기준 패턴은 D1 평면도 거더선 5, 거더선 k는 X로 (k−5)×7,516/3 평행 이동. 거더선 1·2는 도면 미작도 `[추론]` |
|
||||
| 받침 패드 (h2) | 사각뿔대, 10개 | 하면 (A+200)×(B+200), 상면 (A+100)×(B+100), 높이 h2=50. 중심·회전은 D1 평면도 열별 받침 사변형(전열 4.403°, 후열 3.102°). A·B는 D2 TABLE 받침별 값(A 700, B 540~790). 상단 = EL.'X' |
|
||||
|
||||
**접합 규칙** [ref: 박스 분석 P5]
|
||||
- 버림↔기초: Z 26,208 면 공유
|
||||
- 기초↔기둥: Z 28,408 면 공유
|
||||
- 기둥↔코핑: Z 40,411 면 공유. 기둥 단면(D 2,000)은 코핑 하면 평탄부(2,200×3,100) 안에 포함
|
||||
- 말뚝↔기초: 도면에 명시된 두부 근입 100이 **의도된 겹침**이다. 기초는 절단하지 않고, 겹침 체적이 30 × π·300²·100에 해당하는지 검사한다 [ref: 박스 분석 — 의도된 정착·접합과 오류 돌출 구분]
|
||||
- 말뚝↔버림: 버림을 관통부만큼 제거하므로 겹침 0
|
||||
- 코핑↔대좌: 소단 상면 공유, 대좌 평면은 해당 소단 범위 안
|
||||
- 대좌↔패드: 대좌 상면 공유, 패드 하면은 해당 대좌 반쪽 평면 안
|
||||
- 그 외 부재 간 체적 겹침은 0이어야 한다(불리언 교집합 체적으로 검사)
|
||||
|
||||
## 3. 미해결 항목 결정 결과 (HITL — 2026-10-07 사용자 결정)
|
||||
|
||||
| # | 항목 | 결정 | 처리 |
|
||||
| :-- | :--- | :--- | :--- |
|
||||
| U1·U2 | 받침 대좌 | ~~이번 모델에서 제외~~ → **v0.1.02 추가** | 높이 기준은 EL.'X'−(h1+h2) = 코핑 상면으로 해소(판독서 v0.1.01 §4-1). h2 패드 포함, 거더선 1·2 평행 이동 [추론] (2026-10-07 사용자 결정) |
|
||||
| U3 | 코핑 하면 r=1,100 원 | **ⓐ 띠형** (정면 곡선의 Y 압출) | r=1,100 원의 의미는 미해소로 기록 |
|
||||
| U4 | 말뚝 30본 | **포함** | §2 말뚝 규칙으로 생성 |
|
||||
|
||||
## 4. 검증 설계 (Step 3 예정)
|
||||
|
||||
| # | 검사 | 방법 | FAIL 조건 |
|
||||
| :-- | :--- | :--- | :--- |
|
||||
| C1 | 치수 대조 | 생성 모델에서 바운딩·단면 실측(Rhino) ↔ `params.json` ↔ 도면 치수 문자 | 불일치 > ±1mm 1건 이상 |
|
||||
| C2 | 솔리드 폐합 | `Brep.IsSolid` 전수 | False 1건 이상 |
|
||||
| C3 | 접합 | 인접 부재 접촉면 Z 일치 + 교집합 체적 | 틈 > 1mm, 의도 외 겹침 체적 > 0, 또는 말뚝↔기초 겹침이 근입 체적과 0.1% 넘게 차이 |
|
||||
| C4 | 재투영 | 코핑 정면 단면 절단 → 원호 R·끝점·소단 EL 대조 | 불일치 > ±1mm |
|
||||
| C5 | 부재 누락 | 대상 부재 5종 34개(버림 1, 기초 1, 기둥 1, 코핑 1, 말뚝 30) ↔ 모델 객체 | 누락·중복 1건 이상 |
|
||||
| C6 | 체적 산식 | 직육면체·원기둥은 산식, 코핑은 단면적×폭과 Rhino 체적을 대조 | 상대오차 > 0.1% |
|
||||
| C7 | 대좌·패드 (v0.1.02) | 개수 10/10, IsSolid, 대좌 하단=소단, 상단=소단+h1, 패드 상단=EL.'X'(D2 TABLE), 패드 하면 치수 (A+200)×(B+200), 코핑·대좌·패드 상호 겹침 체적, 기존 34객체 체적·바운딩 지문 불변 | ±1mm 초과 / 겹침 > 0 / 지문 변화 > 0.001mm |
|
||||
|
||||
**작도와 표의 차이 처리**
|
||||
- 작도 차이: D1 평면도 후열 패드(NO.9·10)는 900×840으로 그려져 있으나 표 B=540 기준 (A+200)×(B+200)=900×740. 표 값을 적용한다(Plan 승인 사항). 단면도 대좌 높이 169.4는 표 h1 164를 적용.
|
||||
|
||||
## 5. 기둥 철근 (P1~P6) — **확정** (2026-10-07 HITL: H1·H2·H3 모두 제안안 채택)
|
||||
|
||||
근거: `Code/교각모델링/params.json` → `column_rebar` (`extract_column_rebar.py`), D3 재료표·가공도, D1 정면도·단면 C/D/E
|
||||
|
||||
### 5.1 재료표와 형상 해석 (원길이 = 재료표 L 전수 일치)
|
||||
|
||||
| 마크 | 직경 | 형상 | 본수 | 해석 | 원길이 |
|
||||
| :--- | :--- | :--- | :-- | :--- | :--- |
|
||||
| P1 | S32 | XIV | 46 | 수직 a 16,213 → 90° 원호(중심선 R 340, 호길이 b 534) → 기초 내 수평 갈고리 c 500, **바깥쪽(반경 +) 방향** | 16,213+534+500 = 17,247 |
|
||||
| P2 | S32 (상동) | XVI | 46 | 직선 16,553 | 16,553 |
|
||||
| P3 | H19 (상동) | VI | 36 | 반원 2개(각 a 2,818 = π·897) + 각 반원 양단 갈고리 b 200 → 2×2,818+4×200 | 6,436 |
|
||||
| P4 | H19 | V | 9 | 반원 2개(a 2,753) + 커플러 2곳(b 65) | 2×2,753+2×65 = 5,636 |
|
||||
| P5 | H19 | IX | 22 | 링 1개(a 5,571) + 커플러 1곳(b 65) | 5,571+65 = 5,636 |
|
||||
| P6 | H16 (상동) | III | 36 | 직선 a 1,836 + 양단 갈고리 b 150 | 1,836+2×150 = 2,136 |
|
||||
|
||||
### 5.2 배치
|
||||
|
||||
- **주철근**: 0°에서 시작해 46등분(7.826°)한 반경방향 2본 다발. 바깥 = P1(갈고리), 안쪽 = P2 (D1 단면 C-C 점 쌍, 정면도 바깥 줄 하단에 갈고리 작도)
|
||||
- 하단: P1 갈고리 수평부 EL 26.508 (기초 하면 + 300), 수직부 시작 26.848. P2 하단 26.508
|
||||
- 상단 (H1 확정): 재료표 기준 P1·P2 모두 **EL 43.061** (코핑 소단 3 상면 43.555 아래 494). 작도선(P1 43.011, P2 40.411)과의 차이는 OPEN 등재
|
||||
- 반지름 (H2 확정): 바깥 P1 **870.5**, 안쪽 P2 **825.5** (D1 단면 C-C 작도), 띠철근 중심선 **R 897** (재료표). 치수 문자 875와의 4.5mm 차이 기록. P1 외면 886.5 < 띠철근 내면 887.5 (여유 1.0)
|
||||
- **띠철근**: 67단. P4 9단 EL 27.388~28.348 @120 (기초 내), P5 22단 28.468~30.988 @120, P3 36단 31.288~41.788 @300 (상부 1,377은 코핑 내). 간격 @120은 사용자 결정(라벨 @100과의 충돌은 OPEN 등재)
|
||||
- **크로스타이**: 9단 EL 27.388~41.788 @1,800 (띠철근 단과 일치), 단마다 0°·45°·90°·135° 지름선 4본을 같은 높이에 둠(교차는 기록, H3). 직선부 1,836의 양단(반지름 918)에서 갈고리 150이 띠철근 바깥을 감싸도록 아래로 90°. 높이는 띠철근 위에 얹힌 위치(띠철근 중심 + 9.5 + 8 = +17.5) `[추론]`
|
||||
- **이음·커플러 표현 (H3 확정)**
|
||||
- P3: 반원 2개의 이음 위치를 단마다 90°씩 엇갈리게 배치(D1 「원형 띠철근의 이음 부분이 엇갈리도록 배치」). 갈고리 200은 안쪽 135°
|
||||
- P4·P5: 커플러 위치를 65mm 틈으로 두고 커플러 솔리드는 만들지 않음(D3 커플러 상세는 형상 근거 부족)
|
||||
- P1: XIV의 커플러는 위치 치수가 없어 표현하지 않음(연속봉)
|
||||
- **굽힘**: 도면 명시값(R 340, R 897)을 우선한다. 박스 기준 최소 내면 지름(D19 이상 3.5d → S32 중심선 R ≥ 72)을 만족하는지 확인한다
|
||||
|
||||
### 5.3 객체 귀속·레이어 (박스 원칙 P8, DRAWING_MODELING_RULES §8)
|
||||
|
||||
- 호스트 = 기둥(P1-CL). 기초·코핑으로 정착되는 구간은 `anchor_hosts = [P1-FT 또는 P1-CP]`로 기록한다
|
||||
- 레이어 `P1::철근::기둥::P1`~`P6`(관 솔리드), `P1::철근::중심선`(중심선). 객체 속성: `mark`, `dia`, `shape`, `occurrence`(본 번호·각도·단), `host`, `anchor_hosts`, `src`
|
||||
|
||||
### 5.4 검증 (C8)
|
||||
|
||||
마크별 본수, 원길이 = 재료표 L(±1mm), 곡선길이는 별도 기록, 단·각도 위치(±1mm / ±0.01°), 관 솔리드가 기둥+기초+코핑 합집합 안, 기존 54객체 지문 불변, 음성 대조(위치·높이 둘 다)
|
||||
|
||||
## 6. 확대기초 철근 (B1~B12) — **확정** (2026-10-07 HITL: F1·F2·F3 모두 제안안 채택)
|
||||
|
||||
근거: `params.json` → `footing_rebar` (`extract_footing_rebar.py`), D1 정면도·단면도(절반 작도 → 대칭 환산), D1·D2 치수 사슬, D3 재료표. 높이 z는 기초 하면(EL 26.208) 기준. UA1(조립용)은 제외(Step 0 결정)
|
||||
|
||||
### 6.1 층 구성과 본수 (작도 점·선 ↔ 재료표 전수 일치, B12 제외)
|
||||
|
||||
| 층 | 철근 방향 | 마크 (직경, 형상) | 위치 (직교 방향) | z (F1) | 본수 |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| 하면 1 | Y | B2 (S25 XII, U자 다리 1,950 위로) + B4 (S25 I 직선) | X = ±4,575(B2), −4,375~4,375 @125 교대(B2부터) | 122 | 38 + 35 |
|
||||
| 하면 2 | X | B6 (S29 XII, U자 다리 1,950) + B8 (S29 XVI 직선) | Y = ±3,800(B6), −3,625~3,625 @125 교대(B6부터) | 178 | 32 + 29 |
|
||||
| 하면 3 | Y | B3 (S19 III, 갈고리 200 위로) | X = ±4,575, ±125~±4,375 @250 | 227.5 | 38 |
|
||||
| 하면 4 | X | B7 (S19 XII, 다리 200 위로) | Y = ±3,800, ±125~±3,625 @250 | 277 | 32 |
|
||||
| 중앙 | X | B11 (S16 XII, 다리 100) | 4단 550/950/1,350/1,750, 단마다 Y = ±750·±1,750·±2,750 또는 ±250·±1,250·±2,250·±3,250 | 각 단 | 28 |
|
||||
| 중앙 | Y | B12 (S16 III, 갈고리 100) | 4단, 단마다 X = ±1,875·±2,875·±3,875 또는 ±375·±1,375·±2,375·±3,375 | 각 단 | **작도 28 / 재료표 34 (F2)** |
|
||||
| 상면 2 | Y | B1 (S25 III, 갈고리 200 아래로) | X = ±4,575, ±125~±4,375 @250 | 2,073 | 38 |
|
||||
| 상면 1 | X | B5 (S29 XII, 다리 200 아래로) | Y = ±3,800, ±125~±3,625 @250 | 2,127 | 32 |
|
||||
| 측면 둘레 | 둘레 | B10 (S19 XIII 닫힌 사각 9,198×7,644, 중심 ±4,599·±3,822) | z = 350~1,950 @200 (D1 `150`+`9@200`) | 9단 | 9 |
|
||||
| 수직 결속 | Z | B9 (H16 XI: a 1,995 + b 96 + c 64) | 34×29 격자(X −4,125~4,125 @250, Y −3,500~3,500 @250, D1 `중앙` 사슬)를 체크무늬로 | z 127.5~2,122.5 | 493 `[역산]` |
|
||||
|
||||
- 원길이 해석: XII = a + 2b (B2 11,500, B5·B7 9,550, B6 13,050, B11 9,350), III = a + 2b (B1·B3 8,000, B12 7,800), I·XVI = a, XIII = 2(a+b) = 33,684, XI = a+b+c = 2,155. 재료표 L 전수 일치
|
||||
- U자·다리·갈고리 위치: B2 다리는 Y 끝(±3,800), B6 다리는 X 끝(±4,575). 작도 수직선(정면 x 4,575, 측면 y 3,800, z 150~2,100)과 일치
|
||||
|
||||
### 6.2 결정 결과 (HITL 2026-10-07)
|
||||
|
||||
- F1 → ⓐ 작도 점 높이. B5 상면 피복 58.5 < 100은 발견 사항으로 기록
|
||||
- F2 → 작도 28본만 생성. 재료표 대비 −6본은 검증 FAIL로 기록하고 OPEN에 등재
|
||||
- F3 → 아래 제안대로. B9: 하단 90° 갈고리 b 96(+X 방향, 굽힘 반지름 박스 최소 24), 상단 180° 갈고리 c 64를 반원(중심선 R = 64/π = 20.4, 박스 최소 24 미만 → 기록)으로 표현해 원길이 a+b+c = 2,155 유지
|
||||
|
||||
(초안 원문)
|
||||
|
||||
- **F1 층 높이**: ⓐ 작도 점 높이(위 표) ⓑ 치수선 기준(하면 선 150, 상면 선 2,100)에 직경을 쌓아 접촉 배치. ⓐ는 두 뷰가 서로 일치하지만, 상면 B5의 피복이 58.5로 표기 100보다 작다
|
||||
- **F2 B12 본수**: 작도 위치 28 / 재료표 34. 근거 없이 6본 위치를 만들 수 없다
|
||||
- **F3 상세 표현**: B9는 체크무늬 기준을 (i+j) 짝수로 하고, 하단 90° 갈고리 96과 상단 180° 갈고리 64. B11·B12 다리·갈고리는 아래로. B10은 닫힌 사각(모서리 굽힘 반영). B8 이음 j는 연속봉으로 표현. 간섭(B9와 기둥 철근, P1 갈고리 z 300과 B7 z 277 등)은 기록만 함
|
||||
|
||||
## 7. 코핑 철근 1차 (C1~C11) — **확정** (2026-10-07 HITL)
|
||||
|
||||
근거: [ref: 분석_운곡교P1코핑철근판독 v0.1.01], `params.json` → `coping_rebar`. C12~C16·S1·S2는 2차(OPEN)
|
||||
|
||||
| 마크 | 형상·규칙 | 위치 |
|
||||
| :--- | :--- | :--- |
|
||||
| C1/C4 (1단), C2/C5 (2단), C3/C6 (3단) | VIII: 수평 a를 EL 43.311 / 43.211 / 43.111에 두고, 양끝을 좌·우 선단면 안쪽에 대칭으로 맞춰 길이 = a. 양끝 다리는 선단면과 평행하게 아래로(좌 b, 우 c) | Y 24곳 (A-A 사슬), 단마다 ①CYCLE(C1·C2·C3)부터 교대 `[추론, K5]` |
|
||||
| C7/C8 | VII: 중앙 수평부 2,148 (EL 40.511, X ±1,073.9) → 양쪽 R 12,100 동심 원호(호 길이 5,273) → 선단면 평행 다리 650 위로 | Y 24곳, C7부터 교대 `[추론, K5]` |
|
||||
| C10 / C11 / C9 | IV를 닫힌 사각으로 표현(폭 = A-A 작도 1,160·1,740·1,160, K1). 높이는 판독서 §4 규칙. 겹침 이음 c 750 ×2는 형상에 넣지 않고 원길이에만 반영 | X: C10 0·±300·±600·±900, C11 +1,150~+5,900 @250, C9 −1,150~−5,900 @250; 위치마다 3개 |
|
||||
| C12 (아래 6단) / C13 (위 3단) | X를 수평 닫힌 사각으로 표현. Z = 40,761~42,761 @250. X 범위 = 하면 동심원 R 12,100 또는 선단면 −100.8. 폭 = 작도 1,106/1,686/1,106 (HITL 확정). 겹침 이음 4c(4×580)는 원길이에만 반영 | 단마다 3개, Y (−1,423~−317)·(−843~843)·(317~1,423) |
|
||||
| C14 | III: Y방향 2,900 (Y ±1,450), 양끝 갈고리 350 아래로 `[추론]` | (X, Z) 41곳: 43,088.5·43,188.5 두 줄 X 13·±913·±1,913·±2,913·±3,913·±4,913, 41,011 (13·±1,913), 42,011 (13·±1,913·±3,913), 41,511 (±913·±2,913), 42,511 (±913·±2,913·±4,913), 43,442.4 (+2,913) |
|
||||
| C15 | III: X 3,816~5,900 (a 2,084) at EL 43.598, 양끝 갈고리 350 아래로 | Y 13곳 (B-B `10@250` 사슬) |
|
||||
| C16 | II: X −1,195~4,066 (a 5,261) at EL 43.455, 좌단 갈고리 350 아래로 `[추론]` | Y 13곳 |
|
||||
| S1 / S2 | III: 대좌(거더선 k)마다 대좌 회전(4.405°) 좌표. S1 긴 방향 2,400, 짧은 방향 오프셋 10곳, z = 소단 상면 − 50 (위층 `[추론]`). S2 짧은 방향 1,100, 긴 방향 오프셋 21곳, z = 소단 상면 − 100. 양끝 다리 700 아래로 | 거더선 5개 × (10 + 21) |
|
||||
|
||||
- 굽힘: 박스 최소(H29 중심선 R 65.25, H25 56.25). 원호부(C7·C8)는 R 12,100 그대로
|
||||
- 원길이 판정: C1~C8은 재료표 L(±1mm). 스터럽은 2w + 2b + 2c(w = 작도 폭)로 기록 → 재료표 a 1,407과의 차이로 **FAIL 기록(K1 결정)**, b 범위(최대·최소)는 재료표와 대조
|
||||
- 알려진 간섭(기록만): 스터럽 하단(40.511)과 C7·C8(40.511) 같은 높이, C1·C7 다리 끝 겹침(정착 의도)
|
||||
|
||||
## 8. 교량받침·솔플레이트 — **확정** (2026-10-08 사용자 지시·HITL)
|
||||
|
||||
근거: D2 솔플레이트 상세 TABLE·ELEVATION TABLE, `params.json` → `sole_plates` (`extract_sole_plates.py`)
|
||||
|
||||
| 객체 | 형상 | 위치·높이 | 색 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 교량받침 (10) | 직육면체 (L−100) × (W−100) = A × B (700 × 540~790), 높이 h3 181 | 중심·회전 = h2 패드(전열 4.403°, 후열 3.102°). 하단 = 패드 상면(= EL.'X', 반올림 차 ≤1mm) | 검정 (0,0,0) — 사용자 지시 |
|
||||
| 솔플레이트 (10) | L × W (800 × 640~890) 쐐기. 하면 수평, 상면은 교축방향(패드 긴 축) 경사 S(%), 중심 두께 T 30 → 양끝 37.6 / 22.4 | 하면 = 받침 상단. 두꺼운 쪽 T1 = 전열(−Y) 쪽 `[추론, 사용자 결정]` | 강재 회색 (150,150,150) — R8 대체 기준 |
|
||||
|
||||
- 교축방향 = h2 패드 객체의 긴 방향(사용자 지시). 교축직각 방향 경사 없음
|
||||
- 표의 T1 38 / T2 22와 S로 계산한 양끝 두께(37.6~37.64 / 22.36~22.4)의 차이 ≤ 0.4는 표 반올림으로 보고 기록만 한다
|
||||
- 레이어 `P1::교량받침`, `P1::솔플레이트`, 객체 ID `P1-BB01~10`, `P1-SP01~10`
|
||||
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을 잡는지 보는 검사기 점검 |
|
||||
| 재로드 | 저장한 모델 파일을 다시 열어 검사하는 것 |
|
||||
| 지문 | 객체별 위치·크기·속성 요약. 앞 단계 객체가 바뀌지 않았는지 비교할 때 사용 |
|
||||
| 일괄 승인 | 미승인 게이트를 한 번에 실행·승인하는 기능 |
|
||||
| 보호 템플릿 | 새 교각의 출발점으로 쓰는 고정 사본. 화면에서 고칠 수 없음 |
|
||||
Whitespace-only changes.
@@ -0,0 +1,248 @@
|
||||
# 검증 — 운곡교 P1 교각 콘크리트 모델 (Rhino)
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-07 | 심영표 | 신규 작성 | 최초 버전 (Task #6, Step 3) |
|
||||
| v0.1.01 | 2026-10-07 | 심영표 | 모델 v0.1.01(받침 대좌·패드 20개 추가) 검증 추가: §1-1 C7, 지문 대조, 검사기 보강 1건 | Task 받침대좌모델링 |
|
||||
| v0.1.02 | 2026-10-07 | 심영표 | 모델 v0.1.02(기둥 철근 P1~P6 195본) 검증 추가: §1-2 C8 | Task 기둥철근모델링 |
|
||||
| v0.1.03 | 2026-10-07 | 심영표 | 모델 v0.1.04(기초 철근 B1~B12 832본 + 직경별 색상) 검증 추가: §1-3 C9, 검사기 보강 3건 | Task 기초철근모델링 |
|
||||
| v0.1.04 | 2026-10-07 | 심영표 | 모델 v0.1.08(코핑 철근 C1~C16·S1·S2 486본) 검증 추가: §1-4 C10 | Task 코핑철근모델링 |
|
||||
| v0.1.05 | 2026-10-08 | 심영표 | 모델 v0.1.09(교량받침·솔플레이트 20객체) 검증 추가: §1-5 C11 | Task 솔플레이트모델링 |
|
||||
|
||||
## 0. 대상·방법
|
||||
|
||||
- **대상 모델**: `Code/교각모델링/출력/실행_운곡교P1교각모델_2026-10-07_v0.1.01.3dm` — 객체 54개(버림 1, 기초 1, 기둥 1, 코핑 1, 말뚝 30, **받침대좌 10, 받침패드 10**), 단위 mm, Z = EL×1000. 구판 v0.1.00(34개)은 `출력/backup/`. §0~§3의 v0.1.00 기록은 이력으로 유지
|
||||
- **설계 기준**: [ref: 설계_운곡교P1교각모델링 v0.1.01 §4 C1~C6], v0.1.01 모델은 [ref: 설계 v0.1.02 §4 C7]
|
||||
- **검증 스크립트**: `Code/교각모델링/verify_rhino.py` (Rhino 8 내부 실행), 결과 JSON은 `Code/교각모델링/검증/`
|
||||
- **독립성 장치**: 기대값은 생성기 입력(`params.json`)을 읽지 않고, 도면 치수 문자와 DXF 엔티티 좌표(원호 중심 등)를 검증 스크립트에 직접 입력했다. 다만 같은 세션이 생성과 검증을 모두 수행했으므로 **자기검증**이다 ([R9]).
|
||||
- **3회 실행**
|
||||
|
||||
| 회차 | 대상 | 결과 | 파일 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| ① 양성 | 생성 직후 문서 | 58/58 PASS | `verify_result.json` |
|
||||
| ② **음성 대조** | 코핑을 의도적으로 +5mm 이동 | 10건 FAIL 검출(코핑 관련 항목 전부) → 검사기가 오차를 잡아냄을 확인 | `verify_negative_coping_up5mm.json` |
|
||||
| ③ **저장 파일 재로드** | 저장한 `.3dm`을 새 Rhino 인스턴스에서 열어 재검증 | 58/58 PASS | `verify_result_reloaded.json` |
|
||||
|
||||
## 1-5. 모델 v0.1.09 — 교량받침·솔플레이트 검증 (C11, 2026-10-08)
|
||||
|
||||
- **대상**: `Code/교각모델링/출력/실행_운곡교P1교각모델_2026-10-08_v0.1.09.3dm` — 3,190객체 = 기존 3,170 + 교량받침 10 + 솔플레이트 10. 구판 v0.1.08은 `출력/backup/`. P1-FT·P1-CP 숨김 유지
|
||||
- **스크립트**: `extract_sole_plates.py`, `build_bearing_plates_rhino.py`, `verify_bearing_plates.py`(신규). 기대값은 D2 ELEVATION TABLE(EL.'X', h3)과 솔플레이트 TABLE(S, L, W, T)을 직접 입력했고, 방향은 모델의 h2 패드와 대조했다. 판정은 **자기검증**이다
|
||||
- **설계 기준**: [ref: 설계 v0.1.10 §8]
|
||||
|
||||
| 회차 | 대상 | 결과 | 파일 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| ① 1차 (재로드) | 20객체 | 157/164, FAIL 7 — 모두 NO.3. NO.3는 W 890 > L 800이라 "긴 변 = 교축방향"이라는 **검사기 가정이 틀림**(모델은 패드의 A 방향 = 교축방향에 L을 둠) → 교축방향을 +Y에서 45° 이내인 변으로 판별하도록 수정 | `verify_bearing_plates_v0.1.09_run1_fail7.json` |
|
||||
| ② 검사 보강 | — | 수평 위치 검사가 없음을 확인 → 평면 중심 = 패드 중심 검사 20건 추가 | — |
|
||||
| ③ 최종 (재로드) | 3,190객체 | **184/184 PASS** | `verify_bearing_plates_v0.1.09_reloaded.json` |
|
||||
| ④ 음성 대조 | 받침 NO.5 X +5mm, 솔플레이트 NO.8 Z +5mm | 2건 FAIL로 둘 다 검출 | `verify_bearing_plates_negative_BB05x5_SP08z5.json` |
|
||||
|
||||
| 검사 | 모집단 | 결과 |
|
||||
| :--- | :--- | :--- |
|
||||
| 개수·폐합 | 10 + 10 | PASS |
|
||||
| 받침 하단 = EL.'X' (±1), 높이 h3 181 | 10 | PASS (NO.3·4는 패드 상면 기준이라 +1mm, 허용 범위) |
|
||||
| 받침 (L−100)×(W−100), 솔플레이트 L×W (교축/직각 구분) | 20 | PASS |
|
||||
| 솔플레이트 하단 = 받침 상단, 중심 두께 30, 경사 S (±0.01%), 교축직각 경사 없음, 두꺼운 쪽 −Y | 10 | PASS |
|
||||
| 회전각 = h2 패드 (±0.01°), 평면 중심 = 패드 중심 (±1mm) | 20 | PASS |
|
||||
| 겹침: 받침–패드, 받침–솔플레이트 | 20쌍 | PASS(0) |
|
||||
| 색: 받침 검정, 솔플레이트 (150,150,150) | 20 | PASS |
|
||||
| 기존 3,170객체 지문(숨김 포함) | 3,170 | PASS |
|
||||
|
||||
**기록 항목**: 양끝 두께 37.6~37.64 / 22.36~22.4 vs 표 T1 38 / T2 22 (차이 ≤ 0.4, 표 반올림). 경사 방향(−Y 쪽이 두꺼움)은 `[추론, 사용자 결정]`
|
||||
|
||||
## 1-4. 모델 v0.1.08 — 코핑 철근 C1~C16·S1·S2 검증 (C10, 2026-10-07)
|
||||
|
||||
- **대상**: `Code/교각모델링/출력/실행_운곡교P1교각모델_2026-10-07_v0.1.08.3dm` — 3,170객체 = 기존 2,198 + 코핑 철근 486본 × (관 + 중심선). 구판 v0.1.05~v0.1.07은 `출력/backup/`. **P1-FT·P1-CP 숨김 상태(사용자 결정: 유지)**
|
||||
- **스크립트**: `build_coping_rebar_rhino.py`, `verify_coping_rebar.py`(신규). 기대값은 D3 수량·L·a/b 범위, D1 A-A·B-B 사슬, D2 교좌면 보강 사슬을 직접 입력했다. 판정은 **자기검증**이다
|
||||
- **설계 기준**: [ref: 설계 v0.1.09 §7], [ref: 분석_운곡교P1코핑철근판독 v0.1.02]
|
||||
|
||||
| 회차 | 대상 | 결과 | 파일 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| ① 1차 (v0.1.07 재로드) | 486본 | 111/117, FAIL 6 = K1 결정 5건 + **C14 4본 콘크리트 밖(56점)**: 하면 곡선 근처 측면 단(41.011 X ±1,913, 41.511 X ±2,913)의 아래 갈고리가 하면을 관통 → 추정안 ①(갈고리 모두 아래로)의 결함 | `verify_coping_rebar_v0.1.07_run1_fail6.json` |
|
||||
| ② 보정 | 사용자 결정: 문제 4본만 갈고리 위로 → 재생성 v0.1.08 | — | — |
|
||||
| ③ 재로드 (v0.1.08) | 3,170객체 | 111/117 → C14 단 높이 FAIL = **검사기 결함**(바운딩 최고점이 위쪽 갈고리를 잡음) → 수평부 높이로 수정 → **112/117** (FAIL 5 = K1 결정) | `verify_coping_rebar_v0.1.08_reloaded.json` |
|
||||
| ④ 음성 대조 | C11 스터럽 1개 X +5mm, S1 1본 Z +5mm | 4건 FAIL로 둘 다 검출 | `verify_coping_rebar_negative_C11x5_S1z5.json` |
|
||||
|
||||
| 검사 | 모집단 | 결과 | 비고 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 마크별 본수 | 18마크 486본 | PASS | — |
|
||||
| 원길이 = L | C1~C8, C14~C16, S1, S2 | PASS(±1mm) | C1 a+b+c = 14,489 (L 14,490) |
|
||||
| 원길이 = L (C9~C13) | 5마크 168본 | **FAIL 5 (K1 결정: 작도 폭)** | 스터럽 1,160/1,740, 폐합 1,106/1,686 vs 재료표 1,407 |
|
||||
| 변길이 양끝 = 재료표 범위 | C9·C10·C11 b, C12·C13 a | PASS | 재료표 L = 2a + 2b + 2c / 2a + 2b + 4c, b·a = (최대+최소)/2 관례 재현 PASS |
|
||||
| 위치 | 상면 3단 높이, Y 24곳 교대, 하면 Y 24곳 교대, 스터럽 47곳×3, 폐합 9단, C14 단별 개수, C15·C16 Y 13곳·높이, S1·S2 대좌별 10/21·높이 | PASS | — |
|
||||
| 코핑 밖 표본점 | 전 조각 | PASS(0) | ① 1차 C14 56점 → 보정 |
|
||||
| 색 | 전 철근 관 | PASS(0건) | H29 주황·H25 자주·H19 초록 |
|
||||
| 기존 2,198객체 지문 | 2,198 | PASS | 철근 관은 바운딩+면 수(체적 계산 300초 초과로 대체) |
|
||||
|
||||
**기록 항목(INFO)**
|
||||
- 최소 피복: C1~C8 84.4~85.5, C9~C13 87.1~87.5, C14 90.5, C15·C16 90.1·90.5, S1 40.5(D2 '50'은 중심 기준), S2 90.5mm
|
||||
- 곡선길이 − 원길이: 굽힘 반영으로 −18.3 ~ −41.9mm(C1~C6, C14~C16, S), 닫힌 사각은 겹침 이음(2c, 4c) 미표현분 포함 −1,705 / −2,525mm
|
||||
- 미검사: 철근 간 간섭(스터럽 하단과 C7·C8 같은 높이 40.511, C14 끝과 스터럽 다리, S1·S2 다리와 상면 주철근 등)
|
||||
- 추정 `[추론]` 항목: 상면 단 배정(a 증가 순서), C9 좌·C11 우, 좌측 스터럽 상단(소단 −100), 교대 순서(K5), C14 갈고리 방향, C16 갈고리 위치, S1 위층
|
||||
|
||||
## 1-3. 모델 v0.1.04 — 확대기초 철근 B1~B12 + 직경별 색상 검증 (C9, 2026-10-07)
|
||||
|
||||
- **대상**: `Code/교각모델링/출력/실행_운곡교P1교각모델_2026-10-07_v0.1.04.3dm` — 2,198객체 = 기존 534 + 기초 철근 832본 × (관 + 중심선). v0.1.03(색 적용 전)과 v0.1.02는 `출력/backup/`
|
||||
- **스크립트**: `build_footing_rebar_rhino.py`, `apply_rebar_colors.py`, `verify_footing_rebar.py`(신규). 기대값은 D3 L·본수, D1·D2 치수 사슬, F1 작도 높이를 직접 입력했다. 중앙층(B11·B12) 위치는 치수 사슬이 없어 작도 점과 같은 근거이므로 **파생값**이며 독립 검증이 아니다. 판정은 **자기검증**이다
|
||||
- **설계 기준**: [ref: 설계 v0.1.06 §6], 색상 기준: `context-migration/디자인지침_경로.md` [R8] 대체 수용 기준
|
||||
|
||||
| 회차 | 대상 | 결과 | 파일 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| ① 1차 | 작업 문서 | **실행 오류** — 기초 콘크리트 P1-FT를 찾지 못함 → 조사 결과 P1-FT는 삭제가 아니라 **숨김** 상태(v0.1.03·v0.1.04 파일 모두). 검증 스크립트 3종이 숨긴 객체를 빼고 세는 결함 → 숨김·잠금 포함으로 수정 | — |
|
||||
| ② 2차 | 작업 문서 | 71/73, FAIL 2: B12 본수 −6(F2 결정, 예정된 FAIL) / B9 위치 집합 불일치 → 비대칭 곡선의 매개변수 중간점을 위치로 쓴 **검사기 결함** → 바운딩 기준으로 수정 | `verify_footing_rebar_v0.1.04_run1_fail2.json` |
|
||||
| ③ 음성 대조 | B4 1본 X +5mm, B9 1본 Z +5mm | 1차: B4만 검출하고 **B9 높이 이동은 놓침** → B9 절대 하단 높이 검사 추가(작도 수직선 z 150~2,100 중앙 → 하단 127.5) → 재실행 시 둘 다 검출 | `verify_footing_rebar_negative_B4x5_B9z5.json` |
|
||||
| ④ 최종 | 작업 문서 | **73/74**(FAIL 1 = B12 −6), 기둥 철근 43/43, 콘크리트·대좌 172/172 | `verify_footing_rebar_v0.1.04.json`, `verify_rebar_v0.1.04.json`, `verify_result_v0.1.04_concrete.json` |
|
||||
| ⑤ 재로드 | v0.1.04를 새 인스턴스에서 열어 검증 | 2,198객체, 73/74 · 43/43 · 172/172 | `*_v0.1.04_reloaded.json` |
|
||||
|
||||
| 검사 | 모집단 | 결과 | 비고 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 마크별 본수 = 재료표 | 12마크 832본 | **FAIL 1** (B12 28/34, F2) / 나머지 11마크 PASS | B9 493은 역산값 기준 |
|
||||
| 관 폐합·중심선 짝 | 832 | PASS | — |
|
||||
| 원길이 = L | 832 | PASS(최악 0.0) | XII·III = a+2b, XIII = 2(a+b), XI = a+b+c |
|
||||
| 층 높이(F1) | B1~B8 | PASS(0.0) | 122/178/227.5/277/2,073/2,127 |
|
||||
| 위치 = 치수 사슬 | B2+B4 73, B6+B8 61, B1·B3 38, B5·B7 32 | PASS(0.0) | U자 철근의 양끝·교대 배치 확인 |
|
||||
| 중앙층 4단 | B11·B12 | PASS | 파생값 |
|
||||
| B10 9단 높이·크기 9,198×7,644 | 9 | PASS | — |
|
||||
| B9 체크무늬 위치·하단 높이 | 493 | PASS | — |
|
||||
| 기초 콘크리트 밖 표본점 | 전 조각, 200mm 간격 × 7점 | PASS(0점) | — |
|
||||
| 직경별 색 불일치 | 철근 관 1,072 | PASS(0건) | D32·D29·D25·D19·D16 → 5색 |
|
||||
| 기존 534객체 지문(곡선은 길이) | 534 | PASS | 숨김 상태 P1-FT 포함 |
|
||||
|
||||
**기록 항목(INFO)**
|
||||
- 최소 피복(관 외면 → 콘크리트 외곽면, mm): B1 87.5 / B2 87.5 / B3 90.5 / B4 87.5 / **B5 58.5** / **B6 57.5** / B7 90.5 / B8 85.5 / B9 69.5 / B10 66.5 / B11·B12 92.0. 도면 표기 피복 100보다 작은 값은 F1(작도 높이 채택)의 결과로 발견 사항으로 기록
|
||||
- 곡선길이 − L: 굽힘 반지름(박스 최소)을 넣으면서 −10.3(B9) ~ −73.4(B10) mm 줄어듦. 원길이는 L과 일치
|
||||
- B9 상단 180° 갈고리의 중심선 반지름 20.4는 박스 최소 24보다 작다(c 64 유지, F3)
|
||||
- 미검사: 철근 간 간섭(B5·B6 다리 x=±4,575·y=±3,800 겹침, B9와 기둥 철근, P1 갈고리 z 300과 B7 z 277 등)
|
||||
- **P1-FT(기초 콘크리트) 숨김 상태**: Agent가 실행한 스크립트에는 숨김 처리가 없다. aardvark는 화면이 있는 창이어서 확인 중 사용자 조작일 가능성이 있다 `[추론]`. 저장본 v0.1.03·v0.1.04에 숨김 상태로 저장되어 있다
|
||||
|
||||
## 1-2. 모델 v0.1.02 — 기둥 철근 P1~P6 검증 (C8, 2026-10-07)
|
||||
|
||||
- **대상**: `Code/교각모델링/출력/실행_운곡교P1교각모델_2026-10-07_v0.1.02.3dm` — 534객체 = 기존 54 + 철근 240조각 × (관 솔리드 + 중심선). 195본 = P1 46, P2 46, P3 36(반원 72조각), P4 9(반원 18조각), P5 22, P6 36. 구판 v0.1.01은 `출력/backup/`
|
||||
- **스크립트**: `build_rebar_rhino.py`(생성), `verify_rebar.py`(검증). 기대값은 D3 재료표 L·수량, D1 치수 사슬, 46등분 각도, HITL H2 반지름을 직접 입력했고 `params.json`은 읽지 않았다. 판정은 **자기검증**이다
|
||||
- **설계 기준**: [ref: 설계 v0.1.04 §5]
|
||||
|
||||
| 회차 | 대상 | 결과 | 파일 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| ① 1차 | 생성 직후 | **39/43 PASS, FAIL 4** — P4·P5 원길이·곡선길이가 L보다 130/65mm 짧음. 피복 음수(P1 −3.0, P2 −9.9) 기록 | `verify_rebar_v0.1.02_run1_fail4.json` |
|
||||
| ② 원인·보정 | — | ⓐ 재료표 L(5,636)은 커플러 b 65를 포함(형상 V: 2a+2b, IX: a+b). 모델은 결정대로 커플러를 65mm 틈으로 두어 본체 a만 집계 → **원길이 정의 불일치**(형상 오류 아님). 커플러 길이를 `coupler_length` 속성으로 기록하고 "본체 + 커플러 = L"로 판정(설계서 §5.1 정의와 일치) ⓑ 피복을 기둥–기초·기둥–코핑의 내부 접합면까지 잰 **검사기 결함** → 세 부재 합집합 외곽면 기준으로 수정 | — |
|
||||
| ③ 음성 대조 | P2 1본 반경 +5mm, P3 1조각 +5mm 상승 | 4건 FAIL로 둘 다 검출(반지름, 단 수, 단 높이, 구간 마크) | `verify_rebar_negative_P2x5_P3z5.json` |
|
||||
| ④ 최종 | 재생성 | **43/43 PASS** (+ 콘크리트·대좌 172/172 PASS) | `verify_rebar_v0.1.02.json`, `verify_result_v0.1.02_concrete.json` |
|
||||
| ⑤ 재로드 | v0.1.02 `.3dm`을 새 인스턴스에서 열어 검증 | **43/43 PASS, 172/172 PASS**, 534객체 | `verify_rebar_v0.1.02_reloaded.json`, `verify_result_v0.1.02_concrete_reloaded.json` |
|
||||
|
||||
| 검사 | 모집단 | 결과 | 최대 편차 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 마크별 본수 = 재료표 | 6마크 195본 | PASS(전수 6/6) | 0 |
|
||||
| 관 폐합·중심선 짝 | 240조각 | PASS(전수) | — |
|
||||
| 원길이(+커플러) = 재료표 L | 195본 | PASS(전수 6마크 최악값) | ≤ 0.1 mm |
|
||||
| 곡선길이 = L (굽힘 보정 없는 P1·P2·P4·P5) | 123본 | PASS | 0.1 mm (P1 원호 포함) |
|
||||
| 주철근 반지름 870.5 / 825.5 | 92 | PASS | 0.0 |
|
||||
| 주철근 각도 i×360/46 | 92 | PASS | < 0.01° |
|
||||
| 주철근 상단 EL 43.061, 하단·갈고리 EL 26.508 | 92 | PASS | 0.0 |
|
||||
| 띠철근 67단 높이 = 치수 사슬, 구간 마크 P4 9·P5 22·P3 36 | 67단 | PASS | 0.0 |
|
||||
| 띠철근 반지름 R 897 | P4·P5 | PASS | 0.0 |
|
||||
| 크로스타이 9단 높이 = 사슬 + 17.5 | 36 | PASS | 0.0 |
|
||||
| 콘크리트(기둥+기초+코핑) 밖 표본점 | 전 조각, 100mm 간격 × 5점 | PASS(전수 6마크 0점) | 0 |
|
||||
| 기존 54객체 지문 불변 | 54 | PASS | 0.000 |
|
||||
|
||||
**기록 항목(INFO)**
|
||||
- 최소 피복(관 외면 → 콘크리트 외곽면): P1 113.5 / P2 158.5 / P3 93.5 / P4 109.7 / P5 93.5 / P6 74.0 mm
|
||||
- P1 외면과 띠철근 내면의 여유: 1.0mm (H2 결정 결과)
|
||||
- 곡선길이 − L: P3 −493.1mm, P6 −20.6mm. 갈고리 굽힘(박스 기준 최소 반지름 H19 42.75, H16 24)을 넣으면서 꺾인 모서리가 원호로 바뀐 만큼이다. 원길이는 L과 일치한다(박스 원칙: 원길이와 곡선길이를 구분)
|
||||
- **알려진 철근 간 교차 (H3 결정, 미보정)**: ① 같은 높이의 크로스타이 4본이 중심에서 교차 ② 0°·180° 크로스타이가 해당 각도의 주철근 다발(P1·P2)을 관통 ③ P3 이음부에서 두 반원의 갈고리 시작점이 겹침. 철근 간 간섭 검사는 이번 C8 범위에 포함하지 않았다
|
||||
- 커플러(P1의 XIV, P4·P5)는 솔리드로 만들지 않았다(H3)
|
||||
|
||||
## 1-1. 모델 v0.1.01 — 받침 대좌·패드 검증 (C7, 2026-10-07)
|
||||
|
||||
**기대값 출처**: D2 ELEVATION TABLE(EL.'X', h1, h2, A, B), D1 EL 문자(소단 상면), D1 평면도 S1 치수와 D2 TABLE S1(열 Y: −698 / +600), D1 치수 `1.232`·`3@2.505=7.516`(X 위치). 평면도 정점이나 `params.json`은 쓰지 않았다. 판정은 **자기검증**이다.
|
||||
|
||||
| 회차 | 대상 | 결과 | 파일 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| ① 양성(1차 검사기) | 생성 직후 | 159/159 PASS | (②에서 검사기 결함 발견 → 폐기) |
|
||||
| ② **음성 대조** | 패드 NO.3을 Z +2mm, 대좌 NO.8을 X +3mm 이동 | 1차 검사기는 **패드만 검출하고 대좌 이동은 놓침** → 검사기 보강(대좌 거더 간격 8건, 후열 받침 중심 X 5건) 후 재실행: 3건 FAIL로 둘 다 검출 | `verify_negative_v0.1.01_pad03z2_seat08x3.json` |
|
||||
| ③ 양성(보강 검사기) | 처음부터 다시 생성 | **172/172 PASS** | `verify_result_v0.1.01.json` |
|
||||
| ④ **저장 파일 재로드** | v0.1.01 `.3dm`을 새 인스턴스에서 열어 검증 | **172/172 PASS**, 54객체 | `verify_result_v0.1.01_reloaded.json` |
|
||||
|
||||
| 검사 | 모집단 | 결과 | 최대 편차 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 개수·폐합 | 대좌 10, 패드 10 | PASS(전수 20/20) | — |
|
||||
| 대좌 하단 = 코핑 소단 상면 | 10 | PASS(전수 10/10) | 0.0 mm |
|
||||
| 대좌 상단 = 소단 + h1 | 10 | PASS(전수 10/10) | 0.0 mm |
|
||||
| 패드 상단 = EL.'X' | 10 | PASS(전수 10/10) | +1.0 mm (NO.3·4, 표고 반올림 — 판독서 v0.1.01 §4-1) |
|
||||
| 대좌가 해당 소단·코핑 폭 안에 있음 | 10 | PASS(전수 10/10) | — |
|
||||
| 대좌 반쪽 면적 1.25×1.2 | 10 | PASS(전수 10/10) | 0.0% |
|
||||
| 패드 체적 = 각뿔대 공식(A,B) | 10 | PASS(전수 10/10) | 0.0% |
|
||||
| 패드 중심 Y (S1) | 10 | PASS(전수 10/10) | 0.2 mm |
|
||||
| 패드·대좌 거더 간격 2,505.33 | 패드 8 + 대좌 8 | PASS(전수 16/16) | 0.03 mm |
|
||||
| 후열 받침 중심 X (`1.232`+n·`2.505`) | 5 | PASS(전수 5/5) | ≤ 2 mm |
|
||||
| 겹침: 대좌–코핑, 패드–대좌 | 20쌍 | PASS(전수 20/20) | 0 mm³ |
|
||||
| **기존 34객체 지문**(바운딩 6값 + 체적, v0.1.00 대비) | 34 | PASS | 0.000 |
|
||||
| 기존 C1~C6 | 58 | PASS(전수 58/58) | v0.1.00과 동일 |
|
||||
|
||||
**체적**: 받침대좌 합계 2.273 m³ (전열 5×1.5×0.164 + 후열 5×1.5×0.139), 받침패드 합계 0.326 m³
|
||||
|
||||
**한계**
|
||||
- 거더선 1·2의 대좌·패드는 도면에 그려져 있지 않아 평행 이동 `[추론]`으로 만들었다(사용자 승인). 그려진 거더선 3·4로 평행 이동을 검산했으며 최대 0.23mm로 일치했다(`params.json` `translation_checks`).
|
||||
- 후열 패드 크기는 표 B=540을 적용했다. 평면도에는 840폭으로 그려져 있다(설계서 v0.1.02 작도 차이).
|
||||
- 단면도의 대좌 높이 169.4는 표 h1 164를 적용했다.
|
||||
- 시각 확인은 여전히 `[확인 불가]`이다(OPEN #3).
|
||||
|
||||
## 1. 설계 검사 C1~C6 결과 (재로드 파일 기준, 전수)
|
||||
|
||||
| # | 검사 | 모집단 | 결과 | 최대 편차 |
|
||||
| :-- | :--- | :--- | :--- | :--- |
|
||||
| C1 | 치수 대조 (외형·표고·말뚝 격자·직경·길이·근입) | 31항목 | PASS(전수 31/31) | 0.0 mm |
|
||||
| C2 | 솔리드 폐합 `IsSolid` | 34객체 | PASS(전수 34/34) | — |
|
||||
| C3 | 접합면 Z 일치 3건, 비의도 겹침 4쌍, 말뚝–기초 의도 겹침 1건, 기둥 포함 1건 | 9항목 | PASS(전수 9/9) | 의도 겹침 체적 오차 3.5 mm³ / 848,230,016 mm³ |
|
||||
| C4 | 코핑 정면 단면 재투영 (Y=0 절단): 하면 3점, 상면 소단 3점, 하면 원호 98점 | 8항목 (원호 98점 포함) | PASS(전수 8/8) | 원호 0.06 mm (DXF ARC 중심 기준), 선단 하단 −0.063 mm |
|
||||
| C5 | 부재 수 | 5종 34개 | PASS | — |
|
||||
| C6 | 체적 산식 대조 | 4부재 | PASS(전수 4/4) | 0.0% |
|
||||
|
||||
**체적** (산식과 Rhino 계산 일치):
|
||||
|
||||
| 부재 | 체적 (m³) | 산식 |
|
||||
| :--- | :--- | :--- |
|
||||
| 버림콘크리트 | 6.792 | 9.55×8.0×0.1 − 30×π×0.3²×0.1 |
|
||||
| 기초 | 160.446 | 9.35×7.8×2.2 |
|
||||
| 기둥 | 37.709 | π×1.0²×12.003 |
|
||||
| 코핑 | 89.586 | (정면 다각형 면적 − 원호 활꼴 2개) × 3.1 |
|
||||
| 말뚝 (1본) | 6.899 | π×0.3²×24.4 (30본 합계 206.96, 외형 체적이며 콘크리트량 아님) |
|
||||
|
||||
## 2. 지침 체크리스트 V1~V16
|
||||
|
||||
| # | 항목 | 판정 | 방법·모집단 | 비고 |
|
||||
| :-- | :--- | :--- | :--- | :--- |
|
||||
| V1 ★ | 업무 목표 충족 | PASS | 목표 2건 대조: ① 박스 과정 분석 → 분석서 ② 교각 모델 → `.3dm` 34객체 | 범위는 콘크리트(사용자 확정). 철근·받침 대좌는 범위 밖 |
|
||||
| V2 ★ | 형태·포맷 | PASS | 문서 4건 `.md`, 모델 `.3dm`(Rhino 8, mm) | — |
|
||||
| V3 | 근거 누락 없음 | PASS | `params.json` 수치 항목 전수에 `src` 기재. 판독서 §3 전 행에 근거 열 | 중간 소단 EL 2건은 `[CAD 정점 판독]`으로 표기 |
|
||||
| V4 ★ | 수치·버전 정합 | PASS | `check_outputs.py`로 파일명 버전과 이력 표 최신 행 대조(전수 5/5) | 결과는 Step 4에 기재 |
|
||||
| V5 | 표·도표 반영 | PASS | 도면 3매 전 뷰 분류(판독서 §1). D3은 철근표만 있어 형상 근거 없음 | — |
|
||||
| V6 | 논리 모순 없음 | PASS | 표고 사슬 26.208+2.2+12.003 = 40.411 = 43.411−3.0 대조 | — |
|
||||
| V7 | 사용자 제약 준수 | PASS | 사용자 결정 3건 반영 대조: 대좌 제외 / 띠형 하면 / 말뚝 포함 | — |
|
||||
| V8 ★ | 저장 규칙 | PASS | DOC 유형별(02·03·05), 바이너리·코드는 `Code/` | Plan 경로 변경 1건(.3dm → Code), 사유 F3 |
|
||||
| V9 ★ | OUTPUT 실재성 | PASS | ① `ls` 존재 ② 파일명 버전 = 이력 표 ③ 핵심 항목: `.3dm`을 새 인스턴스에서 열어 34객체·레이어·검증 58/58 확인 | Step 4 기재 |
|
||||
| V10 ★ | 수용 기준 | PASS | Plan 판정 항목 5건: ① 치수 불일치 0 ② 출처 기재율 100% ③ 폐합 100% ④ 틈·겹침 0 ⑤ 누락 0 | 모두 충족 |
|
||||
| V11 ★ | 가동 가능성 | PASS | 저장 파일을 별도 Rhino 인스턴스에서 import(34) → 검증 스크립트 실행 성공 | **시각 확인은 `[확인 불가]`**: 헤드리스 뷰포트 캡처가 회색 화면만 반환. 사용자 육안 확인 필요 |
|
||||
| V12 | 원본 무결성 | PASS | `check_outputs.py`: RAG DWG 3매 SHA-256 = 변환 시점 기록값 (전수 3/3) | Step 4 기재 |
|
||||
| V13 | 스크립트 보관 | PASS | `Code/교각모델링/` 8종: convert_dwg, survey_dxf, render_region, extract_outline, build_rhino, verify_rhino, check_outputs, params.json | — |
|
||||
| V14 ★ | 검증 독립성 | PASS (**자기검증**) | 기대값 출처 분리(도면 문자·DXF 좌표 ↔ params.json), 음성 대조, 재로드 검증 | 독립 검증으로 계상하지 않음 ([R9]) |
|
||||
| V15 ★ | 자율성 등급 | PASS | 아래 대조표 | — |
|
||||
| V16 ★ | 오케스트레이션 | N/A | 서브에이전트·킷 에이전트 위임 없음. Rhino 인스턴스 2개는 도구 실행 환경이며 에이전트가 아님 | — |
|
||||
|
||||
**V15 대조표 ([G1-2] HITL 고정 5항)**
|
||||
|
||||
| 항목 | 해당 여부 | 해당 단계 | 처리 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| (1) 도메인 규칙 해석 | 해당 | #4 부재 구분·형상 규칙 (U1~U4) | HITL. 2026-10-07 사용자 선택으로 확정 (AskUserQuestion) |
|
||||
| (2) 원본 구조 변경 | 비해당 | RAG는 읽기만 함 (V12 지문 불변) | — |
|
||||
| (3) 재작업 상한 후 방법론 재선정 | 비해당 | 재작업 0회 | — |
|
||||
| (4) v1.0.00 이상 대외 발행 | 비해당 | 전 산출물 v0.1.xx | — |
|
||||
| (5) MINOR·MAJOR 승급 | 비해당 | PATCH만 승급 (설계서 v0.1.00 → v0.1.01) | — |
|
||||
|
||||
등급 완화: 없음.
|
||||
|
||||
## 3. 한계·미실시
|
||||
|
||||
- **시각 확인 `[확인 불가]`**: 헤드리스 Rhino 뷰포트 캡처가 회색 화면만 반환했다. 형상의 정확성은 단면 재투영 수치(C4)로 대신 확인했다. 육안 확인은 사용자 몫이다.
|
||||
- **받침 대좌 10개소 `미실시`**: 사용자 결정으로 제외. 높이 기준 충돌(211mm)은 OPEN 목록에 등재.
|
||||
- **철근 `미실시`**: 이번 Task 범위 밖(Step 0 확정).
|
||||
- **측량 좌표 `미반영`**: 도면에 교각 중심의 평면 좌표가 표기되어 있지 않아 원점을 교각 중심으로 두었다. 표고(Z)는 절대값이다.
|
||||
- **코핑 하면 r=1,100 원**: 띠형으로 해석(사용자 결정). 원의 설계 의도는 미해소.
|
||||
Whitespace-only changes.
@@ -0,0 +1,563 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>AI를 이용하여 pier.dwg를 모델링 하기, 그리고 웹앱 만들기</title>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;700&display=swap">
|
||||
<style>
|
||||
:root { --ink:#16202B; --bg:#E9E7E1; --muted:#5B6673; }
|
||||
* { box-sizing:border-box; }
|
||||
body { margin:0; background:var(--bg); color:var(--ink); font-family:'Noto Sans KR','Malgun Gothic',sans-serif; }
|
||||
header.top { max-width:1200px; margin:0 auto; padding:40px 24px 8px; }
|
||||
header.top h1 { font-size:30px; margin:0 0 8px; }
|
||||
header.top p { margin:0 0 16px; color:var(--muted); font-size:16px; line-height:1.6; }
|
||||
nav.toc { max-width:1200px; margin:0 auto 24px; padding:0 24px; }
|
||||
nav.toc details { background:#fff; border:1px solid #d6d3ca; border-radius:12px; padding:12px 20px; }
|
||||
nav.toc summary { cursor:pointer; font-weight:700; }
|
||||
nav.toc ol { list-style:none; margin:12px 0 0; padding:0; columns:2; column-gap:32px; }
|
||||
nav.toc li { padding:3px 0; font-size:15px; }
|
||||
nav.toc a { color:#1A6AA0; text-decoration:none; }
|
||||
main { max-width:1200px; margin:0 auto; padding:0 24px 64px; }
|
||||
.slide-wrap { margin:0 0 36px; }
|
||||
.slide-no { font-size:14px; color:var(--muted); margin:0 0 6px 4px; }
|
||||
.fw { width:100%; overflow:hidden; border-radius:10px; box-shadow:0 2px 14px rgba(22,32,43,.18); background:#fff; }
|
||||
.fi { width:1920px; height:1080px; transform-origin:top left; }
|
||||
.notes { background:#fff; border:1px solid #d6d3ca; border-radius:10px; margin-top:10px; padding:10px 18px; }
|
||||
.notes summary { cursor:pointer; font-weight:700; font-size:15px; }
|
||||
.notes p { margin:10px 0 4px; line-height:1.75; font-size:16px; }
|
||||
.fi table { width:100%; border-collapse:collapse; table-layout:fixed; background:#fff; }
|
||||
.fi th, .fi td { border:1px solid #D9D5CA; padding:12px 16px; text-align:left; vertical-align:top; line-height:1.45; word-break:keep-all; }
|
||||
.fi th { background:#16202B; color:#F6F5F1; font-weight:700; }
|
||||
.fi ul { margin:0; padding-left:1.1em; }
|
||||
.fi li { margin:0 0 .35em; }
|
||||
.fi h1, .fi h2, .fi h3, .fi p { margin:0; }
|
||||
footer.doc { max-width:1200px; margin:0 auto; padding:0 24px 48px; color:var(--muted); font-size:14px; line-height:1.7; }
|
||||
footer.doc table { border-collapse:collapse; background:#fff; font-size:14px; }
|
||||
footer.doc th, footer.doc td { border:1px solid #d6d3ca; padding:6px 12px; text-align:left; }
|
||||
@media print {
|
||||
@page { size:1920px 1080px; margin:0; }
|
||||
body { background:#fff; }
|
||||
header.top, nav.toc, .slide-no, .notes, footer.doc { display:none; }
|
||||
main { max-width:none; padding:0; }
|
||||
.slide-wrap { margin:0; page-break-after:always; }
|
||||
.fw { box-shadow:none; border-radius:0; height:1080px !important; }
|
||||
.fi { transform:none !important; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header class="top">
|
||||
<h1>AI를 이용하여 pier.dwg를 모델링 하기, 그리고 웹앱 만들기</h1>
|
||||
<p>교각 도면 한 장을 3D 모델로 옮기면서 알게 된 것 · 심영표 · 2026-10-14 · 대상: 구조엔지니어 고급기술자·팀장<br>슬라이드 24장(16:9)과 발표자 노트입니다. 인쇄하면 슬라이드만 한 장씩 출력됩니다. 모델 이미지는 Rhino 8 렌더입니다.</p>
|
||||
</header>
|
||||
<nav class="toc"><details><summary>슬라이드 목차</summary><ol><li><a href="#s-cover">01. AI를 이용하여 pier.dwg를 모델링 하기, 그리고 웹앱 만들기</a></li><li><a href="#s-hook">02. 도면 한 세트를 3D로 옮겼더니, 도면끼리 맞지 않는 곳이 보였습니다</a></li><li><a href="#s-purpose">03. 앱의 목적: 도면(DWG)을 넣으면 3D 모델과 검토보고서 초안이 나옵니다</a></li><li><a href="#s-flow">04. 진행 순서는 5단계, 사람이 결정하는 곳은 세 군데입니다</a></li><li><a href="#s-gates">05. 단계마다 검사를 통과해야 다음 단계로 넘어갑니다</a></li><li><a href="#s-summary">06. 2026-10-14 기준 결과: 네 교각 모두 게이트 PASS</a></li><li><a href="#s-cancan">07. 할 수 있는 일과 없는 일</a></li><li><a href="#s-sec-yg">08. 운곡교 P1에서 찾은 것</a></li><li><a href="#s-err-overview">09. 도면 오류·불일치 12건: 기둥 4 · 기초 2 · 코핑 3 · 받침 3</a></li><li><a href="#s-err-a">10. 기둥과 기초: 도면 안에서 값이 갈립니다</a></li><li><a href="#s-err-b">11. 코핑과 받침: 작도와 재료표·표가 다릅니다</a></li><li><a href="#s-err-cause">12. 원인은 세 가지로 모이고, 개선도 세 가지입니다</a></li><li><a href="#s-clash-list">13. 철근 배치 간섭 7곳: 시공 때 위치 조정 기준이 필요합니다</a></li><li><a href="#s-clash-col">14. 기둥: 크로스타이 교차와 결속근 교차</a></li><li><a href="#s-clash-ftg">15. 기초: 모서리 다리 겹침과 갈고리 근접</a></li><li><a href="#s-clash-cop">16. 코핑: 같은 높이의 스터럽과 관통하는 다리</a></li><li><a href="#s-models">17. 검토한 모델 4종: 형식이 달라도 같은 앱으로 만들었습니다</a></li><li><a href="#s-m-yg">18. 운곡교 P1 — 모든 것의 출발점</a></li><li><a href="#s-m-ul">19. 산외교 울산 P1 — 직접기초와 경사 코핑</a></li><li><a href="#s-m-ra">20. Ramp-A교 P1 — 기초판 없는 단일 말뚝</a></li><li><a href="#s-m-ok">21. 옥성교 P1 — 평면 사각 18°와 가장 많은 철근</a></li><li><a href="#s-lessons">22. 모델을 하나 더할 때마다 앱의 숨은 한계가 드러났고, 일반화됐습니다</a></li><li><a href="#s-future">23. 앱의 향후 계획 (제안)</a></li><li><a href="#s-closing">24. AI는 도면을 모델로 옮기고, 사람은 도면이 맞는지 판단합니다</a></li></ol></details></nav>
|
||||
<main>
|
||||
<div class="slide-wrap" id="w-cover"><div class="slide-no">01 / 24</div><div class="fw"><div class="fi"><section id="s-cover" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#16202B;color:#F6F5F1;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:128px;display:flex;flex-direction:row;align-items:center;gap:72px">
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:36px">
|
||||
<p style="font-size:28px;font-weight:500;color:#FF7F0E;letter-spacing:2px">AI × BIM × 구조 검토</p>
|
||||
<h1 style="font-size:76px;font-weight:700;line-height:1.2;letter-spacing:-2px;color:#F6F5F1">AI를 이용하여<br>pier.dwg를 모델링 하기,<br>그리고 웹앱 만들기</h1>
|
||||
<p style="font-size:36px;font-weight:400;line-height:1.4;color:#B8C2CC">교각 도면 한 장을 3D 모델로 옮기면서 알게 된 것</p>
|
||||
<p style="font-size:28px;font-weight:400;line-height:1.5;color:#B8C2CC">심영표 · 2026-10-14<br>대상: 구조엔지니어 고급기술자 · 팀장</p>
|
||||
</div>
|
||||
<div style="display:flex;flex-direction:column;gap:16px;width:620px">
|
||||
<img src="data:image/jpeg;base64,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 truncated
|
||||
<p style="font-size:24px;color:#B8C2CC">운곡교 P1 모델 (Rhino 렌더, 콘크리트 반투명 + 철근 직경별 색)</p>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>인사. 오늘 이야기는 교각 도면 한 장을 AI와 함께 3D 모델로 옮겨 본 경험입니다. 먼저 결과부터 말씀드리고(도면에서 무엇이 보였는지), 그 일을 반복 가능하게 만든 웹앱, 마지막으로 앞으로의 계획을 이야기합니다. 모델 이미지는 모두 Rhino 8에서 직접 렌더한 것입니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-hook"><div class="slide-no">02 / 24</div><div class="fw"><div class="fi"><section id="s-hook" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:48px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">도면 한 세트를 3D로 옮겼더니,<br>도면끼리 맞지 않는 곳이 보였습니다</h2>
|
||||
<div style="display:flex;flex-direction:row;gap:32px">
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:12px;background:#FFFFFF;padding:44px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<p style="font-size:120px;font-weight:700;line-height:1.05;color:#A94F00">12건</p>
|
||||
<h3 style="font-size:36px;font-weight:700">도면 오류 · 불일치</h3>
|
||||
<p style="font-size:26px;line-height:1.5;color:#5B6673">기둥 4 · 기초 2 · 코핑 3 · 받침 3</p>
|
||||
</div>
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:12px;background:#FFFFFF;padding:44px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<p style="font-size:120px;font-weight:700;line-height:1.05;color:#A94F00">10건</p>
|
||||
<h3 style="font-size:36px;font-weight:700">누락</h3>
|
||||
<p style="font-size:26px;line-height:1.5;color:#5B6673">재료표 3 · 형상 치수 3 · 작도 4</p>
|
||||
</div>
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:12px;background:#FFFFFF;padding:44px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<p style="font-size:120px;font-weight:700;line-height:1.05;color:#A94F00">7곳</p>
|
||||
<h3 style="font-size:36px;font-weight:700">철근 배치 간섭</h3>
|
||||
<p style="font-size:26px;line-height:1.5;color:#5B6673">기둥 2 · 기초 3 · 코핑 2</p>
|
||||
</div>
|
||||
</div>
|
||||
<p style="font-size:30px;line-height:1.5;color:#16202B">운곡교 P1 <b>교각 한 개</b>의 결과입니다. 2D 도면을 눈으로 대조할 때 놓치기 쉬운 것을, 3D 모델을 만들고 검사하는 과정이 드러냈습니다.</p>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">출처: 운곡교 P1 도면 검토보고서 v0.1.01 (2026-10-08, 담당자 확정) §2·§4.3·§5 · 판정은 설계사 회신에 따라 바뀔 수 있음</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>이 발표의 결론을 먼저 보여 드립니다. 운곡교 P1 한 개 교각을 모델링하면서 도면 오류·불일치 12건, 재료표·형상·작도 누락 10건, 철근 배치 간섭 7곳을 확인했습니다. 모든 판정은 제가 확정한 것이고, 설계사 회신에 따라 바뀔 수 있습니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-purpose"><div class="slide-no">03 / 24</div><div class="fw"><div class="fi"><section id="s-purpose" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:40px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">앱의 목적: 도면(DWG)을 넣으면<br>3D 모델과 검토보고서 초안이 나옵니다</h2>
|
||||
<div style="display:flex;flex-direction:row;gap:32px">
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:16px;background:#FFFFFF;padding:40px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<p style="font-size:26px;font-weight:700;color:#1A6AA0">① 입력</p>
|
||||
<h3 style="font-size:36px;font-weight:700">교각 도면 DWG 한 세트</h3>
|
||||
<p style="font-size:28px;line-height:1.5;color:#3C4753">일반도 · 배근도 · 받침 표 · 철근재료표</p>
|
||||
</div>
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:16px;background:#FFFFFF;padding:40px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<p style="font-size:26px;font-weight:700;color:#1A6AA0">② 처리</p>
|
||||
<h3 style="font-size:36px;font-weight:700">읽기 · 생성 · 검사</h3>
|
||||
<p style="font-size:28px;line-height:1.5;color:#3C4753">AI가 도면을 읽고 모델을 만들고, 검사 프로그램이 도면 값으로 다시 확인</p>
|
||||
</div>
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:16px;background:#FFFFFF;padding:40px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<p style="font-size:26px;font-weight:700;color:#1A6AA0">③ 출력</p>
|
||||
<h3 style="font-size:36px;font-weight:700">Rhino 모델 + 보고서 초안</h3>
|
||||
<p style="font-size:28px;line-height:1.5;color:#3C4753">.3dm 모델, 검토보고서 초안(MD · PDF)</p>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display:flex;flex-direction:column;gap:12px;background:#16202B;padding:40px 48px;border-radius:20px">
|
||||
<p style="font-size:26px;font-weight:700;color:#FF7F0E">한 줄 요약</p>
|
||||
<p style="font-size:34px;font-weight:500;line-height:1.45;color:#F6F5F1">AI는 도면을 모델로 옮기고, 검사 프로그램은 도면 값으로 다시 확인하고, <b>확정과 승인은 사람이 합니다.</b></p>
|
||||
</div>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">구성: Python 판독·검사 엔진 + 로컬 Rhino 8 자동 실행 + Flask 웹 화면(로컬 전용) · 출처: 앱 요구사항 검토서, 사용설명서 v0.2.07</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>앱의 목적은 한 문장입니다. 도면을 넣으면 3D 모델과 검토보고서 초안이 나옵니다. 중요한 것은 역할 분담입니다. AI가 읽고 만들고, 검사 프로그램이 도면 값으로 다시 확인하며, 확정과 승인은 사람이 합니다. 기술 구성은 Python 엔진, 로컬에서 자동 실행되는 Rhino 8, 그리고 단순한 웹 화면입니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-flow"><div class="slide-no">04 / 24</div><div class="fw"><div class="fi"><section id="s-flow" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:40px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">진행 순서는 5단계,<br>사람이 결정하는 곳은 세 군데입니다</h2>
|
||||
<div style="display:flex;flex-direction:row;gap:24px">
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:14px;background:#FFFFFF;padding:32px 26px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<p style="font-size:44px;font-weight:700;color:#A94F00">1</p>
|
||||
<h3 style="font-size:32px;font-weight:700">도면 올리기</h3>
|
||||
<p style="font-size:24px;line-height:1.5;color:#3C4753">DWG를 변환해 문자·선·치수를 전수 색인</p>
|
||||
<p style="font-size:24px;font-weight:700;color:#1A6AA0">앱</p>
|
||||
</div>
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:14px;background:#FFFFFF;padding:32px 26px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<p style="font-size:44px;font-weight:700;color:#A94F00">2</p>
|
||||
<h3 style="font-size:32px;font-weight:700">값 비교</h3>
|
||||
<p style="font-size:24px;line-height:1.5;color:#3C4753">도면 표에서 읽은 값과 입력값을 대조, 표 밖 치수는 문자 검색</p>
|
||||
<p style="font-size:24px;font-weight:700;color:#1A6AA0">앱 + 사용자</p>
|
||||
</div>
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:14px;background:#FFFFFF;padding:32px 26px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<p style="font-size:44px;font-weight:700;color:#A94F00">3</p>
|
||||
<h3 style="font-size:32px;font-weight:700">확정</h3>
|
||||
<p style="font-size:24px;line-height:1.5;color:#3C4753">"이 값이 도면과 맞다"는 사람의 검토 기록</p>
|
||||
<p style="font-size:24px;font-weight:700;color:#1A6AA0">사용자</p>
|
||||
</div>
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:14px;background:#FFFFFF;padding:32px 26px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<p style="font-size:44px;font-weight:700;color:#A94F00">4</p>
|
||||
<h3 style="font-size:32px;font-weight:700">게이트 G1~G5</h3>
|
||||
<p style="font-size:24px;line-height:1.5;color:#3C4753">형상 → 기둥 → 기초 → 코핑 철근 → 받침을 차례로 생성·검사</p>
|
||||
<p style="font-size:24px;font-weight:700;color:#1A6AA0">앱 생성 · 사용자 승인</p>
|
||||
</div>
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:14px;background:#FFFFFF;padding:32px 26px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<p style="font-size:44px;font-weight:700;color:#A94F00">5</p>
|
||||
<h3 style="font-size:32px;font-weight:700">모델 · 보고서</h3>
|
||||
<p style="font-size:24px;line-height:1.5;color:#3C4753">Rhino 모델(.3dm)과 검토보고서 초안</p>
|
||||
<p style="font-size:24px;font-weight:700;color:#1A6AA0">사용자</p>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display:flex;flex-direction:column;gap:10px;background:#16202B;padding:32px 44px;border-radius:20px">
|
||||
<p style="font-size:26px;font-weight:700;color:#FF7F0E">사람이 결정하는 곳</p>
|
||||
<p style="font-size:28px;line-height:1.5;color:#F6F5F1">① 도면끼리 다른 값 중 무엇을 채택할지 ② 도면에 없는 배치([추론])를 인정할지 ③ 단계별 확정·승인</p>
|
||||
</div>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">출처: T형 교각 모델링 앱 사용설명서 v0.2.07 §1.1</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>다섯 단계입니다. 도면을 올리면 앱이 변환하고 색인하고, 표에서 읽은 값을 입력값과 대조합니다. 사람이 값을 확정한 뒤에야 게이트가 돌아갑니다. 게이트는 형상부터 받침까지 차례로 만들고 검사하며, 각 단계의 승인은 사람이 합니다. 사람이 판단하는 곳은 세 군데입니다. 도면끼리 다를 때 무엇을 택할지, 도면에 없는 배치를 인정할지, 단계별 확정과 승인입니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-gates"><div class="slide-no">05 / 24</div><div class="fw"><div class="fi"><section id="s-gates" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">단계마다 검사를 통과해야<br>다음 단계로 넘어갑니다</h2>
|
||||
<div style="display:flex;flex-direction:row;gap:16px">
|
||||
<p style="flex:1;font-size:28px;font-weight:700;text-align:center;line-height:1.3;background:#16202B;color:#F6F5F1;padding:20px 12px;border-radius:14px">G1<br>형상</p>
|
||||
<p style="flex:1;font-size:28px;font-weight:700;text-align:center;line-height:1.3;background:#16202B;color:#F6F5F1;padding:20px 12px;border-radius:14px">G2<br>기둥 철근</p>
|
||||
<p style="flex:1;font-size:28px;font-weight:700;text-align:center;line-height:1.3;background:#16202B;color:#F6F5F1;padding:20px 12px;border-radius:14px">G3<br>기초 철근</p>
|
||||
<p style="flex:1;font-size:28px;font-weight:700;text-align:center;line-height:1.3;background:#16202B;color:#F6F5F1;padding:20px 12px;border-radius:14px">G4<br>코핑 철근</p>
|
||||
<p style="flex:1;font-size:28px;font-weight:700;text-align:center;line-height:1.3;background:#16202B;color:#F6F5F1;padding:20px 12px;border-radius:14px">G5<br>교량받침</p>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:repeat(2, 1fr);gap:24px">
|
||||
<div style="display:flex;flex-direction:column;gap:10px;background:#FFFFFF;padding:32px 36px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<h3 style="font-size:34px;font-weight:700;color:#1A6AA0">독립 기대값</h3>
|
||||
<p style="font-size:28px;line-height:1.45;color:#3C4753">검사는 생성 입력을 읽지 않고, 도면 문자·표에서 따로 옮긴 기대값만 읽습니다.</p>
|
||||
</div>
|
||||
<div style="display:flex;flex-direction:column;gap:10px;background:#FFFFFF;padding:32px 36px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<h3 style="font-size:34px;font-weight:700;color:#1A6AA0">음성 시험</h3>
|
||||
<p style="font-size:28px;line-height:1.45;color:#3C4753">객체를 일부러 5 mm 옮겨 보고, 검사기가 FAIL을 잡는지 확인합니다.</p>
|
||||
</div>
|
||||
<div style="display:flex;flex-direction:column;gap:10px;background:#FFFFFF;padding:32px 36px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<h3 style="font-size:34px;font-weight:700;color:#1A6AA0">재로드</h3>
|
||||
<p style="font-size:28px;line-height:1.45;color:#3C4753">저장한 모델 파일을 다시 열어 객체 수와 지문이 같은지 대조합니다.</p>
|
||||
</div>
|
||||
<div style="display:flex;flex-direction:column;gap:10px;background:#FFFFFF;padding:32px 36px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<h3 style="font-size:34px;font-weight:700;color:#1A6AA0">앞 단계 불변</h3>
|
||||
<p style="font-size:28px;line-height:1.45;color:#3C4753">새 단계가 앞 단계 객체를 바꾸지 않았는지 지문으로 비교합니다.</p>
|
||||
</div>
|
||||
</div>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">출처: 사용설명서 v0.2.07 §7·부록 B, 앱 요구사항 검토서 '검사 독립성' · 게이트 PASS = 미계획 FAIL 0 + 음성 시험 검출 + 재로드 일치 + 불변</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>이 앱에서 가장 중요한 부분입니다. 모델을 만든 프로그램이 자기 결과를 검사하면 의미가 없으니, 검사 프로그램은 생성 입력을 읽지 않고 도면에서 따로 옮겨 둔 기대값만 읽습니다. 검사기가 정말 잡아내는지 확인하려고 객체를 일부러 5밀리 옮겨 봅니다. 저장 후 다시 열어 대조하고, 앞 단계 객체가 바뀌지 않았는지도 지문으로 확인합니다. 네 가지가 모두 맞아야 PASS입니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-summary"><div class="slide-no">06 / 24</div><div class="fw"><div class="fi"><section id="s-summary" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#16202B;color:#F6F5F1;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:48px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px;color:#F6F5F1">2026-10-14 기준 결과: 네 교각 모두 게이트 PASS</h2>
|
||||
<div style="display:flex;flex-direction:row;gap:32px">
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:12px;border-top:4px solid #FF7F0E;padding-top:28px">
|
||||
<p style="font-size:120px;font-weight:700;line-height:1.05;color:#FF7F0E">4</p>
|
||||
<h3 style="font-size:34px;font-weight:700;color:#F6F5F1">교각 형식</h3>
|
||||
<p style="font-size:26px;line-height:1.5;color:#B8C2CC">운곡교 · 산외교 울산 · Ramp-A교 · 옥성교 (P1)</p>
|
||||
</div>
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:12px;border-top:4px solid #FF7F0E;padding-top:28px">
|
||||
<p style="font-size:120px;font-weight:700;line-height:1.05;color:#FF7F0E">5,570</p>
|
||||
<h3 style="font-size:34px;font-weight:700;color:#F6F5F1">철근 본수</h3>
|
||||
<p style="font-size:26px;line-height:1.5;color:#B8C2CC">철근별 중심선 + 솔리드, 직경별 색</p>
|
||||
</div>
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:12px;border-top:4px solid #FF7F0E;padding-top:28px">
|
||||
<p style="font-size:120px;font-weight:700;line-height:1.05;color:#FF7F0E">2,022</p>
|
||||
<h3 style="font-size:34px;font-weight:700;color:#F6F5F1">게이트 검사 항목</h3>
|
||||
<p style="font-size:26px;line-height:1.5;color:#B8C2CC">G1~G5, 전부 PASS</p>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display:flex;flex-direction:column;gap:10px;background:#1F2D3B;padding:32px 44px;border-radius:20px">
|
||||
<p style="font-size:28px;line-height:1.5;color:#F6F5F1">운곡교 P2는 같은 앱으로 일반화를 확인했습니다(G1~G5 PASS). 이 결과는 <b>작성자의 자체 검증</b>이며, 사람의 확정·승인과 육안 확인은 남아 있습니다.</p>
|
||||
</div>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#B8C2CC">출처: 앱 게이트 보고서(data/*/runs/current), P1 4개 교각 합계 · 철근 본수는 중심선 객체 수 · 작업 시간은 측정하지 않았음</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>숫자로 요약하면, 네 가지 교각 형식, 철근 5,570본, 게이트 검사 2,022항목이 모두 PASS입니다. 다만 이것은 제가 만든 검사로 확인한 자체 검증이고, 사람의 확정과 승인, 육안 확인이 남아 있습니다. 작업 시간 절감은 측정하지 않았기 때문에 말씀드리지 않겠습니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-cancan"><div class="slide-no">07 / 24</div><div class="fw"><div class="fi"><section id="s-cancan" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">할 수 있는 일과 없는 일</h2>
|
||||
<div style="display:flex;flex-direction:row;gap:32px">
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:20px;background:#FFFFFF;padding:40px;border:1px solid #E1DED6;border-top:8px solid #1A6AA0;border-radius:20px">
|
||||
<h3 style="font-size:40px;font-weight:700;color:#1A6AA0">할 수 있는 일</h3>
|
||||
<ul style="font-size:27px;line-height:1.5;color:#16202B">
|
||||
<li>도면 표(받침·솔플레이트·재료표)를 읽어 입력값 후보 제시</li>
|
||||
<li>콘크리트·철근·받침 3D 모델(.3dm) 생성, 철근은 철근별 중심선 + 직경별 색</li>
|
||||
<li>게이트 5종 자동 검사, 도면과 재료표의 값 차이 목록화</li>
|
||||
<li>검토보고서 초안(MD · PDF) 작성</li>
|
||||
<li>네 가지 형식의 보호 템플릿으로 새 교각 시작</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:20px;background:#FFFFFF;padding:40px;border:1px solid #E1DED6;border-top:8px solid #A94F00;border-radius:20px">
|
||||
<h3 style="font-size:40px;font-weight:700;color:#A94F00">할 수 없는 일</h3>
|
||||
<ul style="font-size:27px;line-height:1.5;color:#16202B">
|
||||
<li>T형 교각 외 형식, 모양이 크게 다른 코핑(생성기·검사기 추가 필요)</li>
|
||||
<li>구조계산, 시공성 검토</li>
|
||||
<li>측량좌표·선형 반영(로컬 좌표만)</li>
|
||||
<li>철근 간섭의 정량 검사(근접 위치 파악까지)</li>
|
||||
<li>도면끼리 다를 때 어느 쪽이 맞는지 판단(설계사·담당자 몫)</li>
|
||||
<li>완전 자동 판독(표 3종만 자동, 나머지 치수는 사람이 확인)</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">출처: 사용설명서 v0.2.07 §1.1·§1.2·§9</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>이 앱이 할 수 있는 일과 없는 일을 분명히 하겠습니다. 도면 표를 읽어 값을 제안하고, 모델과 보고서 초안을 만들고, 자동 검사로 확인합니다. 하지만 구조계산이나 시공성 검토는 하지 않고, 간섭도 아직 정량 검사는 하지 않습니다. 가장 중요한 것은 도면끼리 다를 때 어느 쪽이 맞는지는 앱이 판단하지 않는다는 점입니다. 그것은 설계사와 담당자의 몫입니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-sec-yg"><div class="slide-no">08 / 24</div><div class="fw"><div class="fi"><section id="s-sec-yg" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#16202B;color:#F6F5F1;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:128px;display:flex;flex-direction:row;align-items:center;gap:72px">
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:32px">
|
||||
<p style="font-size:28px;font-weight:500;color:#FF7F0E;letter-spacing:2px">PART 2</p>
|
||||
<h1 style="font-size:88px;font-weight:700;line-height:1.15;letter-spacing:-2px;color:#F6F5F1">운곡교 P1에서<br>찾은 것</h1>
|
||||
<p style="font-size:36px;line-height:1.45;color:#B8C2CC">도면 오류·불일치와<br>철근 배치 간섭</p>
|
||||
</div>
|
||||
<div style="display:flex;flex-direction:column;gap:16px;width:760px">
|
||||
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAQDAwQDAwQEBAQFBQQFBwsHBwYGBw4KCggLEA4RERAOEA8SFBoWEhMYEw8QFh8XGBsbHR0dERYgIh8cIhocHRz/2wBDAQUFBQcGBw0HBw0cEhASHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBz/wAARCAJrBBkDASIAAhEBAxEB/8QAHAABAAEFAQEAAAAAAAAAAAAAAAECAwQFBgcI/8QAUBAAAgEDAwIDBQUGAQgIBQIHAQIDAAQRBRIhBjETQVEUImFxgQcykaGxFSNCUsHRYhYkM3KisuHwFzRDU2OCkvElRHODwiYnNVRk0kaTlP/EABoBAQADAQEBAAAAAAAAAAAAAAABAgMEBQb/xABBEQACAQIDBAkDAgMHBAIDAQAAAQIDERIhMQRBUfATYXGBkaGxwdEiMuEF8RQjQlJicoKSotIVM7LiwvIkQ1Nj/9oADAMBAAIRAxEAPwD7+pSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKolmjgQvI6og82OBQFdK5nUutrCyDLDuuJO3u8Ln51yt/1pqN2uFdbdCPux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 truncated
|
||||
<p style="font-size:24px;color:#B8C2CC">운곡교 P1 코핑 (Rhino 렌더, 철근 직경별 색)</p>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>여기서부터는 운곡교 P1에서 확인한 내용입니다. 이 교각이 첫 번째 대상이었고, 3D로 옮기는 과정에서 도면 오류와 불일치, 철근 간섭을 찾았습니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-err-overview"><div class="slide-no">09 / 24</div><div class="fw"><div class="fi"><section id="s-err-overview" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:40px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">도면 오류·불일치 12건:<br>기둥 4 · 기초 2 · 코핑 3 · 받침 3</h2>
|
||||
<table style="font-size:28px;color:#16202B">
|
||||
<tr><th style="width:16%">판정</th><th style="width:10%">건수</th><th style="width:44%">정의</th><th style="width:30%">대표 사례</th></tr>
|
||||
<tr><td>오류</td><td>1건</td><td>같은 도면 안 또는 도면끼리 값이 모순되어 둘 중 하나가 틀림</td><td>기둥 띠철근 간격 @100 대 @120</td></tr>
|
||||
<tr><td>불일치</td><td>7건</td><td>작도·치수가 재료표·표의 값과 다름</td><td>B12 본수 작도 28 대 재료표 34</td></tr>
|
||||
<tr><td>확인 필요</td><td>4건</td><td>해석이 둘 이상 가능하거나 차이가 경미함</td><td>재료표 치수 기준(외면·중심) 미표기</td></tr>
|
||||
</table>
|
||||
<p style="font-size:28px;line-height:1.5;color:#3C4753">공통 원인: 같은 내용을 두 곳에 적음, 작도와 재료표를 따로 작성, 치수 기준 미표기. 판정은 담당자가 확정했습니다(2026-10-08).</p>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">출처: 운곡교 P1 도면 검토보고서 v0.1.01 §1.3·§2 (E-01~E-12)</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>열두 건을 판정 기준으로 나누면 오류 1건, 불일치 7건, 확인 필요 4건입니다. 오류는 같은 도면 안에서 값이 모순되는 경우이고, 불일치는 작도와 재료표가 다른 경우입니다. 다음 두 장에서 대표적인 것을 보여 드립니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-err-a"><div class="slide-no">10 / 24</div><div class="fw"><div class="fi"><section id="s-err-a" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">기둥과 기초: 도면 안에서 값이 갈립니다</h2>
|
||||
<table style="font-size:24px;color:#16202B">
|
||||
<tr><th style="width:8%">No.</th><th style="width:16%">위치</th><th style="width:25%">도면 값 A</th><th style="width:25%">도면 값 B</th><th style="width:26%">영향 · 모델 적용</th></tr>
|
||||
<tr><td>E-01<br>오류</td><td>기둥 띠철근 P4·P5 간격</td><td>정면도·단면 표기 H19 @100</td><td>정면도 치수 8@120 = 960, 22@120 = 2,640</td><td>위치·구간 길이. 치수 사슬이 전체 높이·본수와 맞아 @120 적용</td></tr>
|
||||
<tr><td>E-02<br>불일치</td><td>기둥 주철근 상단</td><td>작도: P2는 기둥 상단 EL 40.411에서 종료</td><td>재료표: P1·P2 모두 EL 43.061</td><td>P2 코핑 정착 2.65 m 차이. 재료표 적용</td></tr>
|
||||
<tr><td>E-05<br>불일치</td><td>기초 B12 본수</td><td>정면도 작도 28곳</td><td>재료표 34본</td><td>6본(0.073 t) 과다 또는 작도 누락. 작도 28본 적용</td></tr>
|
||||
<tr><td>E-06<br>불일치</td><td>기초 상면 철근 높이</td><td>치수: 기초 하면 + 2,100 (피복 100)</td><td>작도 점: B5 + 2,127, B1 + 2,073</td><td>B5 피복 58.5 mm, B6 다리 57.5 mm (표기 100 미달)</td></tr>
|
||||
</table>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">출처: 운곡교 P1 도면 검토보고서 v0.1.01 §2.1·§2.2 · 모델 적용은 담당자 판단, 설계사 확인 필요</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>대표 사례 네 건입니다. 띠철근 간격은 같은 도면의 라벨과 치수가 다릅니다. 주철근 상단은 작도와 재료표가 다릅니다. B12는 작도 28곳인데 재료표는 34본입니다. 상면 철근 높이는 치수대로면 피복이 100인데 작도 점으로는 58밀리까지 내려갑니다. 모델에는 근거가 더 강한 쪽을 적용했고, 설계사 확인이 필요한 항목으로 남겼습니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-err-b"><div class="slide-no">11 / 24</div><div class="fw"><div class="fi"><section id="s-err-b" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">코핑과 받침: 작도와 재료표·표가 다릅니다</h2>
|
||||
<table style="font-size:24px;color:#16202B">
|
||||
<tr><th style="width:8%">No.</th><th style="width:17%">위치</th><th style="width:25%">도면 값 A</th><th style="width:25%">도면 값 B</th><th style="width:25%">영향</th></tr>
|
||||
<tr><td>E-07<br>불일치</td><td>코핑 스터럽 C9~C11 폭</td><td>재료표 a = 1,407</td><td>단면 A-A 작도 1,160 / 1,740 / 1,160</td><td>본당 길이 −107 ~ −505 mm</td></tr>
|
||||
<tr><td>E-08<br>불일치</td><td>코핑 폐합근 C12·C13 폭</td><td>재료표 b = 1,407</td><td>작도 1,106 / 1,686 / 1,106</td><td>E-07과 같은 유형</td></tr>
|
||||
<tr><td>E-10<br>불일치</td><td>받침 대좌 높이</td><td>단면도 작도 169.4</td><td>ELEVATION TABLE h1 = 164</td><td>5.4 mm. 표 적용</td></tr>
|
||||
<tr><td>E-11<br>불일치</td><td>후열 받침 패드 크기</td><td>평면도 900 × 840 (전열과 같은 크기)</td><td>TABLE B = 540 → 900 × 740</td><td>평면도가 받침별 B를 반영하지 않음</td></tr>
|
||||
</table>
|
||||
<p style="font-size:28px;line-height:1.5;color:#3C4753"><b>누락 10건</b> 중: B9 수량 칸이 빈칸(총연장 ÷ L로 493본 역산), 교각 중심 좌표·선형 없음, 솔플레이트 경사 방향 표시 없음</p>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">출처: 운곡교 P1 도면 검토보고서 v0.1.01 §2.3·§2.4·§4.1·§5.1</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>코핑에서는 스터럽 폭이 재료표 1,407인데 작도는 1,160, 1,740, 1,160으로 세 개로 나뉩니다. 받침에서는 대좌 높이와 후열 패드 크기가 표와 평면도에서 다릅니다. 누락도 있습니다. B9의 수량이 비어 있어 총연장을 길이로 나누어 역산했고, 교각 중심 좌표가 도면에 없어 모델은 교각 중심을 원점으로 잡았습니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-err-cause"><div class="slide-no">12 / 24</div><div class="fw"><div class="fi"><section id="s-err-cause" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">원인은 세 가지로 모이고,<br>개선도 세 가지입니다</h2>
|
||||
<div style="display:flex;flex-direction:row;gap:28px">
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:14px;background:#FFFFFF;padding:36px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<p style="font-size:26px;font-weight:700;color:#A94F00">원인 1</p>
|
||||
<h3 style="font-size:34px;font-weight:700;line-height:1.3">같은 내용을 두 곳에 적음</h3>
|
||||
<p style="font-size:26px;line-height:1.5;color:#3C4753">E-01: 라벨 @100, 치수 사슬 @120</p>
|
||||
<p style="font-size:26px;font-weight:700;line-height:1.5;color:#1A6AA0">개선: 간격은 치수 사슬 한 곳에만 기재</p>
|
||||
</div>
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:14px;background:#FFFFFF;padding:36px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<p style="font-size:26px;font-weight:700;color:#A94F00">원인 2</p>
|
||||
<h3 style="font-size:34px;font-weight:700;line-height:1.3">작도와 재료표를 따로 작성</h3>
|
||||
<p style="font-size:26px;line-height:1.5;color:#3C4753">E-02·05·07·08·10·11</p>
|
||||
<p style="font-size:26px;font-weight:700;line-height:1.5;color:#1A6AA0">개선: 재료표 확정 뒤 작도의 수량·길이·폭을 역대조하는 검토 단계, 마크별 '작도 본수 = 재료표 본수' 체크</p>
|
||||
</div>
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:14px;background:#FFFFFF;padding:36px;border:1px solid #E1DED6;border-radius:20px">
|
||||
<p style="font-size:26px;font-weight:700;color:#A94F00">원인 3</p>
|
||||
<h3 style="font-size:34px;font-weight:700;line-height:1.3">치수 기준(외면·중심) 미표기</h3>
|
||||
<p style="font-size:26px;line-height:1.5;color:#3C4753">E-03·06·09: 재료표 치수 = 작도 중심선 + 54.3 mm</p>
|
||||
<p style="font-size:26px;font-weight:700;line-height:1.5;color:#1A6AA0">개선: 일반 노트에 측정 기준·피복 기준 명시</p>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display:flex;flex-direction:column;gap:10px;background:#16202B;padding:30px 44px;border-radius:20px">
|
||||
<p style="font-size:30px;line-height:1.5;color:#F6F5F1">2D 대조만으로는 놓치기 쉬운 것을 3D 모델이 드러냈습니다. <b>설계 검토 절차에 3D 모델 기반 간섭·피복 검토를 넣는 것</b>을 제안합니다.</p>
|
||||
</div>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">출처: 운곡교 P1 도면 검토보고서 v0.1.01 §3 · 개선방안은 제안이며 설계사 협의가 필요함</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>열두 건을 원인으로 묶으면 세 가지입니다. 같은 내용을 두 군데 적어서 갈리고, 작도와 재료표를 따로 만들어서 갈리고, 치수 기준을 표기하지 않아서 갈립니다. 개선안은 각각 하나씩이고, 가장 실무적인 것은 재료표가 확정된 뒤 작도를 역으로 대조하는 검토 단계를 넣는 것입니다. 이 모델과 검사 스크립트를 그 검토에 재사용할 수 있습니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-clash-list"><div class="slide-no">13 / 24</div><div class="fw"><div class="fi"><section id="s-clash-list" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">철근 배치 간섭 7곳:<br>시공 때 위치 조정 기준이 필요합니다</h2>
|
||||
<table style="font-size:24px;color:#16202B">
|
||||
<tr><th style="width:9%">부재</th><th style="width:24%">위치</th><th style="width:67%">내용</th></tr>
|
||||
<tr><td>기둥</td><td>크로스타이 P6</td><td>같은 높이 4본이 중심에서 교차, 0°·180°가 주철근 다발을 관통</td></tr>
|
||||
<tr><td>기둥</td><td>띠철근 P3 이음부</td><td>두 반원의 갈고리 시작점이 겹침</td></tr>
|
||||
<tr><td>기초</td><td>B5·B6 다리</td><td>모서리(X ±4,575, Y ±3,800)에서 상·하면 철근 다리가 겹침</td></tr>
|
||||
<tr><td>기초</td><td>기둥 주철근 P1 갈고리</td><td>기초 하면 + 300의 갈고리가 B7(+ 277)과 근접</td></tr>
|
||||
<tr><td>기초</td><td>B9 수직 결속근</td><td>기둥 내부 위치에서 기둥 주철근·띠철근과 교차</td></tr>
|
||||
<tr><td>코핑</td><td>스터럽 하단</td><td>하면근 C7·C8과 같은 높이(EL 40.511)</td></tr>
|
||||
<tr><td>코핑</td><td>교좌면 보강 S1·S2</td><td>다리 700이 상면 주철근 3단(EL 43.111~43.311)을 통과</td></tr>
|
||||
</table>
|
||||
<p style="font-size:26px;line-height:1.5;color:#5B6673">간섭의 정량 검사는 하지 않았습니다. 모델에서 확인한 교차·근접 위치입니다.</p>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">출처: 운곡교 P1 도면 검토보고서 v0.1.01 §4.3</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>이제 철근 간섭입니다. 모델에서 교차하거나 가까이 붙은 위치 일곱 곳입니다. 정량 검사를 한 것은 아니고, 시공 때 위치 조정 기준이 필요한 곳을 알려 주는 목록입니다. 다음 세 장에서 이 중 여섯 곳을 Rhino 화면으로 보여 드립니다. 빨강과 파랑은 서로 만나는 두 철근, 회색은 주변 철근입니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-clash-col"><div class="slide-no">14 / 24</div><div class="fw"><div class="fi"><section id="s-clash-col" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">기둥: 크로스타이 교차와 결속근 교차</h2>
|
||||
<div style="display:flex;flex-direction:row;gap:32px">
|
||||
<div style="display:flex;flex-direction:column;gap:14px;width:816px">
|
||||
<img src="data:image/jpeg;base64,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 truncated
|
||||
<p style="font-size:26px;line-height:1.4;color:#16202B"><b>P6 크로스타이(빨강)</b>: 같은 높이 4본이 중심에서 교차 · 기둥 주철근(회색)</p>
|
||||
</div>
|
||||
<div style="display:flex;flex-direction:column;gap:14px;width:816px">
|
||||
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAQDAwQDAwQEBAQFBQQFBwsHBwYGBw4KCggLEA4RERAOEA8SFBoWEhMYEw8QFh8XGBsbHR0dERYgIh8cIhocHRz/2wBDAQUFBQcGBw0HBw0cEhASHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBz/wAARCAOEBLADASIAAhEBAxEB/8QAHQAAAQQDAQEAAAAAAAAAAAAABgABBQcCAwQICf/EAGIQAAEDAwEEBgUHCQQHBQUAEwECAwQABREGBxIhMRNBUWFxgRQiMpGhFSNCUqKxwQgWM2JygpKy0SRDU+ElJjREo7PCF2Nz8PEnVGSDk9I1NkVlN1V0pOJ1lMM4ZoS0xNP/xAAbAQACAwEBAQAAAAAAAAAAAAAAAwECBAUGB//EAEkRAAEDAQUECAMFBwMEAgIBBQEAAgMRBBIhMUFRYXGBEyIykaGxwfAFQtEUIzNS4WJygqKywvEkNJIGQ9LyFeIlRFNzRWOD0//aAAwDAQACEQMRAD8A99c/ClypUqEJUuvNP1U1CE+aalSoQkKfNNSoQlmlSpUIT5pvKlSoQl5U+aalQhPmm50qVCEiaXVTZp6EJU+aalQhLNLNKmzQhPT5NY86eoQlmlk02aQoQnzSzSxTcKEJDhT03XT5qUJs05ps0s0IS40s0s0iaEJyabNLNNQhPmkKanBoQnJpZzgA8qXOm66EIGj/AOitrE5r6F5tTb4481sOFCiP3XEe6jkgE99BGs8wNV6KuwzuCY5b3OzdfaOM/voRU5qbVlq0jCZl3aQplp5wMo3GlOKUojOAlIJ5AnPVilggVqtMjHSXLoqSPLDyAUzjnTiuW3XGLdoTE2E+2/FfSFtuNqyFDtrpPCmLOQQaFZA9VI9ec4phTkg4HfQoQJovaHI1VKS2/Y5ECPJS6uHILgcQ4ltZQoKwPUXkcjRyB1kmgbZofQ2NS2kjCrdepSUjsQ6Q8n4O0dCqR1LcVotQa2UhgoPdPBKlgUqVXWdPmnzwrGlQhInjSz2VzRJ8Wf0nosll8Nq3VFpwK3T2HHKujlwoUkEYFeavyr9IuiJaNYQk/PQlCNIIHHdJJQfDJUPMVTdkk+nXG3SyRuvBWe4lJ4e+vVW3qQ0NCGA8kFFyktxiD4FWR/DXjS1Pu2S9It0n1Q28FJJ5Hw8RxroBpms37TPFv6Fc4u6C0/sv8HfqFK3E+i6hYX9EOJJ99FFzt7M+XPZdbC1CK442SPYUjC8jySffQpqRYM7fHHOaOkqBvMZZICJMd5o5699lSfvNYMit5xCiLCoyIstJPEtpVgedB8y3x5kx9D6AopHAjgaLNJKyt1H1mSPcag5LYReVj6wNSx7mG800KhzGvF1wqEMxLbObXJct6C43GI30jv7uuuuPf0KC230FtRBB7PDuop0eB6Zd2scwhX31E3K1MSpskLbGeJBHA1v+1xzYWluO0Z/QrB9jkgxszsPynEctQunSEhpqaxhQ6MA4VmpS/FD0xvGFK48aBI9qmIfIgvYXnASFbpP4Guv5bmwHw3cYyi4n6XI0fYL4rZ3B27I9yBb+jwtDSzfmO8K5/wAn54s7RmGScdMw8jn3Z/CrD20Dc1IwT9KGk+e8qqd2I6ggI2n2d52QhlClOJJdO4OLahzPDnirk25uNovFucChhyKQDngcKP8AWsL4nxm68UK3MkZILzDUKvdijpRtMtyfrdOP+Go/hXoraa0Xtn2pEEkj0Nw8+wZ/CvNWyF3d2l2hYPD0hxPvbUK9Ra7b6XRGokdZgP8A8hqiuvImnCFaVY7d0/eau38m90qtF9QTndkoOfFP+VUdpRW9phvu3h8TVz/k0uFcPUaD1Osn4LH4UIVK375jafflEkkXdZOT2OVa+1RIRrG44+o2fsCqo1plvabqMDquTivt5q2dqycawmHtYaP2aEKrtWEjTWkjzUDNHH9tJ/GvVGydZXs504Vc/REgkedeVdVKKtL6WJ4HppqfLebNep9khzs407/+bD7zQhAW2c/6zQcEgiGDn99VdX5PpK0aoWeZlt/yVzbacDUsI45wx/Oquj8no/2bUx/+MR/JQhXUcEcc14njqDuq7woJHGU8f+Ia9sKICc14ltit7Ul0J59O4fes0IXpDYqM6cnE5x6YofYR/WqL/KDc3tos8Hj0bTI+wD+NXvsXGNLy1ds1f8iKoDb0S5tIvKeoJZH/AAk0IXFMBVqO3IJ9i3xv/wDHbqK1kopWwkE+yr8KlZhxq5sE/o4UZP8AwWxUPrFY6dnPUk0IV3fk0J3NDX9/JH9pVx8GwfxqjdNq6S4uq68D41euwNQibINQSOWHJCifBlNUNprDc9WeGUJ4nzoChXLsPa6XaZeXDxDVtSPDKxW38qFwl7TDIJz0clXP/wAMVs/J83XtWaslEgJQ0y2CfP8ApQv+Uvq62P6ltUeNOjyVxoqwtLCwvcUpXI45HCavHG+R11gqVWSRkbbzzQIR0QS6002ojfW4Bg+NFH5ScxCdcRmVuBKI8JoDJwBxUfxqmrTfbxKuMSLYI7q5fSo6JKU7xK94Y7ufbXfre26ruOrH06xkrVd8J6UEpO6CAQkbvqjh2Vt+w3MbQ4N3ZnuWI2+/hZ2l2/Id5UHKviOnAjNl1fIHq8hzNcwts65zAZZKCrjhY448KJ9K2xpq6lKWk5R9I8TXRdCDqJ8pA9QY+Aq32yOEUszaHacT9Aq/Y5JzW0uqPyjAc9SuexwW40xpltvHrHKzzPLnUxqVX9ok4/u0JA91NZ2d6fHP6hV71H+ladQry9O481hPurnve55vONSug1jWC60UC36WSEwJDnHG4o1H6bT0t2cVjrqUtP8AZ9OSV8vm8e+ovSat2Y8vsV+FVVljcLmLc9cZpG8EOKwO3jiru/JL0i43brvq+Yj5+4LMeOoj6IOVkeKsD92vNlweXerm3bWVZQt3eWRyzn8Ode2NgktpehBb2UgN2uU5EGOvGFZPf61dAtMNm3v8B+pXPDhNaf2Wf1foFaOaempVz10E+aVLmaXXQhKlwps0qEJ+FNSpUIT5pqVKhCVLNKlQhKlmlSoQlmlimzT5oQm40uNLNLNQhPSps0s0ISzSzTGlUoT5NNSpUIT5pqVKhCVLJpUqEJZpcqVI0IT5NLJrEDjT1CE+8e2mzTZpwalCVLNKlQhPnNMSaVLFCEjx50s0qbNCE+e6m5GlmkedCE/hTZNLFPUITZp8mlSqUJ941jk09KhCbJpZNPSoQlk0iTSpUISBNInNKl10ISNKnpqEJyaalSoQlmlSxSoQlSpUqEJUqY04NCEqbrp6VCEqVY04NCE9KmzSFCEjS409LNCEqVY0s0ITk01KlQhOKesafNCEqXKlmkTQhLnTUqVCEqVKlQhKlSpUISpUqVCEqVNT54UISzisQ4hSykLBUnmAeI8ay5g4ODVTaJ0tFa1zqiUHpEe6QLqt1a0L4TI77SVpS4DwIBJAPMbvOqucQQAnxRNe1znGlArZzmnHOlmkCfOrJCCdrEZxeh7hKaHz9sU1cW+3LDiXDjySR51zbUHko05aL80cotlzhzN5J4FtSwhfiNxw0aXWE3dLbMgu/o5TK2VeCkkH76r2zx3NWbEjAXxlqtjsJWep5oKb94WilPGJpqPJbrO4XWk5Ndjwd/hWHb4ES2xhHhR2o8cKUoNtDCQVEknHeTmumoXR12F+0pZLmFAmZDadOD1lAJ+NTRGaYKEYLG8EOIdmlnFOOXCsQMin44xk1KqgOwEQNqGroigQJ8SHcE+IC2lY/wDpo99HeAE56qB7yr0HalpmSMAXGBLgqPLKklDqf5V/GtW05y47+l4cS6yrbHuFzTFkPxcBwZaWUYyCMb4TntpYN0Hitjo+lezGlR5YeiPhypVGWFi5xbTGZu8lqTcW0lLr7Sd1LmDwVjqJGM99SQNXCyOFCQnrF1HSNrTnAUMVlTE4qVCqzY3pe2xLHAu8dpTFzYbftsoteqmQW31J3lj6Shu8Dz4mrUJzxoE2bj0V3WFuJGIl8kKSOxLoQ8P+YaOk1SMANFFqtjnOmcXGv0OIVCflQ3QwbZpJA9hd0CleATj/AKq8/wCtrMibERLbGJLPDh9IZ+8Vef5W7GdN6ae4hCLgQT2ern8Kqy+o6OJLQOPROEV0hI6FkUrM8fNccxtmfLE/LDyVcx5iZ8RtCyfSmSAoK+kO2juYyu7260NIdDS5AbbS59QkgZ8qENUWUxhHusIbvSICnEDlnHMV2WjUBlWtlCUnp4agrd68ZyCKJ4WkfaIez5HZ9EWeZwP2ebtDLeNv1U3phKol2MZw5WnpG1eINcF3R0d8Fd8CUJGpFygjow9IWvdz7O8CQK5NT/N3ZlfbmsGa3EUNCstKerqOa31LYJ9xFYTkdHd3h1FOaw06vo9Wt9jjS0/DP4V1XsBu8IP1k0IUPaV7lwSTzD2PjRHq2Oj5slIKVcwRQrHO7NXjqdz91GurUb0RlfYRUgkGoUEA4FDGntFw9S6ot9qW6qKmW8lvpEDO7nrx40T7R9jup9BKhpTe/lKGvf8ARxvKSUAYyN1RIHPqrl0QvodfWBw9Utn+cV6P24shcWzuY4JU4Pgn+lbGfEJ2ijjeGw4rG/4fA43gLp2jBeS9MawvOjNSW65vwi96G8FlvigrGCCN4ZHX2V6AlflSaXvdhuUGZbblBkyY7jQylLiApSSOYOevsqtNNBCdf2kLSChM9jIPWN8V6o1Ps70pfIclc7T9ude6NRDnQJC84PHeAzVjaLNJ+JFT90+hVRZ7TH+HLX94V8RReLdPaqhxbY5DU6kLUpRTngME99X/APkyymXBqJCVpKj0K8ZH6/8AlXne1aPh3OFJdKnW3G3VJBSerq50UbM9jUnW0m5pgX1y2SIaUqCggnfySOYIPVUmOxvHVkLeI+Line truncated
|
||||
<p style="font-size:26px;line-height:1.4;color:#16202B"><b>B9 결속근(빨강)</b>이 기둥 주철근(회색)·P3 띠철근(파랑)과 교차</p>
|
||||
</div>
|
||||
</div>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">운곡교 P1 모델, Rhino 렌더 · 철근 색은 간섭 대상 구분용(회색 = 주변 철근) · 출처: 도면 검토보고서 §4.3</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>왼쪽은 기둥의 크로스타이 P6입니다. 같은 높이의 네 본이 기둥 중심에서 한 점으로 교차합니다. 도면대로 모델링하면 이렇게 되고, 시공에서는 높이를 어긋나게 하는 등의 조정이 필요합니다. 오른쪽은 기초의 수직 결속근 B9가 기둥 안쪽 위치에서 기둥 철근과 만나는 모습입니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-clash-ftg"><div class="slide-no">15 / 24</div><div class="fw"><div class="fi"><section id="s-clash-ftg" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">기초: 모서리 다리 겹침과 갈고리 근접</h2>
|
||||
<div style="display:flex;flex-direction:row;gap:32px">
|
||||
<div style="display:flex;flex-direction:column;gap:14px;width:816px">
|
||||
<img src="data:image/jpeg;base64,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 truncated
|
||||
<p style="font-size:26px;line-height:1.4;color:#16202B"><b>B5(빨강)·B6(파랑)</b> 다리가 모서리 X ±4,575, Y ±3,800에서 겹침</p>
|
||||
</div>
|
||||
<div style="display:flex;flex-direction:column;gap:14px;width:816px">
|
||||
<img src="data:image/jpeg;base64,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 truncated
|
||||
<p style="font-size:26px;line-height:1.4;color:#16202B"><b>기둥 주철근 P1 갈고리(빨강)</b>가 기초 하면 B7(파랑)과 근접 (+ 300 대 + 277)</p>
|
||||
</div>
|
||||
</div>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">운곡교 P1 모델, Rhino 렌더 · 철근 색은 간섭 대상 구분용 · 출처: 도면 검토보고서 §4.3 · 피복 미달(B5 58.5 mm)은 E-06 참조</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>기초에서는 두 가지입니다. 왼쪽, 상면과 하면 철근 B5와 B6은 모서리에서 다리가 겹칩니다. 오른쪽, 기둥 주철근의 갈고리가 기초 하면 철근과 거의 같은 높이에서 방사형으로 퍼져 B7과 근접합니다. 도면 값 그대로 모델링한 결과이며, 실제 시공에서의 위치 조정은 설계사와 협의가 필요합니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-clash-cop"><div class="slide-no">16 / 24</div><div class="fw"><div class="fi"><section id="s-clash-cop" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">코핑: 같은 높이의 스터럽과 관통하는 다리</h2>
|
||||
<div style="display:flex;flex-direction:row;gap:32px">
|
||||
<div style="display:flex;flex-direction:column;gap:14px;width:816px">
|
||||
<img src="data:image/jpeg;base64,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 truncated
|
||||
<p style="font-size:26px;line-height:1.4;color:#16202B"><b>스터럽 C9~C11(빨강)</b> 하단이 하면근 <b>C7·C8(파랑)</b>과 같은 높이(EL 40.511)</p>
|
||||
</div>
|
||||
<div style="display:flex;flex-direction:column;gap:14px;width:816px">
|
||||
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAQDAwQDAwQEBAQFBQQFBwsHBwYGBw4KCggLEA4RERAOEA8SFBoWEhMYEw8QFh8XGBsbHR0dERYgIh8cIhocHRz/2wBDAQUFBQcGBw0HBw0cEhASHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBz/wAARCAOEBLADASIAAhEBAxEB/8QAHQABAAEFAQEBAAAAAAAAAAAAAAECAwQFBgcICf/EAFQQAAEDAwICBQgIAQsBBgUCBwEAAgMEBREGEiExBxNBUWEUIjJxgZGhsRUjM0JSYsHRcggWJDRDU2OSorLhghclJnPw8TZEZLPCVIOToyfDNUV0/8QAGwEBAAIDAQEAAAAAAAAAAAAAAAQFAQMGAgf/xABCEQACAQMCAwQIBAYBAwQBBQAAAQIDBBEFIRIxQRNRYXEGFCIygZGhsTPB0fAVI0JS4fFiJDRyQ4KS0hYlU6Kywv/aAAwDAQACEQMRAD8A+/QpREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBQRlSiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAiIgCIiAIiIAsW4XGltdK+qrJ2QwM5vecBWrpeqCyw9bXVUcLTyDjxd6h2rw3pK1LJq+pihtlWyOihAADzglxPF2PUgO+qOmOwxT9XG2eRn4wAAfis6m6UtPVAGZ5IyfxN/Yrj9P6V6N4aGKKokFZV4+sqKh0jS49uADgBbN/RdoW5ZNJVyQk/3FZ+jsoDs6bLine truncated
|
||||
<p style="font-size:26px;line-height:1.4;color:#16202B"><b>S1(빨강)·S2(파랑)</b> 다리 700이 상면 주철근 3단(회색)을 통과</p>
|
||||
</div>
|
||||
</div>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">운곡교 P1 모델, Rhino 렌더 · 철근 색은 간섭 대상 구분용(회색 = 주변 철근) · 출처: 도면 검토보고서 §4.3</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>코핑에서는 두 가지입니다. 스터럽의 하단이 하면 철근 C7, C8과 같은 높이에 놓입니다. 그리고 받침 아래 보강근 S1, S2의 다리 700이 상면 주철근 3단을 지나갑니다. 둘 다 도면에 그려진 대로 모델링했을 때 나타난 결과입니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-models"><div class="slide-no">17 / 24</div><div class="fw"><div class="fi"><section id="s-models" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">검토한 모델 4종:<br>형식이 달라도 같은 앱으로 만들었습니다</h2>
|
||||
<table style="font-size:24px;color:#16202B">
|
||||
<tr><th style="width:14%">교각</th><th style="width:22%">기초</th><th style="width:30%">코핑</th><th style="width:12%">받침</th><th style="width:22%">철근 · 검사</th></tr>
|
||||
<tr><td>운곡교 P1</td><td>확대기초 + 말뚝 30</td><td>하면 곡선(R12,000), 상면 5단</td><td>10개</td><td>1,558본 · 585항목</td></tr>
|
||||
<tr><td>산외교 울산 P1</td><td>직접기초(말뚝 없음)</td><td>직선 경사, 끝면 300 경사, 상면 130 단차, 평면 모서리 R500</td><td>4개</td><td>992본 · 406항목</td></tr>
|
||||
<tr><td>Ramp-A교 P1</td><td>기초판 없이 단일 현장타설말뚝(Ø2.35 → Ø2.5)</td><td>Y형(나팔형), 하면 R5,000, 평면 볼록 끝면</td><td>2개(평면 회전)</td><td>1,121본 · 336항목</td></tr>
|
||||
<tr><td>옥성교 P1</td><td>확대기초 + 강관말뚝 25(Ø609)</td><td>직선 경사, 상면 5단, 측면 테이퍼, 평면 사각 18°</td><td>10개(대좌 5개 공유)</td><td>1,899본 · 695항목</td></tr>
|
||||
</table>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">출처: 사용설명서 v0.2.07 §1.1, 앱 게이트 보고서(2026-10-14) · 운곡교 P2도 일반화 검증에 사용(G1~G5 PASS)</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>네 가지 교각입니다. 운곡교는 말뚝기초에 하면이 곡선인 코핑, 산외교 울산은 말뚝 없는 직접기초, Ramp-A교는 기초판 없이 단일 현장타설말뚝에 나팔형 코핑, 옥성교는 평면이 사각 18도입니다. 형식이 이만큼 다른데도 같은 앱의 틀, 즉 읽기, 생성, 검사, 보고서 흐름으로 처리했습니다. 다만 형식마다 생성기나 검사기를 일부 추가해야 했습니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-m-yg"><div class="slide-no">18 / 24</div><div class="fw"><div class="fi"><section id="s-m-yg" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:30px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">운곡교 P1 — 모든 것의 출발점</h2>
|
||||
<div style="display:flex;flex-direction:row;gap:40px">
|
||||
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAQDAwQDAwQEBAQFBQQFBwsHBwYGBw4KCggLEA4RERAOEA8SFBoWEhMYEw8QFh8XGBsbHR0dERYgIh8cIhocHRz/2wBDAQUFBQcGBw0HBw0cEhASHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBz/wAARCANqAh8DASIAAhEBAxEB/8QAHQABAAEFAQEBAAAAAAAAAAAAAAQBAgMFBgcICf/EAFAQAAEDAgMFAwgECggGAgIDAQEAAgMEEQUSIQYTMUFRImFxBxQygZGhscEjQlLRFSQzYmNyorLh8AgWJTRTc4KSNUNkdMLxJjZEgxdFk1T/xAAaAQEAAwEBAQAAAAAAAAAAAAAAAQIDBAUG/8QAPBEAAgEBBAcHBAIBAwQCAwAAAAECEQMhMfAEEkFRYaGxBRNxgZHB0SIy4fEUwmIVI0IzUnKygtKS4vL/2gAMAwEAAhEDEQA/APv5ERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQBERAEREAREQGCaupad2Waohjd0e8BRX4/hUYu7EqMDvmb964Hy1UdG3ZsVYbDHWb9jTNazy2ztCRrZfN01RhRBFRVUx655rfNAfZDtrMBabHGaAH/uG/er27TYK/0cWoXeE7fvXw9JLsqXW31Hm/zNPcskVXs3Fbd1FC3/WEB9n1u32zWHPLKjGKZrhxAdm+C1E/lj2Ipvym0FKPb9y+RMRrsKeKbzeemc5jwSY9Tb1KRPtJhlPe5kt+bCTdRUH1R/8AzpsFny/1ggJ7muPyUuHyx7ETkZMfpjfud9y+OX7cYNnsKaovzcYm/etrSbTYfVABhc24v9IWt9xKVB9p4NtRhW0ILsMqvOWNNi9kbsoPS9rLcLw7yNbbYHhGCSYfXYjFFUTVLpGBxFgC1o1I0GoK9hZj2FSWy4lRuv0mb96kCXHsLgc9suJUjHMNnB0zQWnv1USTbDAIvSxmhH/72n5rx3y2swxtdhk9P5pkeyQyOjc0ZnX4m3Erxaql2e1NQ+h78zmoD7D/AK/7MZ8hxyhDuhlCyP232dZE6U4zRFgF7iYH3BfE5rdkS78ph9/ALNHXbLt9GfD/AFAID66n8rmx9PfPjEWn5p+5auo8vWw9N6WKOdb7ERK+SJcVoBiGeOWM0+Yeg3kpdTt1hVK8s3VQ5w+xEPmoqD6ni/pA7CzODW4lLc9YXLZQ+WXY+cXbiT7d8D/uXx9F5QcNlktuKpt+bmtA+K3lBtDRVLhd7Wg8DJKwW96VB9s0GIQ4lAJ4BLu3WIMkbmXHUXAUpcXsr5QtnMTw+ngixWnbNBCxr2yvDdQANCdCulZjeGSC7MQpHeEzT81II9ZtTguHzOhqsUpYpW6Fj5ACPUtbUeUfZWlbmlxqlaPElcB5dpqF9JhNpafPvHl5Dhe1hxXgdXXYHCTvpKMEcb2QH1aPK9sSTYbQ0d/E/csp8q2xwjc8Y9SOtya65PqXx27G9k+DpKP/APx/grBi2yBuQ+gP/wCsfcgPrCfy6bGwuI89lfb7Mf8AFa6T+kRsgwkNbiDyPs05PwK+P6/EcIdWSOpXx7o8BG0ABSMN2lpcOkdIaeaS4t2QPvUVB9as/pHbHG+duJMI+1SuUqH+kDsdOLtkxADqaRy+UW+UXDmnWjrg7plb96mU22tBW9lkU0f+aWN+LkqD7I2e8ouDbUTuhwwVcr2AOdeAtygm1zddavmjyPbe4LgNbXPxCpbEKljGMs5rtQSdbFfQUG0+C1LA+LFaJzSLg75v3pUG1UHEsYocHibLXVDII3Gwc/hdSKarp6yPeU08c0d7Zo3Bwv4hazaqop4Nn8TNRJE0ebSW3hAucp6qQaufynbJ0995jVO23j9y1rvLXsKx2U7Q01/A/cvmCuxHC4Cd/PSjuc4LWv2k2bZo+opj/oJ+SA+sh5adhnNJbtBSm3IXv8FqKj+kFsfB/wA6d/6rRr718wDHNlXXPnFJ/wD5/wAFpcSxfCnT3pZWPYfsWCgH1W/+kbs3YmGixGa32IbqjP6R2zhNn4dizD/2zl8r0O11Jh4e001Q+54tykfFTB5QqB2jqSrHqb96A+qoP6QGzMw/u2KN/WpiPiV32z20UO0lFHW0tLUx0srbskmDQHa2OgJPJfFVHtXQ1YFmOZfk+SMH95fSnky8o+zrcBw7CX1YgqIYzmMhGS9yfSB70qD1lFqm7TYK+2XFqE3/AE7fvWwp6qCsiEtPNHNEdA+NwcPaFIoZVo8Z2uwfZ+Xd4jVGF+XPrG4i3iBZbxedeWWvpIdjqmGSphZK6RnZLxmte/DigM1R5aNiqYEvxmLToCte3+kBsIXFrsVykfaZZfN1Tj+F0bbSVkWvR1/goEm2Ozz25H1bAf8AKd9yA+nqv+kBsVAwOhxA1B6R2FvaVo6j+kxs7GPoaOeboA8BfO8+0uznm0uSqhdIWmwEZv8ABcmzGaRrrxlx10yhQD6sb/SWoni7NmsSkZ9qNwI+Czw/0ksMkLQdnsXaTxuwCy+ZaLbeOgp9y6gqJGA3DxYfFSoNv6adwHmFS0dXOY34lKg+scG8tFBjddT0VNhGIecVDsrGuyC58SV6VC98kTXPjMbyLlhIJHdcL462E2xwui2kw7EKklkVPJnc0PY5xFjwseN7L6hwjyhbOYzSCohxOCIcCyd4Y5p7wSlQdOi1kW0eDzOa2PFKJ7nGwDZ2kk+1bNSAiIgCIiAIiIAiIgCIiAKx0rGC7ntaOpNlbUv3dNM/7LCfcvk7GcUNIYs0rnSzFwaXOJygAuPyss7S0Vmqs1sbGVtLVjifUGJ47h9JS1F8RpYphG4tzStuDY20XzxiHlPxkEiTaB7euRzQB/tC4uo2gnY7I6anY5xc0O1Ib2Qfjp4rkcXxieofIH1k7Wk2+ihsNAOFrdeK4pafGtKM9OHZNtSt2fI6rFdp8MxSolmxDF5aiZx7UnnLgT71zdZiGykhdnqZS7uneVxVbQ0dQ5z3YhV5sxBvC42PtUF+G0LW3OKzNufrwu9eitHS4vY/RlJdn2q2L1R0GITbJObeAzud1zOK1oxDBKcndCRx6FxB9xUL8E0rmB0eMR6m2V8Lgf3VczBon9puL0eugJYR8lP8uHH0fwU/hWyu1V6x+SWMcom+hC89xeVnZjjXENZRxG/2hc+9WR4BSFtzjVK5p6N1PtK2dHglHTAuZXROceJFlk9Pslv9GdEOy9JlhFLzXsRo8VkjLXNwqB5GtjENVtYNsa5hs3A6dv6py/JWfgwSXDay4Db3Lhr7FZJgkr3uEc4IAvcuNj70Wn2W+h0LsXSXuNxHtjib2ZRSwwDm4y3+SDaGd997Uxi/R5HwC52XA6rtBkpeR6vZZaubCMQaNRUOcBfKATa6tHS7OWEjK17OtrLFV8EdocXw8NIqZQ8f9w4W961VXX7OyXzyWv8Ap3lcdNgdeDc+ckn8wqO7CqyNoJMt9eyYz9y2VtB/8jzpWFrHGyZv6h+zmY2eSTw1P3LAKzB4fybHu/12WibS1bRmdwHJ0X8FmFJUvZmyNv8AnMt7rK3eLeZqE6pd26+BuW4/BGexRNeOV5Csh2gL3X8yp9eRaFpWYdVuOkbSejWFSoaGvge15g1AuLxm6nXW/mdMNFt5Xqz6G8hx90Dg9mFwSEcsgt8FuaXbivZbdYHGzlcdn4Bc1G7EXNAe17SdQBZunrWTzWpmu5zpmDqZO6/JZyt4RxYejW3/AG8n8HcQ7Y1sjbvooWOPHNL/AAV39Yqp/FzG/qvPxsuCfhUoGsstrZrl5N1gnpJsgcJywEXuWqn8mGNTO0ha2S+qD9D0Crx2jmAFSMxH2qp/3rS1Vds/MTvWsHjPIfmuNmwupaXWrLhvpG2gUN2HyafjbL3tqD9yvG3i9pztyWNm/RnR1f8AV1zvowD4OPzWulfhLT9G1xPQLVeY1LT/AHiAga9VY2nkdqZafj1AVlbRxqUlaRWMeRt24jRRjswuP/7D8llZjrG+jRsIHUkn4rU+YzAkZqYd28WQUD7DNLTa8LElT3sd4VtHBI3DMeY42dQwHxbqttRbXGks2LBKZx4Z7fwXO0VLNC4uG5LrclLdNVagPA/VKjvUSreL3HZ023Na/Q4Sxo65rfELb0+0s0rQXQwsPTe/wXmDhO46vlvbk+yZZdL73xc4lR3vEnv0e24Z5ScVwilNPBWyxxF2bLHMGi/qWoxra92Muz4jUyTECw3tU7Qe1eQzTvF255By0t9ygSSONvppW36j+Cd6VlpME70ei1VVgb/yjm3/ADZnH5rRVL8Cc42ufWT8VxznOvrUAeLSrSXjN9PFYdWH7lZWiK/yIbuR0Mk+EN0jY9x63srmYjTRi0VMHAfakK50TPA0khcOpbZZJJ5GtbdjDcXuBxU94h39nuOmjx1rOFDT+s3+N1mG0TT6VDTk+A+5ccKyTgIwR3uKzMqpgdIBr0umuX79bEd7S7dupBlZhtObfZIHyW5pfKDU1ORgw0NBNrmTQe5ecw19WQ2OKNrMo1JKlsqKohpkqMt9bNZce9VdpQPSOB6zSY1Vz+lBStPQy3+F16VhflTrdn9jjhkFI1lUwktqYpL5czr8CNdF81xYlNE1r4qjtcL5VMqNr8ZqYXsdijshFiwMaB7gq980yHbxdzXI9hrvKjtDUNAkr6o36TFo91lxuJ4rDWzOmq6gb12rnPqiSfXmXlLine truncated
|
||||
<div style="display:flex;flex-direction:column;gap:24px;width:1204px">
|
||||
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAQDAwQDAwQEBAQFBQQFBwsHBwYGBw4KCggLEA4RERAOEA8SFBoWEhMYEw8QFh8XGBsbHR0dERYgIh8cIhocHRz/2wBDAQUFBQcGBw0HBw0cEhASHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBz/wAARCAJrBBkDASIAAhEBAxEB/8QAHAABAAEFAQEAAAAAAAAAAAAAAAECAwQFBgcI/8QAUBAAAgEDAwIDBQUGAQgIBQIHAQIDAAQRBRIhBjETQVEUImFxgQcykaGxFSNCUsHRYhYkM3KisuHwFzRDU2OCkvElRHODwiYnNVRk0kaTlP/EABoBAQADAQEBAAAAAAAAAAAAAAABAgMEBQb/xABBEQACAQIDBAkDAgMHBAIDAQAAAQIDERIhMQRBUfATYXGBkaGxwdEiMuEF8RQjQlJicoKSotIVM7LiwvIkQ1Nj/9oADAMBAAIRAxEAPwD7+pSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKolmjgQvI6og82OBQFdK5nUutrCyDLDuuJO3u8Ln51yt/1pqN2uFdbdCPux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 truncated
|
||||
<ul style="font-size:27px;line-height:1.5;color:#16202B">
|
||||
<li>하면 곡선(R12,000) 코핑, 받침 10개(곡선교라 받침이 회전)</li>
|
||||
<li>스크립트 25종으로 만들고 검사 5종으로 확인 → 이 경험을 앱으로 일반화</li>
|
||||
<li>3D로 옮기며 도면 오류·불일치 12건, 철근 간섭 7곳을 확인</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">철근 색은 직경별: D32 빨강 · D29 주황 · D25 자주 · D19 초록 · D16 파랑 (Rhino 렌더, 콘크리트 반투명) · 출처: 요구사항 검토서, 도면 검토보고서</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>운곡교 P1이 시작점입니다. 앱을 만들기 전에 이 교각 하나를 스크립트 25종과 검사 5종으로 모델링했고, 이 경험이 앱의 판독 규칙과 검사 구조가 되었습니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-m-ul"><div class="slide-no">19 / 24</div><div class="fw"><div class="fi"><section id="s-m-ul" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:30px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">산외교 울산 P1 — 직접기초와 경사 코핑</h2>
|
||||
<div style="display:flex;flex-direction:row;gap:40px">
|
||||
<img src="data:image/jpeg;base64,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 truncated
|
||||
<div style="display:flex;flex-direction:column;gap:24px;width:1204px">
|
||||
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAQDAwQDAwQEBAQFBQQFBwsHBwYGBw4KCggLEA4RERAOEA8SFBoWEhMYEw8QFh8XGBsbHR0dERYgIh8cIhocHRz/2wBDAQUFBQcGBw0HBw0cEhASHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBz/wAARCAKZA4sDASIAAhEBAxEB/8QAHAABAAIDAQEBAAAAAAAAAAAAAAQFAQMGAgcI/8QAVhAAAQMDAgQDBQYCBgYIBAENAQIDBAAFERIhBhMxQSJRYQcUMnGBFSORobHBQtEWJDNSYuFDcoKisvAXJTVjc5LC8TQ2U3WzJnQIN5PSJ0RFdoOUo//EABsBAQADAQEBAQAAAAAAAAAAAAABAgMEBQYH/8QAQREAAQMCBAIJAwIEBAYCAwEAAQACEQMhBBIxQVFhEyJxgZGhscHwBTLRFOEjQlLxM2JyggYVkrLC4lOiJEPSY//aAAwDAQACEQMRAD8A/f1KUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKUoiUpSiJSlKIlKgzrzAtoJlSmmiBnSTv+HWqGX7QLYxqSyh59fYABIV9SaguA1UwV1lK+eyPaS4QeRASnbOXF6v0x51pX7QLh8XKjhBTn4Tt+JqvSNU5SvpFK+R3H2myoISZE2OzsfDywCs+idyfLArir7/+kNJtcN55h9lYbVoKpBbQdR2wGxlZwQdiB336VHStVm0nO0X6RqouXFFptT4jyJiVTCMiKyC68oejaQVflX5bvntn4ruYlFRkKgsRdZcShcZrWU5GQgFZ7bKVg53HWuMcvtyucy0RJ0l6VFbDklLkZgRoxUdBClq5AKsdCcnqNxk5g1QtBhzuv0vcPb7YLZcVRH4U5SklaShnQ48koIBKmwrITk9c7YOQKkj288Ise9m4PPwUxinJcCHNQUMpI5SldemOvpX5ag8VKbetzTK40Nxcx91blpUGuYCVYC3UuIzk4GfBsKs43FEtF+nPAfZUucGvvIzjsp2UhJVkkl5wDOQDkKAyOmar0q0NAL9TNe1/hNTcp2RMkw2YxGt2XDeaRgjZWopwAfXHQ1YMe0rhN/m5vsRnlEBRkq5PUZBGvGQfMbV+SZV/P9JLiTa/cJMpLCeZdGhJ1jUsK0pXHUBnGwBA+e4G6Tf7YbvegmI04HUR2/d7whpljZS9aktBLWQNsZAJP8VW6RU6AL9fW/jThy6rdRBv1skraVoWlqUhRScZxsfKrSPcIktTqGJTLqmjpWG3AopOM4OOm1fi5d6td4ut8bZ5t0QuMwyYLri2GdWpYOFiWTgZHTUd/hHeQt60qu15aZT7ylqEyhUC1trS42sFYKeaW3DkbeLKeo64oKig0F+0AQc4IOOtZr8dszEW673JsXORbo6oDa1MwnlmapQKhq2jo8QGMkg7YyrapaeJp9ruUgscSyYMVcBDjr0y5pekIWCoAlBlpTq3G2/bw1bOo6Hmv1zSvyzG494jiS4bzPFFwdgzYev3yU0lOVhQSkpYAdJJ1bgBOdutXULjP2is3CY39oIeMKCZUhU5gNJ0oKNS0MlpC/hWSASAojAVsaZ1XoTxX6MpXMcLSLt77eod2nszVMOtrYcaj8kBtbYOnGo5woK3zXT1dZmyUpSihKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpSlESlKURKUpREpUWZc4dvQVypLbQ/xK3/CuYne0CK2k+5sLfPZSzoSf3qC4DVSBK7Goc26w7cgrlSW2h5E7n6da+ZXPjK5TA6gyQyjoEtDSfxzkVx1yv9viKIly0qkbnlIPMdJ6YwN6p0k/aFJAF3FfV7h7Q4jQKYbDjy+mV+EfzNcpcOL7pNVpXL5Sc4LbPg6+Z69PWvnT3E8t1xUaFGZhqA/tp7gSonHZAyfxrm77cIzTzLVxvQmLWCpbWooa1dglLeVKJPr39aiHHUwqGq0Wbcrt7hxZa4j2l6e2taseFtRWsH1rQ/fpwZdmNW5pMNpIeUl10a1pSd8BOcEeRr5jfeMRFtIt/uDNujyiOVpThS0jr4RkjqM6vP61DY4hsb0SQu5qWZSUaAjZpO+cK0YBI36nNWaxkLGo6tNgQOz9ivol24+biyW2IUB2c8VaEBCsAnTqOAlKjpAzvjrmvnF/9p9+fZlNx2Fwm0FWlKEBsYCtJKlq3GCMbaTkVQp4nt7Eq3+5OAPMOnnuJdJzlKwlRSCDtqI61qud3hLRKjszpkhTiJAGp3lDUpSVpOkA9ycj8+tQ5rQer+V0UDUcP4g9vb3WUXhbVxhyxdJXvJT/AFhljJU4ruCtL2VdQASR36ViNcksWth+KpFue97SZAXz3nV+PqNSVJGAeni3qU9xHIW9a0NFR5SVIAkFJQFEpOQMbHKO5OarZU1ozIq3ElalyXFrafjoDQCjq2wepI6dMGqup3WtKv1QYAHaOe2qjm6c2bLU02yGH0IQ6Lmlpw5wclIUhOkb9BpxjfyrbHVcbkiG6w1HkoX9zyXFtpbwE74RrGR4epz0G9LlPjqu8eQ3b0hKlqGlDZbQpJSUjZJ2xkbA4+dEzLUyyz7xAdcQt9JWpMohK0k4KdPY7j8KGnqArNrEgOIMH5xlb7fcLhIWtEVh+fDZdwiDEdeCGipKh1CjgnUehHSpKr07bLiuO/byxDRH5fuzGlT6Rg+Ilxkn/wBu1UckwWI7aIzDzTodSpTx05AyAoBIT/rHOf8AOynRbBDjMv26TPQlOtcjmNBGtRTtgJxud86s7VXIJsrmqQAXAieIP4W5i8223OtvIiJbiRWysl5DD7oydlBQ06SME5ya2w7xGVc4spSJMlooy7MlocHJIJwQEPH+9jokda82yQ1DusqZEvEmJ90tIdfSvWoY8KdOo46dOwFaGIig+q6P3uM/IGtxAkNhQySk5CSghJUVK/DtTojwVf1DbyfGymv3qBInRjNlyLsZaR96outNNAKJCSlSXNSe++qk2TBU8RLuEd8SCEo+z+UhbYB2ClFlOPn4e9VsxudLtzN6cRby2w0XUNMNNtnAUn4kpAJOT0VnbVV0zw+i23VyHIfizmXoiVMtR5DrSBk/CkJyoqH4YNQKZKl+Ia0E8PnzRbooVcb281bC007IQAlds0LdKUn4nClxIB9Tn51ZwrbMdvNsub9xMRqUpUV1Tb61PjQ4EafvVKSFBRAOMjGd+hquixXp3EFmVFtERuTOhgltSW+WpOjdWn+E+HOPy3rEyCzFhphuwHw+mUtCyHwoj71Cs4BB2SVDpjf02sKQ4rF2LdsIHE944Lr02xm0Xq5y45QqVEC3G5DmVPJ08hafGckYyv6V0l6u1ye46uajKd5j3Dq2Dk6isKWrYE58q+ZvNyXVyFabiw25FAK0lS+ZqQN/QHSCD+PYC8nlpjiRiTHuFwbbXHLch2QjDgyCfhUN+3b1zU9EdAVT9UPudbtX160cZXpq9z3TNGXYsVWFISCo+MYwR22/H0rrG+PrulYCgyRnGVo6n6V8IsN3dekkqvrUb+rtt65CUlR05GANtgSTv5jrVizxDMgtymnLpBkNtL0tKebJLvTcaVHbJ/I1bo38fVY/q6epFu78r7cPaJPQshUZhQHXYg/rUxHtFUMhcBJwcEpc2/Svikq9cQItypbbEBCWgVkajlaAMkADIz37VKVxTJjrZTItwU4sApSzICldO6cA0yv2Kt09OJII7l9pR7RY2cOQ3U/6qwr9qko9oFtV1akJ/wBkfzr4geKZsa4MRJdjfCZCVFtTakqUSnqMZ7D5VvHGUEPlpcael7TqDSmDqx8qj+Ip6alqTHivuTfG1oXjLy0Z/vNmpKOK7Q4cCagH/ECP2r4FG43tcgL55cjLQrSW3WlJIO3Xy6itj/GFoioW4ua2WwcZAJx9KmanBT0tL+pfoJF8tqzgTo+f/EFSETorvwSGVf6qwa+DN3mC8gFEyMpJ7pWD+VbhOiJkoZMhoPLGUpzgn1FRnduFbqnQr70FJPQis5r4hz3GT4XVhXbCs1vbu1wbzy5r+391Z/nUdLyVsi+0Ur4+1xRdGiMTn8+SlAj86mN8YXkYPvSVD1bT/Kp6UJkK+qUr5m1x1dUnCyyr/WRj9KkD2gz0HxxI6v8AV1Cp6RqjKV9EpXCo9oasDXbxnvh3H7Vvb9okYnDkN1J/wqBqekbxTKV2dK5dHHltVjU3IT/sA/vUhHGdoX1fWn/WQanO3iogroKVTt8U2hzpObB8jkVJReLine truncated
|
||||
<ul style="font-size:27px;line-height:1.5;color:#16202B">
|
||||
<li>말뚝 없는 직접기초, 코핑 끝면 300 경사·상면 130 단차·평면 모서리 R500</li>
|
||||
<li>철근 생성기·검사기를 울산 전용으로 신설(G2~G4), 코핑 철근은 철근별 중심선 방식의 시작</li>
|
||||
<li>도면이 불명확한 곳은 [추론]으로 표시하고 확인 대기 (예: B4 상면 끝 철근 3,650 대 3,600)</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">철근 색은 직경별: D32 빨강 · D29 주황 · D25 자주 · D19 초록 · D16 파랑 · H22 청록 (Rhino 렌더, 콘크리트 반투명) · 출처: 미해결 목록 #22</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>두 번째는 산외교 울산입니다. 기초가 직접기초이고 코핑 끝면과 평면 모서리 형상이 다릅니다. 여기서 철근 생성기와 검사기를 형식에 맞게 추가했고, 코핑 철근을 철근별 중심선으로 만드는 방식을 처음 썼습니다. 도면이 불명확한 곳은 추론이라고 표시해 확인 대기로 남겼습니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-m-ra"><div class="slide-no">20 / 24</div><div class="fw"><div class="fi"><section id="s-m-ra" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:30px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">Ramp-A교 P1 — 기초판 없는 단일 말뚝</h2>
|
||||
<div style="display:flex;flex-direction:row;gap:40px">
|
||||
<img src="data:image/jpeg;base64,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 truncated
|
||||
<div style="display:flex;flex-direction:column;gap:24px;width:1204px">
|
||||
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAQDAwQDAwQEBAQFBQQFBwsHBwYGBw4KCggLEA4RERAOEA8SFBoWEhMYEw8QFh8XGBsbHR0dERYgIh8cIhocHRz/2wBDAQUFBQcGBw0HBw0cEhASHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBz/wAARCAKAA58DASIAAhEBAxEB/8QAHAABAAEFAQEAAAAAAAAAAAAAAAUBAwQGBwII/8QAURAAAQMDAgQDBQYDBQYDBwALAQIDBAAFERIhBhMxQSJRYQcUcYGRFSMyobHBQlLRJDNi4fAWQ3KCorIlkvEIFyY0NVPCRGNkcydFVHSDk+L/xAAbAQEAAwEBAQEAAAAAAAAAAAAAAQIDBAUGB//EAEIRAAIBAgMECQIEBAUEAgIDAAABAgMREiExBEFRYRMicYGRobHB8AXRFDJC4SNSYvEVJDNygjSSssJD4gaiJdLj/9oADAMBAAIRAxEAPwD7+pSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKUApSlAKUpQClKxZlyiW9GuTIbaH+I7/SgMqlaZP4/ZTlMBhTp7OOeFP06/pUA5xld1uFQfSn/CEDArN1IosoNnUqVy9HG14TjLjSvQtisprj64jGuPFWO+Mj96dLEnAzo1K0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 truncated
|
||||
<ul style="font-size:27px;line-height:1.5;color:#16202B">
|
||||
<li>단일 현장타설말뚝(Ø2.35 → Ø2.5)과 하면 R5,000 나팔형 코핑, 받침 2개(평면 회전)</li>
|
||||
<li>말뚝 철근망과 코핑 철근 449본을 같은 방식으로 생성</li>
|
||||
<li>새 형식이 앱의 숨은 결함을 드러냄: 말뚝 묶음이 확정 대상에서 빠져 G1·G3가 막힘 → 수정</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">철근 색은 직경별: D25 자주 · D19 초록 · D16 파랑 · H35 보라 외 (Rhino 렌더, 콘크리트 반투명) · 출처: 판독서 v0.1.07, 미해결 목록 #23</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>세 번째는 Ramp-A교입니다. 기초판이 없고 단일 현장타설말뚝이며, 코핑은 나팔형입니다. 말뚝 철근망과 코핑 철근을 같은 방식으로 만들었습니다. 여기서 앱의 숨은 결함이 드러났습니다. 말뚝과 말뚝 철근망이 앱의 확정 대상에서 빠져 있어서, 엔진을 직접 실행할 때는 보이지 않던 문제가 앱 화면에서 단계를 막았습니다. 새 형식을 넣어 봐야 보이는 종류의 결함이었습니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-m-ok"><div class="slide-no">21 / 24</div><div class="fw"><div class="fi"><section id="s-m-ok" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:30px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">옥성교 P1 — 평면 사각 18°와 가장 많은 철근</h2>
|
||||
<div style="display:flex;flex-direction:row;gap:40px">
|
||||
<img src="data:image/jpeg;base64,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 truncated
|
||||
<div style="display:flex;flex-direction:column;gap:24px;width:1204px">
|
||||
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAQDAwQDAwQEBAQFBQQFBwsHBwYGBw4KCggLEA4RERAOEA8SFBoWEhMYEw8QFh8XGBsbHR0dERYgIh8cIhocHRz/2wBDAQUFBQcGBw0HBw0cEhASHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBz/wAARCAJoBBcDASIAAhEBAxEB/8QAHQAAAQUBAQEBAAAAAAAAAAAAAAECAwQFBgcICf/EAE8QAAIBAwMCBAMFBQUECAUBCQECAwAEEQUSIQYxEyJBURRhcQcygZGhFSNCscEkUtHh8DNDYnIIFiVTgpKy8TQ1Y6LCF0RzJjZUZEWD0v/EABoBAQADAQEBAAAAAAAAAAAAAAABAgMEBQb/xABAEQABAwIEAwYFAwMDBAEEAwABAAIRAyESMUFRBGFxEyKBscHwMpGh0eEFFEIjUvFicoIVM8LikiRDstI0ovL/2gAMAwEAAhEDEQA/APv6iiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKKKKIiiiiiIooooiKK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 truncated
|
||||
<ul style="font-size:27px;line-height:1.5;color:#16202B">
|
||||
<li>강관말뚝 25 + 평면 사각 18° 코핑, 받침 10개를 대좌 5개가 공유</li>
|
||||
<li>철근 1,899본: 코핑 철근은 단면을 만든 뒤 사각만큼 전단 변환(x' = x − tan18°·y)</li>
|
||||
<li>재료표 수량이 해독 열쇠: 스터럽 106곳 = 39 + 27 + 40, 정면 점 117 = C18 117본</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">철근 색은 직경별: D32 빨강 · D29 주황 · D25 자주 · D19 초록 · D16 파랑 · D22 청록 (Rhino 렌더, 콘크리트 반투명) · 출처: 판독서 v0.1.07, 미해결 목록 #24</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>네 번째는 옥성교입니다. 평면이 사각 18도라서 코핑 철근을 단면에서 만든 다음 같은 각도로 전단 변환했습니다. 철근은 1,899본으로 가장 많습니다. 판독에서 재미있었던 것은 재료표 수량이 해독의 열쇠였다는 점입니다. 스터럽 연직선이 106개인데 재료표의 스터럽 수량 39, 27, 40을 합친 값과 같았고, 정면 점 117개는 C18 수량 117과 같았습니다. 이렇게 작도와 재료표가 맞는지 확인하며 읽었습니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-lessons"><div class="slide-no">22 / 24</div><div class="fw"><div class="fi"><section id="s-lessons" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:32px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">모델을 하나 더할 때마다<br>앱의 숨은 한계가 드러났고, 일반화됐습니다</h2>
|
||||
<table style="font-size:24px;color:#16202B">
|
||||
<tr><th style="width:17%">교각</th><th style="width:43%">드러난 앱의 한계</th><th style="width:40%">조치</th></tr>
|
||||
<tr><td>운곡교 P2</td><td>말뚝 X·Y 간격, 마크별 띠철근 반지름이 운곡교 P1 값에 고정</td><td>엔진 일반화 2건 수정</td></tr>
|
||||
<tr><td>산외교 울산 P1</td><td>표 판독·치수 입력이 운곡교 표 형식에 맞춰져 있음</td><td>범위 문자·치수 사슬·표 후보값 보완(5건 중 4건 해소, 1건 일부)</td></tr>
|
||||
<tr><td>Ramp-A교 P1</td><td>말뚝·말뚝 철근망이 확정 대상에서 빠져 G1·G3가 막힘</td><td>확정 대상 보완</td></tr>
|
||||
<tr><td>옥성교 P1</td><td>솔플레이트 표에 받침 표 행이 끼어 머리행 오독, 철근 생성기가 게이트를 구분 못 함</td><td>머리행 건너뛰기 규칙, 엔진이 생성기에 게이트 값 전달, 검사기 신설</td></tr>
|
||||
</table>
|
||||
<div style="display:flex;flex-direction:column;gap:10px;background:#16202B;padding:28px 44px;border-radius:20px">
|
||||
<p style="font-size:28px;line-height:1.5;color:#F6F5F1">한 개 교각에서 만든 도구는 <b>다음 교각에서 반드시 한 번 깨집니다.</b> 깨진 곳을 고칠 때마다 판독 규칙이 일반화되고, 회귀 시험으로 앞 교각이 그대로인지 확인합니다.</p>
|
||||
</div>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">출처: 미해결 목록 #19·#23·#24, 앱 요구사항 검토서 · 남은 일반화 과제: 템플릿 판독, 객체 근거 문구, 보고서 항목명</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>교각을 하나 더할 때마다 앱이 한 번씩 깨졌습니다. 운곡교 P2에서는 운곡교 값에 고정된 곳이 나왔고, 울산에서는 표 판독이, Ramp-A에서는 확정 대상이, 옥성교에서는 표의 머리행 판독과 게이트 구분이 문제였습니다. 그때마다 고치고, 앞 교각이 그대로인지 회귀 시험으로 확인했습니다. 이 과정이 일반화였습니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-future"><div class="slide-no">23 / 24</div><div class="fw"><div class="fi"><section id="s-future" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#F6F5F1;color:#16202B;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:96px 128px 160px;display:flex;flex-direction:column;gap:36px">
|
||||
<h2 style="font-size:56px;font-weight:700;line-height:1.25;letter-spacing:-1px">앱의 향후 계획 (제안)</h2>
|
||||
<div style="display:flex;flex-direction:row;gap:28px">
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:16px;background:#FFFFFF;padding:36px;border:1px solid #E1DED6;border-top:8px solid #1A6AA0;border-radius:20px">
|
||||
<p style="font-size:26px;font-weight:700;color:#1A6AA0">먼저 · 판독 확대</p>
|
||||
<ul style="font-size:27px;line-height:1.5;color:#16202B">
|
||||
<li>표 3종 밖의 치수 사슬·철근 상세를 템플릿으로 읽기</li>
|
||||
<li>남은 일반화 과제: 객체 근거 문구, 보고서 항목명</li>
|
||||
<li>Rhino 자동 실행 정체 원인 규명</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:16px;background:#FFFFFF;padding:36px;border:1px solid #E1DED6;border-top:8px solid #1A6AA0;border-radius:20px">
|
||||
<p style="font-size:26px;font-weight:700;color:#1A6AA0">다음 · 검사 확대</p>
|
||||
<ul style="font-size:27px;line-height:1.5;color:#16202B">
|
||||
<li>철근 간 간섭 정량 검사(지금은 위치 파악만)</li>
|
||||
<li>갈고리·겹이음·커플러 모델링</li>
|
||||
<li>일괄 실행에도 재로드 검증 포함</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="flex:1;display:flex;flex-direction:column;gap:16px;background:#FFFFFF;padding:36px;border:1px solid #E1DED6;border-top:8px solid #1A6AA0;border-radius:20px">
|
||||
<p style="font-size:26px;font-weight:700;color:#1A6AA0">그다음 · 범위 확대</p>
|
||||
<ul style="font-size:27px;line-height:1.5;color:#16202B">
|
||||
<li>측량좌표·선형 반영, 다른 산출 형식(IFC 연계) 검토</li>
|
||||
<li>T형 외 교각 형식</li>
|
||||
<li>도면 오류 목록을 설계사 회신에 따라 정정·재판독하는 절차</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<p style="font-size:28px;line-height:1.5;color:#3C4753">현재 앱은 <b>반자동 MVP</b>입니다. 위 계획의 순서와 범위는 담당자 확정 전의 제안입니다.</p>
|
||||
<p style="position:absolute;left:128px;bottom:64px;width:1664px;font-size:24px;color:#5B6673">출처: 미해결 목록 #17·#18·#19, 사용설명서 v0.2.07 §1.2·§9</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>앞으로의 계획은 세 단계로 제안드립니다. 먼저 판독을 넓혀 표 밖의 치수와 철근 상세도 읽고, 남은 일반화 과제를 정리합니다. 다음으로 검사를 넓혀 간섭을 정량으로 검사하고 갈고리와 겹이음도 모델링합니다. 그다음에 측량좌표, 다른 산출 형식, T형 이외 형식으로 범위를 넓힙니다. 순서와 범위는 아직 확정이 아니라 제안입니다.</p></details></div>
|
||||
<div class="slide-wrap" id="w-closing"><div class="slide-no">24 / 24</div><div class="fw"><div class="fi"><section id="s-closing" style="width:1920px;height:1080px;box-sizing:border-box;position:relative;overflow:hidden;background:#16202B;color:#F6F5F1;font-family:'Noto Sans KR','Malgun Gothic',sans-serif;padding:128px;display:flex;flex-direction:column;justify-content:center;gap:56px">
|
||||
<h1 style="font-size:72px;font-weight:700;line-height:1.25;letter-spacing:-2px;color:#F6F5F1">AI는 도면을 모델로 옮기고,<br>사람은 도면이 맞는지 판단합니다</h1>
|
||||
<div style="display:flex;flex-direction:column;gap:20px;border-top:4px solid #FF7F0E;padding-top:36px">
|
||||
<p style="font-size:30px;font-weight:700;color:#FF7F0E">논의하고 싶은 것</p>
|
||||
<ul style="font-size:34px;line-height:1.5;color:#F6F5F1">
|
||||
<li>설계 검토에 3D 모델 기반 간섭·피복 검토 단계를 넣을지</li>
|
||||
<li>재료표 확정 뒤 작도를 역대조하는 단계를 둘지</li>
|
||||
<li>다음에 모델링할 교각과 앱 적용 범위</li>
|
||||
</ul>
|
||||
</div>
|
||||
<p style="font-size:26px;color:#B8C2CC">심영표 · 2026-10-14</p>
|
||||
|
||||
</section>
|
||||
</div></div><details class="notes"><summary>발표자 노트</summary><p>정리합니다. AI는 도면을 모델로 옮기는 일을 빠르고 일관되게 하지만, 도면이 맞는지는 사람이 판단합니다. 오늘 보여 드린 도면 오류와 간섭 목록은 설계사 확인이 필요한 초안입니다. 세 가지를 논의드리고 싶습니다. 설계 검토에 3D 간섭·피복 검토를 넣을지, 재료표 확정 뒤 작도를 역대조하는 단계를 둘지, 그리고 다음에 모델링할 교각과 앱 적용 범위입니다.</p></details></div>
|
||||
</main>
|
||||
<footer class="doc">
|
||||
<p>※ 운곡교 P1 도면 오류·간섭 판정은 도면 검토보고서 v0.1.01(담당자 확정 2026-10-08)을 따르며 설계사 회신에 따라 바뀔 수 있습니다. 수치는 앱 게이트 보고서(2026-10-14) 기준 자체 검증입니다.</p>
|
||||
<table><tr><th>버전</th><th>수정일</th><th>수정자</th><th>주요 변경 내용</th><th>비고</th></tr>
|
||||
<tr><td>v0.1.00</td><td>2026-10-14</td><td>심영표</td><td>발표자료(슬라이드 24장) HTML 문서판 신규 작성</td><td>사용자 지시 "html 문서로 만들어줘"</td></tr></table>
|
||||
</footer>
|
||||
<script>
|
||||
(function () {
|
||||
function fit() {
|
||||
document.querySelectorAll('.fw').forEach(function (fw) {
|
||||
var s = Math.min(1, fw.clientWidth / 1920);
|
||||
var fi = fw.firstElementChild;
|
||||
fi.style.transform = 'scale(' + s + ')';
|
||||
fw.style.height = (1080 * s) + 'px';
|
||||
});
|
||||
}
|
||||
window.addEventListener('resize', fit);
|
||||
window.addEventListener('beforeprint', function () { document.querySelectorAll('.fw').forEach(function (f) { f.style.height = '1080px'; f.firstElementChild.style.transform = 'none'; }); });
|
||||
window.addEventListener('afterprint', fit);
|
||||
fit();
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,276 @@
|
||||
# 운곡교 교각(완도방향 P1) 도면 검토보고서 — 3D 모델링 과정 확인 사항
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2026-10-08 | 심영표 | 신규 작성 | 초안 `[미확정]` — 검토자 확정 전 |
|
||||
| v0.1.01 | 2026-10-08 | 심영표 | 담당자 검토 확정, `[미확정]` 해제 | 확정 (사용자 회신 '확정') |
|
||||
|
||||
> 상태: **확정** (2026-10-08 담당자 심영표). 판정은 설계사 회신에 따라 변경될 수 있습니다.
|
||||
|
||||
---
|
||||
|
||||
## 1. 개요
|
||||
|
||||
### 1.1 목적·대상
|
||||
|
||||
운곡교 교각(완도방향 P1)을 도면 기준 3D 모델(콘크리트, 받침부, 철근)로 작성하면서 확인한 도면 간 불일치·누락 사항을 정리하고, 도면 보완과 재료표 정정을 요청하기 위한 보고서입니다.
|
||||
|
||||
| 구분 | 도면번호 | 도면명 | 본 보고서 약칭 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 교각도(1) | C0050205-025 | 운곡교 교각도(1)(완도방향 P1) — 평면도·정면도·단면도·단면 A-A~E-E | D1 |
|
||||
| 교각도(2) | C0050205-026 | 운곡교 교각도(2)(완도방향 P1) — 기초 평면도·교량받침 상세·솔플레이트 상세·ELEVATION TABLE·주철근 조립도 | D2 |
|
||||
| 교각도(3) | C0050205-027 | 운곡교 교각도(3)(완도방향 P1) — 철근 재료표(SD400·SD500)·가공도·커플러 상세·기초 조립용 철근 | D3 |
|
||||
|
||||
작성 모델: `Code/교각모델링/출력/실행_운곡교P1교각모델_2026-10-08_v0.1.09.3dm` (3,190객체 — 콘크리트 기초·기둥·코핑·버림·말뚝 30, 받침 대좌·패드 각 10, 교량받침·솔플레이트 각 10, 철근 1,513본)
|
||||
|
||||
### 1.2 검토 방법
|
||||
|
||||
- 원본 DWG를 DXF로 변환하여 선·문자·치수 좌표를 전수 추출하고, 도면 간(평면·정면·단면·상세) 및 도면–재료표 간 값을 대조했습니다.
|
||||
- 모델은 부재별로 도면 치수와 재료표 값을 기대값으로 하는 자동 검사(콘크리트 172항목, 철근 234항목, 받침부 184항목)로 확인했습니다. 검사는 작성자 자체 검증입니다.
|
||||
- 도면만으로 결정할 수 없는 항목은 담당자 판단으로 모델에 적용했고, 본 보고서에 그 내용을 함께 적었습니다(2장 "모델 적용" 열).
|
||||
|
||||
### 1.3 판정 기준
|
||||
|
||||
| 판정 | 정의 |
|
||||
| :--- | :--- |
|
||||
| **오류** | 같은 도면 안 또는 도면끼리 값이 모순되어 둘 중 하나가 틀림 |
|
||||
| **불일치** | 도면 작도·치수와 재료표(D3)·표(D2)의 값이 다름 |
|
||||
| **누락** | 형상·배치 결정에 필요한 정보가 도면에 없음 |
|
||||
| **확인 필요** | 표기는 있으나 해석이 둘 이상 가능하거나 차이가 경미함 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 도면 오류·불일치
|
||||
|
||||
### 2.1 기둥
|
||||
|
||||
| No. | 판정 | 위치 | 도면 값 A | 도면 값 B | 모델 적용 | 영향 |
|
||||
| :-- | :-- | :--- | :--- | :--- | :--- | :--- |
|
||||
| E-01 | 오류 | 기둥 띠철근 P4·P5 간격 | D1 정면도·단면 C-C/D-D 표기 `H19 @100` | D1 정면도 치수 `8@120=960`, `22@120=2.640` | @120 (치수 사슬이 전체 높이 17.203, 재료표 본수 9·22와 일치) | 띠철근 위치·구간 길이 |
|
||||
| E-02 | 불일치 | 주철근 상단 | D1 정면도 작도: P1 상단 EL 43.011, **P2는 기둥 상단 EL 40.411에서 종료** | D3 재료표: P1 a 16.213 + 갈고리, P2 16.553 → 둘 다 EL 43.061 | 재료표(EL 43.061) | P2 코핑 정착 2.65 m 차이 |
|
||||
| E-03 | 확인 필요 | 주철근 반지름 | D1 단면 C-C 치수 `125`, `875` (철근 중심까지) | D1 단면 C-C 작도 점 중심 870.5(바깥 P1)/825.5(안쪽 P2) | 작도 870.5/825.5 | 치수 875를 쓰면 띠철근(R 897) 내면과 3.5 mm 간섭 |
|
||||
| E-04 | 확인 필요 | 띠철근 반지름 | D3 R 897 (2π×897 = L 5,636) | D1 단면 작도 898, 정면도 점 902 | 897 | 경미 |
|
||||
|
||||
### 2.2 확대기초
|
||||
|
||||
| No. | 판정 | 위치 | 도면 값 A | 도면 값 B | 모델 적용 | 영향 |
|
||||
| :-- | :-- | :--- | :--- | :--- | :--- | :--- |
|
||||
| E-05 | 불일치 | B12 (S16) 본수 | D1 정면도 중앙 4단(EL 26.758~27.958) 작도 위치 **28곳** | D3 재료표 **34본** | 작도 28본 | 재료표 6본(46.8 m, 0.073 t) 과다 또는 작도 누락 |
|
||||
| E-06 | 불일치 | 상면 철근 높이·피복 | D1 정면도 우측 치수 `150`, `9@200=1.800`, `150`, `100` → 상면 철근선 기초 하면 +2,100 (피복 100) | D1 정면도·단면도 작도 점: B5(S29) 중심 +2,127, B1(S25) +2,073 | 작도 점 높이 | B5 피복 58.5 mm, B6 다리 57.5 mm (표기 100 미달) |
|
||||
|
||||
### 2.3 코핑
|
||||
|
||||
| No. | 판정 | 위치 | 도면 값 A | 도면 값 B | 모델 적용 | 영향 |
|
||||
| :-- | :-- | :--- | :--- | :--- | :--- | :--- |
|
||||
| E-07 | 불일치 | 스터럽 C9·C10·C11 폭 | D3 a = **1.407** | D1 단면 A-A 작도: 스터럽 3개 폭 **1,160 / 1,740 / 1,160** (다리 위치 100·680·1,260·1,840·2,420·3,000) | 작도 폭 | 재료표 길이와 본당 −107 ~ −505 mm 차이 |
|
||||
| E-08 | 불일치 | 수평 폐합근 C12·C13 폭 | D3 b = **1.407** | D1 단면 A-A 작도: 폭 **1,106 / 1,686 / 1,106** (스터럽 안쪽) | 작도 폭 | 위와 같은 유형 |
|
||||
| E-09 | 확인 필요 | 재료표 치수 기준 | D3 C9~C13의 b·a 범위 양끝(2,956/1,376, 12,228/3,151 등) | D1 작도 중심선 길이 + **54.3** 과 모든 끝값이 일치 | 작도 중심선 | 재료표 치수의 측정 기준(외면·중심) 명시 필요 |
|
||||
|
||||
### 2.4 받침부
|
||||
|
||||
| No. | 판정 | 위치 | 도면 값 A | 도면 값 B | 모델 적용 | 영향 |
|
||||
| :-- | :-- | :--- | :--- | :--- | :--- | :--- |
|
||||
| E-10 | 불일치 | 받침 대좌 높이(3500 kN 측) | D1 단면도 작도 **169.4** | D2 ELEVATION TABLE h1 **164** | 표 164 | 5.4 mm |
|
||||
| E-11 | 불일치 | 후열(2800 kN) 받침 패드 평면 크기 | D1 평면도 작도 900 × **840** (전열과 같은 크기) | D2 TABLE B = 540 → (A+200)×(B+200) = 900 × **740** | 표 기준 | 평면도가 받침별 B를 반영하지 않음 |
|
||||
| E-12 | 확인 필요 | 솔플레이트 두께 | D2 솔플레이트 TABLE T1 38 / T2 22 | 같은 표 S = −1.901 ~ −1.910 %, L 800, T 30 → 양끝 37.6 / 22.4 | S 기준 | ≤ 0.4 mm (표 반올림으로 추정) |
|
||||
|
||||
> 참고: D2 ELEVATION TABLE의 EL.'X'는 코핑 상면 + h1 + h2 (10개소 오차 ≤ 1 mm)로 정합합니다. E = h1+h2+h3+h4로 해석하면 211 mm 차이가 생기므로 표에 EL.'X'의 기준면 정의가 필요합니다(4.2).
|
||||
|
||||
---
|
||||
|
||||
## 3. 개선방안
|
||||
|
||||
| 원인 유형 | 해당 항목 | 개선방안 |
|
||||
| :--- | :--- | :--- |
|
||||
| 도면 표기와 치수 사슬의 이중 기재 | E-01 | 간격은 치수 사슬 한 곳에만 기재하고, 라벨에는 마크·직경만 표기하거나 사슬과 자동 연동 |
|
||||
| 작도와 재료표의 독립 작성 | E-02, E-05, E-07, E-08, E-10, E-11 | 재료표 확정 후 작도 수량·길이·폭을 역대조하는 검토 단계 신설. 마크별 "작도 본수 = 재료표 본수" 체크리스트 운용 |
|
||||
| 치수 기준(외면·중심) 미표기 | E-03, E-06, E-09 | 재료표 치수의 측정 기준과 피복 기준(철근 외면/중심, 상·하·측면별)을 일반 노트에 명시 |
|
||||
| 대표 작도 | E-11, 5.3 | 받침별로 다른 치수는 표 참조 표기를 붙이거나 개소별로 작도 |
|
||||
| 평면·정면 절반 작도 | 5.3 | 비대칭 구조(좌·우 선단 높이 1,500/1,787, 소단 EL 43.411~43.698)는 전체 작도 또는 비대칭 부위 별도 상세 |
|
||||
| 2D 검토의 한계 | 4.3 | 3D 모델 기반 간섭·피복 검토를 설계 검토 절차에 포함. 본 모델(v0.1.09)과 검사 스크립트를 재사용 가능 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 추가되어야 할 사항
|
||||
|
||||
### 4.1 좌표·선형
|
||||
- 교각 중심의 평면 측량좌표와 교량 선형(측점·방위각). 현재 도면에는 교각 중심 좌표가 없어 모델은 교각 중심을 원점(0, 0)으로 작성함
|
||||
- 받침 10개소의 중심 좌표표(평면도는 일부만 작도됨, 5.3)
|
||||
|
||||
### 4.2 방향·기준 정의
|
||||
- 솔플레이트 경사 S(%)의 방향(교축방향 어느 쪽이 두꺼운지). 모델은 전열(3500 kN) 쪽을 두껍게 가정함
|
||||
- ELEVATION TABLE의 EL.'X' 기준면 정의(= 코핑 상면 + h1 + h2, 몰탈 상면)
|
||||
- 받침·대좌의 교축방향 표시(전열 약 4.4°, 후열 약 3.1° 회전 — 곡선교)
|
||||
|
||||
### 4.3 철근 배치 간섭 상세
|
||||
모델에서 확인된 철근 간 교차·근접 위치로, 시공 시 위치 조정 기준이 필요합니다(간섭 정량 검사는 미실시).
|
||||
|
||||
| 부재 | 위치 | 내용 |
|
||||
| :--- | :--- | :--- |
|
||||
| 기둥 | 크로스타이 P6 | 같은 높이의 4본(0°·45°·90°·135°)이 중심에서 교차, 0°·180° 크로스타이가 주철근 다발(P1·P2)을 관통 |
|
||||
| 기둥 | 띠철근 P3 이음부 | 두 반원의 갈고리 시작점이 겹침 |
|
||||
| 기초 | B5·B6 다리 | X = ±4,575, Y = ±3,800 모서리에서 상·하면 철근 다리가 겹침 |
|
||||
| 기초 | 기둥 주철근 P1 갈고리 | 기초 하면 +300의 갈고리와 B7(하면 +277) 근접 |
|
||||
| 기초 | B9 수직 결속근 | 기둥 내부 위치에서 기둥 주철근·띠철근과 교차 |
|
||||
| 코핑 | 스터럽 하단 | 스터럽 하단과 하면근 C7·C8이 같은 높이(EL 40.511) |
|
||||
| 코핑 | 교좌면 보강 S1·S2 | 다리 700이 상면 주철근 3단(EL 43.111~43.311)을 통과 |
|
||||
|
||||
### 4.4 길이 산정 기준
|
||||
- 변길이 철근(C9·C11·C12·C13)의 L 산정 방식: 재료표 L은 변하는 치수의 (최대 + 최소)/2로 계산되어 있음(검산 일치). 본별 길이 목록 또는 산정 방식 기재 필요
|
||||
- 커플러 길이의 재료표 L 포함 여부(P4·P5는 포함: 2a + 2b = 5,636)
|
||||
|
||||
---
|
||||
|
||||
## 5. 누락사항
|
||||
|
||||
### 5.1 재료표
|
||||
| No. | 내용 | 근거 | 모델 처리 |
|
||||
| :-- | :--- | :--- | :--- |
|
||||
| M-01 | B9 (H16) 수량 칸 빈칸 | D3 SD400 B9 행 | 총연장 1,062.415 ÷ L 2.155 = 493본으로 역산(34×29 격자 체크무늬 배치와 일치) |
|
||||
| M-02 | 상동(") 기호의 그룹 해석 | D3 SD500 B7·B10·B12, SD400 C15·C16 등 | 표의 직경 그룹 순서로 해석(B7·B10 = S19, B12 = S16) — 확인 필요 |
|
||||
| M-03 | 기초 조립용 철근 UA1 실제 배치 | D3 "상기 배치간격은 예시도" 노트 | 모델 제외 |
|
||||
|
||||
### 5.2 형상 치수
|
||||
| No. | 내용 | 근거 | 모델 처리 |
|
||||
| :-- | :--- | :--- | :--- |
|
||||
| M-04 | 형상 VII(C7·C8)의 r1·r2·j | D3 C7·C8 행 빈칸 | 하면 곡선과 동심(R 12,100) 원호로 해석, 원길이 일치 |
|
||||
| M-05 | 형상 XIV(P1)의 커플러 위치 | D3 가공도 XIV | 커플러 미표현(연속봉) |
|
||||
| M-06 | C14·C16 갈고리 방향, S1·S2 층 순서, 교대 배치 시작(①·②CYCLE) | D1 단면·D2 상세 | 추정 적용. C14 4본은 아래 갈고리가 하면을 관통하여 위로 변경 |
|
||||
|
||||
### 5.3 작도
|
||||
| No. | 내용 | 근거 | 모델 처리 |
|
||||
| :-- | :--- | :--- | :--- |
|
||||
| M-07 | 평면도 우측 절반만 작도 — 거더선 1·2 받침·대좌 위치 없음 | D1 평면도 | 거더선 3~5 형상의 평행 이동(검산 오차 ≤ 0.23 mm) |
|
||||
| M-08 | 코핑 정면도 우측 절반만 작도 — 좌측 스터럽 상단 높이, 상면 철근 단별 마크 미표기 | D1 정면도 | 좌측은 소단 상면 −100으로 추정(재료표 C9 최솟값 1,376과 일치), 단 배정은 a 증가 순서로 추정 |
|
||||
| M-09 | 코핑 하면 평면도의 은선 원 r = 1,100 설명 없음 | D1 평면도 | 하면을 정면 곡선의 교축방향 압출로 해석 |
|
||||
| M-10 | 단면 B-B(기둥 위치)의 철근 배치 정밀 확인 미실시 | D1 단면 B-B | 정면도·단면 A-A로 대체 |
|
||||
|
||||
---
|
||||
|
||||
## 6. 철근재료표
|
||||
|
||||
D3 재료표 원본(본수·L·총연장)과 모델 집계를 대조했습니다. 근거: `Code/교각모델링/검증/rebar_schedule_compare.json` (`compile_rebar_schedule.py`), 모델 본수는 부재별 검증 결과 파일에서 가져왔습니다. 단위중량은 D3 표의 값(D32 6.230, D29 5.040, D25 3.980, D22 3.040, D19 2.250, D16 1.560 kg/m)입니다.
|
||||
|
||||
### 6.1 기둥 (P)
|
||||
| 마크 | 형상 | 직경 | 재료표 본수 | 모델 본수 | L (m) | 총연장 (m) | 비고 |
|
||||
| :--- | :--- | :--- | --: | --: | --: | --: | :--- |
|
||||
| P1 | XIV | S32 | 46 | 46 | 17.247 | 793.362 | |
|
||||
| P2 | XVI | S32 | 46 | 46 | 16.553 | 761.438 | E-02 작도 길이 불일치 |
|
||||
| P3 | VI | H19 | 36 | 36 | 6.436 | 231.696 | |
|
||||
| P4 | V | H19 | 9 | 9 | 5.636 | 50.724 | E-01 |
|
||||
| P5 | IX | H19 | 22 | 22 | 5.636 | 123.992 | E-01 |
|
||||
| P6 | III | H16 | 36 | 36 | 2.136 | 76.896 | |
|
||||
|
||||
### 6.2 확대기초 (B)
|
||||
| 마크 | 형상 | 직경 | 재료표 본수 | 모델 본수 | L (m) | 총연장 (m) | 비고 |
|
||||
| :--- | :--- | :--- | --: | --: | --: | --: | :--- |
|
||||
| B1 | III | S25 | 38 | 38 | 8.000 | 304.000 | |
|
||||
| B2 | XII | S25 | 38 | 38 | 11.500 | 437.000 | |
|
||||
| B3 | III | S19 | 38 | 38 | 8.000 | 304.000 | |
|
||||
| B4 | I | S25 | 35 | 35 | 7.600 | 266.000 | |
|
||||
| B5 | XII | S29 | 32 | 32 | 9.550 | 305.600 | E-06 |
|
||||
| B6 | XII | S29 | 32 | 32 | 13.050 | 417.600 | E-06 |
|
||||
| B7 | XII | S19 | 32 | 32 | 9.550 | 305.600 | |
|
||||
| B8 | XVI | S29 | 29 | 29 | 9.150 | 265.350 | |
|
||||
| B9 | XI | H16 | **(빈칸)** | 493 | 2.155 | 1,062.415 | M-01 역산 |
|
||||
| B10 | XIII | S19 | 9 | 9 | 33.684 | 303.156 | |
|
||||
| B11 | XII | S16 | 28 | 28 | 9.350 | 261.800 | |
|
||||
| B12 | III | S16 | **34** | **28** | 7.800 | 265.200 | **E-05** |
|
||||
|
||||
### 6.3 코핑 (C)
|
||||
| 마크 | 형상 | 직경 | 재료표 본수 | 모델 본수 | L (m) | 총연장 (m) | 비고 |
|
||||
| :--- | :--- | :--- | --: | --: | --: | --: | :--- |
|
||||
| C1·C4 | VIII | H29 | 12·12 | 12·12 | 14.490 | 173.880·173.880 | |
|
||||
| C2·C5 | VIII | H29 | 12·12 | 12·12 | 12.081 | 144.972·144.972 | |
|
||||
| C3·C6 | VIII | H29 | 12·12 | 12·12 | 12.106 | 145.272·145.272 | |
|
||||
| C7·C8 | VII | H29 | 12·12 | 12·12 | 13.994 | 167.928·167.928 | M-04 |
|
||||
| C9 | IV | H25 | 60 | 60 | 8.647 | 518.820 | E-07 (모델 488.5) |
|
||||
| C10 | IV | H25 | 21 | 21 | 10.310 | 216.510 | E-07 (모델 214.3) |
|
||||
| C11 | IV | H25 | 60 | 60 | 8.934 | 536.040 | E-07 (모델 508.3) |
|
||||
| C12 | X | H25 | 18 | 18 | 20.513 | 369.234 | E-08 (모델 333.3) |
|
||||
| C13 | X | H25 | 9 | 9 | 29.345 | 264.105 | E-08 (모델 262.2) |
|
||||
| C14 | III | H19 | 41 | 41 | 3.600 | 147.600 | |
|
||||
| C15 | III | H19 | 13 | 13 | 2.784 | 36.192 | |
|
||||
| C16 | II | H19 | 13 | 13 | 5.611 | 72.943 | |
|
||||
|
||||
### 6.4 교좌면 보강·조립용
|
||||
| 마크 | 형상 | 직경 | 재료표 본수 | 모델 본수 | L (m) | 총연장 (m) | 비고 |
|
||||
| :--- | :--- | :--- | --: | --: | --: | --: | :--- |
|
||||
| S1 | III | H19 | 50 | 50 | 3.800 | 190.000 | 대좌 5개 × 10 |
|
||||
| S2 | III | H19 | 105 | 105 | 2.500 | 262.500 | 대좌 5개 × 21 |
|
||||
| UA1 | XVII | H22 | 73 | — | 5.176 | 377.848 | M-03 모델 제외 |
|
||||
|
||||
### 6.5 합계·차이
|
||||
| 구분 | 재료표 총연장 (m) | 재료표 중량 (t) | 모델과의 차이 |
|
||||
| :--- | --: | --: | :--- |
|
||||
| SD500 (S32·S29·S25·S19·S16) | 4,990.106 | 21.552 | B12 −6본: −46.8 m, −0.073 t |
|
||||
| SD400 (H29·H25·H22·H19·H16) | 5,801.619 | 19.388 | C9~C13 폭 차이(E-07·E-08): −98.1 m, −0.390 t / UA1 제외: −377.8 m, −1.149 t |
|
||||
|
||||
- 직경 그룹 소계 검산: H29 1,264.104 m, H25 1,904.709 m, H19 1,115.647 m, H16 1,139.311 m, S16 527.000 m 등 마크별 합과 일치. SD400 중량 = Σ(그룹 총연장 × 단위중량) = 19.388 t (재료표와 일치)
|
||||
- 본수 일치: 37마크 중 35마크(UA1 제외, B9는 역산값 기준). 불일치 B12 1건
|
||||
|
||||
---
|
||||
|
||||
## 7. 철근상세
|
||||
|
||||
### 7.1 형상 유형별 해석 (D3 가공도)
|
||||
|
||||
| 형상 | 구성 | 원길이 식 (재료표 L) | 적용 마크 | 확인 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| I | 직선 | a | B4 | 일치 |
|
||||
| II | 직선 + 한쪽 갈고리 | a + b | C16 | 일치 |
|
||||
| III | 직선 + 양끝 갈고리 | a + 2b | B1, B3, B12, C14, C15, P6, S1, S2 | 일치 |
|
||||
| IV | 닫힌 스터럽 + 겹침 | 2a + 2b + 2c | C9, C10, C11 | 일치 (C10 2×1,407 + 2×2,998 + 2×750) |
|
||||
| V | 반원 2 + 커플러 2 | 2a + 2b | P4 | 일치 (커플러 b 65 포함) |
|
||||
| VI | 반원 2 + 갈고리 4 | 2a + 4b | P3 | 일치 (a = π×897) |
|
||||
| VII | 중앙 수평 + 곡선 + 끝 다리 | a + c + 2×곡선 + e | C7, C8 | 해석 일치 (M-04) |
|
||||
| VIII | 수평 + 꺾인 다리 2 (x1·x2) | a + b + c | C1~C6 | ±1 mm (x1 98°·x2 96° = 선단 경사) |
|
||||
| IX | 링 + 커플러 | a + b | P5 | 일치 |
|
||||
| X | 수평 닫힌 고리 + 겹침 | 2a + 2b + 4c | C12, C13 | 일치 |
|
||||
| XI | 수직 결속 + 하단 90°·상단 180° 갈고리 | a + b + c | B9 | 일치 |
|
||||
| XII | 직선 + 양끝 다리(같은 방향) | a + 2b | B2, B5, B6, B7, B11 | 일치 |
|
||||
| XIII | 닫힌 사각 | 2(a + b) | B10 | 일치 |
|
||||
| XIV | 직선 + 90° 원호 + 갈고리 | a + π/2·R + c | P1 | 일치 (b 534 = π/2×340) |
|
||||
| XVI | 직선 | a | P2, B8 | 일치 |
|
||||
| XVII | 조립용 | — | UA1 | 미적용 |
|
||||
|
||||
### 7.2 길이 산정 관례 (도면에 기재되지 않아 검산으로 확인한 사항)
|
||||
- 변길이 철근의 재료표 L = 변하는 치수를 (최대 + 최소)/2로 둔 값 (C9: b 2,956/1,376 → 2,166 → 8,647, C11, C12, C13 동일 방식)
|
||||
- 재료표 치수 = 도면 작도 중심선 + 54.3 mm (C9~C13 높이·길이 범위 양끝 전부)
|
||||
- 커플러 길이는 L에 포함 (P4, P5)
|
||||
|
||||
### 7.3 굽힘·이음 (모델 적용 기준)
|
||||
- 굽힘 반지름: 도면 명시값 우선(P1 R 340, 띠철근 R 897). 미표기 부위는 최소 내면 지름 D16 이하 2d, D19 이상 3.5d를 적용
|
||||
- 겹침 이음(IV의 c, X의 c)과 커플러는 형상에 표현하지 않고 원길이에만 반영
|
||||
- 이음 위치: 기둥 띠철근 P3은 "이음 부분이 엇갈리도록 배치"(D1 노트)에 따라 단마다 90° 엇갈림으로 적용 — 도면에 기준 각도 표기 필요(4.2 관련)
|
||||
|
||||
---
|
||||
|
||||
## 부록
|
||||
|
||||
### A. 근거 문서·파일
|
||||
| 구분 | 경로 |
|
||||
| :--- | :--- |
|
||||
| 도면 판독서 | `DOC/02_분석/분석_운곡교P1교각도면판독_2026-10-07_v0.1.01.md`, `DOC/02_분석/분석_운곡교P1코핑철근판독_2026-10-07_v0.1.02.md` |
|
||||
| 모델링 설계서 | `DOC/03_설계/설계_운곡교P1교각모델링_2026-10-08_v0.1.10.md` |
|
||||
| 검증 보고서 | `DOC/05_검증/검증_운곡교P1교각모델_2026-10-08_v0.1.05.md` |
|
||||
| 모델 | `Code/교각모델링/출력/실행_운곡교P1교각모델_2026-10-08_v0.1.09.3dm` |
|
||||
| 재료표 집계 | `Code/교각모델링/검증/rebar_schedule_compare.json` |
|
||||
|
||||
### B. 미해결 항목 대응표 (`context-migration/OPEN_미해결목록.md`)
|
||||
| OPEN # | 내용 | 본 보고서 |
|
||||
| :-- | :--- | :--- |
|
||||
| 2 | 코핑 하면 원 r = 1,100 | M-09 |
|
||||
| 4 | 측량좌표 | 4.1 |
|
||||
| 5 | 대좌 높이·후열 패드 크기 | E-10, E-11 |
|
||||
| 6 | 띠철근 간격 | E-01 |
|
||||
| 7 | 주철근 작도 길이·반지름 | E-02, E-03 |
|
||||
| 8 | 기둥 철근 간 교차 | 4.3 |
|
||||
| 9 | B12 본수 | E-05 |
|
||||
| 10 | 기초 상면 피복, B9 수량 | E-06, M-01 |
|
||||
| 11 | 기초 철근 간섭 | 4.3 |
|
||||
| 12 | 스터럽·폐합 폭 | E-07, E-08 |
|
||||
| 13 | 코핑 추정 7건 | M-06, M-08 |
|
||||
| 14 | 코핑 철근 간섭 | 4.3 |
|
||||
| 16 | 솔플레이트 경사 방향 | 4.2, E-12 |
|
||||
| 3, 15 | 모델 육안 확인, 숨김 상태 | (모델 관리 사항 — 본 보고서 대상 외) |
|
||||
Whitespace-only changes.
@@ -0,0 +1,90 @@
|
||||
# DOC 폴더
|
||||
|
||||
Task Execution Agent이 생성한 **모든 산출물(문건)** 을 저장하는 폴더입니다.
|
||||
> 본 문서는 `.claude/taskexecutionagent.md` **v0.3.01**의 [F1]·[F3]·[F5]·[F6]에 종속됩니다. 충돌 시 정본이 우선합니다.
|
||||
|
||||
## 저장 형식
|
||||
- 모든 문건은 Markdown(`.md`)으로 저장합니다. (아티팩트 형태 금지)
|
||||
- 표 형태로만 표현 가능하여 불가피하게 시트가 필요한 경우에만 `.xlsx`로 저장하되, **생성 전 사용자 컨펌**을 받습니다.
|
||||
- 단, 프로젝트 성격상 xlsx가 기본 산출 형식인 경우(수량산출 등) 프로젝트 단위 예외를 `context-migration`에 1회 등재하고 이후 건별 컨펌을 생략합니다.
|
||||
- **코드 파일(`.py`·`.js`·`.html` 등)과 바이너리(`.pptx`·`.dxf` 등)를 DOC 하위에 두지 않습니다.** → `Code/` ([F3])
|
||||
- **DOC 루트에는 README 외의 산출물을 두지 않습니다.** 백업·복사본·임시 파일은 `backup/`·`temp/`로 이동합니다.
|
||||
|
||||
## 폴더 구조 — 유형축 표준 ([F1])
|
||||
|
||||
```
|
||||
DOC/
|
||||
├── 01_기획/
|
||||
├── 02_분석/
|
||||
├── 03_설계/
|
||||
├── 04_실행/
|
||||
├── 05_검증/
|
||||
├── 06_보고서/
|
||||
└── 99_기타/
|
||||
```
|
||||
|
||||
- **유형축이 상위**입니다. 주제(공종·아이템 등)별 구분이 필요하면 2단계로 둡니다: `DOC/<유형>/<주제>/`
|
||||
- 주제축과 유형축을 같은 계층에 혼재시키지 않습니다.
|
||||
- 번호는 결번 없이 연속으로 쓰며, **위 7종 외로 유형 접두어를 임의 증식하지 않습니다.**
|
||||
|
||||
## 파일명 규칙
|
||||
`[유형]_[핵심주제]_[YYYY-MM-DD]_v[버전].md`
|
||||
|
||||
예: `보고서_2분기실적분석_2026-08-25_v0.1.00.md`
|
||||
|
||||
- **폴더 루트 접두어 금지**: 폴더가 존재하면 파일명에 폴더 경로/폴더명을 붙이지 않고 해당 폴더 안에 순수 파일명으로만 저장합니다. (예외 처리는 [F7])
|
||||
- 파일명에 **담당자명·`최종)`·`(수정본)` 등을 삽입하지 않습니다.**
|
||||
- 파일명·폴더명은 한국어를 쓰되 **공백·괄호·특수문자를 넣지 않습니다.** (영문 kebab-case 주제명 금지, [G2])
|
||||
- **버전 토큰은 파일명당 1개만 허용**합니다. 대상 산출물의 버전을 표기해야 하면 `[핵심주제]` 안에 하이픈으로 붙입니다.
|
||||
예: `진단보고서_모듈A-v0.1.0-문제점및개정내역_2026-08-25_v0.1.00.md`
|
||||
|
||||
## 버전 관리 ([F5])
|
||||
|
||||
### 자릿수별 승급 권한
|
||||
버전 자릿수는 **변경의 크기가 아니라 문서가 누구에게까지 나가는가**를 나타냅니다.
|
||||
|
||||
| 자리 | 표기 | 승급 조건 | 승급 권한 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| **PATCH** (세 번째) | `v0.1.`**`xx`** | **기본값.** 수정·보완·오류 정정·조항 신설·구조 변경 등 **공유 범위가 그대로인 모든 개정** | Agent 자율 |
|
||||
| **MINOR** (두 번째) | `v0.`**`x`**`.00` | **내부 공유용으로 발행**할 때 | **사용자 요청 시에만** |
|
||||
| **MAJOR** (첫 번째) | `v`**`x`**`.0.00` | **외부 공유용으로 발행**할 때 | **사용자 요청 시에만** |
|
||||
|
||||
- **개정은 언제나 PATCH가 기본값입니다.** `v0.1.00`을 고쳤으면 `v0.1.01`입니다.
|
||||
- **Agent는 MINOR·MAJOR를 스스로 올리지 않습니다.** 분량이 크든 장을 신설했든 **그 자체는 승급 사유가 아닙니다.**
|
||||
- "버전 올려줘"라고만 지시하면 **PATCH로 올리고**, 내부·외부 공유 목적이면 `[CLARIFICATION NEEDED]`로 확인한 뒤 승급합니다.
|
||||
- 승급 시 **하위 자리는 `00`으로 초기화**합니다. `v0.1.07` → (내부 공유) → `v0.2.00` → (외부 공유) → `v1.0.00`
|
||||
- MINOR·MAJOR 승급 시 **그 근거를 변경 이력 `비고`에 남깁니다.** 근거 없는 승급은 [Step 3] V4 FAIL입니다.
|
||||
|
||||
### 상황별
|
||||
|
||||
| 상황 | 버전 | 승급 주체 |
|
||||
| :--- | :--- | :--- |
|
||||
| 최초 작성 | `v0.1.00` | Agent |
|
||||
| 내용 수정·보완·오류 정정 | `v0.1.01`, `v0.1.02` … | Agent |
|
||||
| **장·절·시트·열 신설 등 구조 변경** | `v0.1.03` … | Agent (**PATCH로 처리**) |
|
||||
| **내부 공유용 발행** | `v0.2.00` | **사용자 요청** |
|
||||
| 내부 공유본 수정 | `v0.2.01` … | Agent |
|
||||
| **외부 공유용 발행 (최종본)** | `v1.0.00` | **사용자 요청** |
|
||||
| 최종본 수정 | `v1.0.01` … | Agent |
|
||||
|
||||
- **PATCH는 두 자리 제로 패딩**을 씁니다 (`v0.1.09` → `v0.1.10`). 패딩이 없으면 `v0.1.10`이 `v0.1.9`보다 앞에 정렬되어 최신본 식별이 어긋납니다.
|
||||
- **하이픈·알파벳 접미사 금지** (`v0.1.9-5`, `v0.1.15b`). 버전 뒤에 자유 문자열도 붙이지 않습니다 (`v0.3.1최종확인` 등).
|
||||
- **버전을 올리지 않고 덮어쓰지 않습니다.** 사용자가 그렇게 지시하더라도 [CLARIFICATION NEEDED]로 이력 소실 위험을 고지한 뒤 확인을 받습니다.
|
||||
- **구버전은 삭제하지 않고 보존**하며, 정리가 필요하면 `backup/`으로 이동합니다.
|
||||
- **파일명 버전과 본문 변경 이력 표 최신 행의 버전은 항상 일치**해야 합니다. 불일치는 [Step 3] V4 FAIL입니다.
|
||||
|
||||
## 변경 이력 규칙 ([F6])
|
||||
**모든 DOC 산출물은 제목 바로 아래에 변경 이력 표를 포함**합니다. 버전업마다 행을 **오름차순으로 누적**하며(최신 행이 맨 아래), **기존 행을 삭제하지 않습니다.**
|
||||
**수정자는 [F4]에 따라 담당자명으로 기재**합니다. (IP로 기재하지 않습니다.)
|
||||
|
||||
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| v0.1.00 | 2025-06-05 | 홍길동 | 신규 작성 | 최초 버전 |
|
||||
| v0.1.01 | 2025-06-06 | 홍길동 | 2.3 항목 문구 수정 | 내부 검토용 |
|
||||
| v0.2.00 | 2025-06-07 | 김철수 | 초안 검토용 팀 공유 | 검토 요청 |
|
||||
| v1.0.00 | 2025-06-09 | 김철수 | 최종본 확정·대외 배포 | 공식 배포 |
|
||||
|
||||
> **적용 제외**: `prompt/` 로그. 로그는 append-only 감사 기록이므로 개정 이력 개념이 성립하지 않습니다.
|
||||
|
||||
> **타인 명의 문서 정정 시**에는 정정자·정정일·근거를 병기합니다.
|
||||
> 예: `> [정정 2026-08-25 / 홍길동] 원문은 A로 기재했으나 B가 맞다. 근거: …`
|
||||
Reference in new issue
Block a user