- 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>
9.6 KiB
9.6 KiB
분석 — 기존 통로박스 구조물 모델링 과정 (교각 적용 관점)
| 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 |
|---|---|---|---|---|
| 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.pyL11-43] - 기존 DXF를 덮어쓰지 않는다(
existing DXF must not be overwritten). [출처: 동 L14] - DXF 문자 인코딩: 2007 이상은 UTF-8, 이전 판은 HEADER의 코드페이지(
$DWGCODEPAGE)로 해독한다. [출처:dxf_text_encoding.pydocstring] - 교각 적용: 본 PC에는
dwg2dxf가 없고 ODA File Converter가 설치되어 있다 → ODA로 변환하되 동일한 감사 항목(SHA-256·엔티티 수)을 기록한다. 변환 엔진이 다르다는 점을 판독서에 명시한다.
2.2 ② 도면 정보 추출
- DXF를 의존성 없는 파서로 읽어 엔티티 유형·레이어·블록 계보·월드 좌표를 보존한다. 래스터 이미지는 형상 근거가 아니다. [출처:
dxf_vector_parser.pydocstring] - 한 DXF 안의 도면틀(frame)을 분리하여 시트 영역을 나눈다(파일명으로 분기하지 않음). [출처:
cad_sheet_regions.py] - 치수 권위 원칙: "Numeric drawing dimensions drive distances; CAD vertices locate datums only." — 거리는 치수 문자(값)로, CAD 정점은 기준점 위치로만 쓴다. [출처:
cad_dimension_authority.pyL1] - 모든 뷰(평면·정면·배면·종단·횡단·단면·상세·배근도·재료표)를 분류하고, 한 뷰만으로 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 승인안의 구체화)
- ①: ODA File Converter로 DWG→DXF, SHA-256·엔티티 수 감사 기록.
- ②: 파이썬 DXF 판독 스크립트로 레이어·문자·치수 전수 집계 → 뷰 영역 분리 → 치수표 작성. 각 값에
도면/뷰/엔티티 핸들출처 부여. - ③: 객체 장부 → 설계서(부재 구분·형상 규칙, HITL) →
params.json→ Rhino 생성(부재별 레이어, 닫힌 솔리드). - ⑤: 모델 실측값(바운딩·단면·표고)과
params.json·도면 치수의 독립 대조 + 접합면 틈·겹침 검사.
6. 한계
server.py의call_model_plan은 외부 AI 판독 경로를 포함한다 [출처: A1 ②]. 본 Task는 해당 서비스를 사용하지 않고 로컬 판독 + 사람 확인(HITL)으로 대체한다.- 박스 프로그램 코드는 실행하지 않았다(WSL·Python 3.14 전제 [출처: A6]). 본 분석은 문서·소스 정적 분석이다.
- 철근(④) 관련 문서 17건은 이번 범위 밖으로 내용 분석을 하지 않았다(
미실시).