219 lines
14 KiB
Markdown
219 lines
14 KiB
Markdown
# 2D CAD 기반 암거 및 날개벽 3D 외형·배근 자동 모델링 시스템
|
|
### (Automated 3D Solid & Rebar Modeling System for Culverts and Wingwalls)
|
|
|
|
> **토목 구조물의 2D CAD 도면(DWG/DXF)을 자동 파싱하여 암거 본체와 날개벽의 3D 외형 솔리드(Solid Mesh)를 구축하고, 내부 철근 배근을 3차원 공간에 자동 모델링하여 BIM 데이터와 물량표를 산출하는 범용 웹 기반 엔지니어링 시스템입니다.**
|
|
|
|
---
|
|
|
|
## 📌 목차
|
|
1. [시스템 개요](#1-시스템-개요)
|
|
2. [전체 프로세스 파이프라인](#2-전체-프로세스-파이프라인)
|
|
3. [단계별 상세 기능 및 알고리즘 메커니즘](#3-단계별-상세-기능-및-알고리즘-메커니즘)
|
|
- [1단계: 도면 불러오기 및 도면 종류 판별](#1단계-도면-불러오기-및-도면-종류-판별)
|
|
- [2단계: 일반도 기반 암거 및 날개벽 3D 외형 모델링](#2단계-일반도-기반-암거-및-날개벽-3d-외형-모델링)
|
|
- [3단계: 구조도 기반 날개벽 내부 3D 철근 배근 및 물량 집계](#3단계-구조도-기반-날개벽-내부-3d-철근-배근-및-물량-집계)
|
|
- [4단계: BIM 데이터 및 철근 가공조립표 내보내기](#4단계-bim-데이터-및-철근-가공조립표-내보내기)
|
|
4. [화면 조작 인터랙션 가이드](#4-화면-조작-인터랙션-가이드)
|
|
5. [설치 및 실행 방법](#5-설치-및-실행-방법)
|
|
6. [프로젝트 디렉터리 구조](#6-프로젝트-디렉터리-구조)
|
|
7. [자동화 파이프라인 검증 체계](#7-자동화-파이프라인-검증-체계)
|
|
|
|
---
|
|
|
|
## 1. 시스템 개요
|
|
|
|
본 시스템은 특정 단일 구조물에 한정되지 않고, 다양한 암거 및 날개벽 도면을 범용적으로 수용하여 3D 디지털 모델로 변환할 수 있도록 설계된 자동화 소프트웨어입니다.
|
|
|
|
- **도면 처리 범위**: 암거 일반도(형상·치수) 및 구조도/배근도(철근 제원·상세) DWG/DXF 다중 처리
|
|
- **핵심 목표**:
|
|
1. 2D 벡터 도면 엔티티에서 형상 파라미터 및 치수 정보 자동 추출
|
|
2. 암거 사각(Skew), 내공 단면, 날개벽 설치 각도 및 경사 변화를 반영한 수밀 솔리드(Watertight Solid) 메시 생성
|
|
3. 피복두께를 엄격히 준수한 3차원 철근 중심선(Polyline) 공간 배치 및 규격별 물량 자동 산출
|
|
4. 웹 기반 무설치/로컬 구동 지원 및 개방형 BIM 포맷(OBJ, STL, DXF, CSV) 상호운용성 제공
|
|
|
|
---
|
|
|
|
## 2. 전체 프로세스 파이프라인
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
subgraph Step1["1단계: 도면 입력 및 분류 (Drawing Intake & Classification)"]
|
|
DWG["2D CAD 도면군 (DWG/DXF)"] --> AutoClassify["키워드 기반 도면 자동 분류<br>(일반도 / 구조도 / 미분류)"]
|
|
AutoClassify --> VectorViewer["2D CAD 벡터 엔진 렌더링<br>(도면 식별 및 레이어 검토)"]
|
|
end
|
|
|
|
subgraph Step2["2단계: 3D 외형 솔리드 모델링 (Solid Geometry Generation)"]
|
|
VectorViewer --> CulvertExtract["암거 본체 기하 자동 인식<br>(내공 스팬, 폭, 높이, 사각)"]
|
|
CulvertExtract --> WingwallExtract["날개벽 배치 판별 및 단면 보간<br>(시점/종점 좌·우 날개벽 형상 생성)"]
|
|
WingwallExtract --> MeshGen["완전 폐합 2-Manifold 메시 생성<br>(콘크리트 체적 실시간 적분)"]
|
|
end
|
|
|
|
subgraph Step3["3단계: 3D 철근 배근 및 물량 산출 (Rebar BIM Modeling)"]
|
|
MeshGen --> RebarExtract["재료표(BBS) 및 단면 배근 규칙 파싱"]
|
|
RebarExtract --> RebarGen["부재별 3D 공간 철근 폴리라인 생성<br>(설계 피복두께 자동 옵셋 적용)"]
|
|
RebarGen --> RebarBOM["철근 가공조립표 및 총중량 집계<br>(본수, 연장, 규격별 중량 산출)"]
|
|
end
|
|
|
|
subgraph Step4["4단계: 3D 인터랙션 및 BIM 내보내기 (Interoperability)"]
|
|
RebarGen --> Interactive3D["Three.js 기반 3D 웹 뷰어 표출<br>(부재별 격리, 텍스트 라벨링)"]
|
|
Interactive3D --> Export["BIM 엔지니어링 포맷 내보내기<br>(OBJ / STL / 3D DXF / CSV / JSON)"]
|
|
end
|
|
```
|
|
|
|
---
|
|
|
|
## 3. 단계별 상세 기능 및 알고리즘 메커니즘
|
|
|
|
### 1단계: 도면 불러오기 및 도면 종류 판별
|
|
|
|
다양한 프로젝트의 도면 파일을 수용할 수 있도록 유연한 업로드 파이프라인과 규칙 기반 자동 분류기를 제공합니다.
|
|
|
|
#### 1) 도면 자동 판별 알고리즘
|
|
- **일반도 자동 분류**: 파일명에 `'일반'` 키워드가 포함된 경우 구조물 외형 및 치수를 표현하는 일반도(`GENERAL`)로 자동 분류합니다.
|
|
- **배근도/구조도 자동 분류**: 파일명에 `'배근'` 또는 `'구조'` 키워드가 포함된 경우 내부 철근 배치 정보를 담은 구조도(`REBAR`)로 자동 분류합니다.
|
|
- **미분류 및 대화형 수동 지정**: 도면명 규칙이 상이하여 키워드가 검출되지 않는 도면(`UNCLASSIFIED`)은 사용자에게 수동 분류 선택 UI를 제공하여 즉시 지정할 수 있습니다.
|
|
|
|
#### 2) 2D CAD 벡터 뷰어
|
|
- 업로드된 DWG/DXF 파일의 벡터 엔티티(LINE, LWPOLYLINE, ARC, TEXT, DIMENSION 등)를 브라우저 Canvas에 정밀 투영합니다.
|
|
- 도면 레이어별 On/Off 제어, 마우스 휠 줌(Zoom) 및 드래그 팬(Pan)을 통해 입력 도면의 원본 상태를 시각적으로 검증할 수 있습니다.
|
|
|
|
---
|
|
|
|
### 2단계: 일반도 기반 암거 및 날개벽 3D 외형 모델링
|
|
|
|
일반도의 평면도 및 단면도를 분석하여 암거와 날개벽의 기하학적 형태를 3차원 솔리드 메시로 생성합니다.
|
|
|
|
#### 1) 암거 본체 기하 자동 인식
|
|
- 평면도 내의 중심 기준선 및 콘크리트 외곽선, 점선 레이어 패턴을 분석하여 암거 본체의 **내공 스팬(Span), 형하고(Clear Height), 본체 외폭, 암거 사각(Skew Angle), 연장(Length)**을 자동으로 추출합니다.
|
|
|
|
#### 2) 날개벽 위치 판별 및 동적 위상 제어
|
|
- 암거 본체를 기준으로 4개 영역(시점부 좌/우, 종점부 좌/우)의 날개벽 배치 상태를 판별합니다.
|
|
- **도면 기반 모델링 원칙**:
|
|
- 도면에 표기된 날개벽 위치는 누락 없이 정밀 모델링합니다.
|
|
- 도면에 표기되지 않은 위치는 임의 생성하지 않고 모델링에서 제외합니다.
|
|
- 다양한 현장 조건(양측 날개벽, 일측 날개벽, 무날개벽 등)을 웹 UI 제어기를 통해 실시간으로 선택 및 시뮬레이션할 수 있습니다.
|
|
|
|
#### 3) 단면 보간 및 완전 폐합 수밀 메시(Watertight Solid) 생성
|
|
- 날개벽의 시점부 단면(암거 접합부)과 종점부 단면(천단부)의 기하 치수(벽체 두께, 높이, 저판 폭, 헌치 등)를 선형/곡선 가변 보간(Lofting)합니다.
|
|
- 3D 프린팅 및 BIM 솔리드 기준을 만족하는 **Open Edge 0건의 2-Manifold 방수(Watertight) 메시**를 구축하고, 미소 삼각 요소를 수치 적분하여 **콘크리트 총체적(Volume)**을 실시간 자동 계산합니다.
|
|
|
|
---
|
|
|
|
### 3단계: 구조도 기반 날개벽 내부 3D 철근 배근 및 물량 집계
|
|
|
|
구조도에서 추출된 철근 가공조립표(Bar Bending Schedule) 및 단면 배근도를 3차원 공간 좌표계로 투영하여 정밀 배근 모델을 구축합니다.
|
|
|
|
#### 1) 철근 카테고리별 3차원 공간 배치 알고리즘
|
|
- **우각부 사각 보강근**: 암거 본체와 날개벽이 접하는 우각부의 응력 집중을 방어하는 사각 절곡 정착근을 경사 각도에 맞춰 3D 배치합니다.
|
|
- **벽체 수직 주철근**: 저판 기초 내부 정착 후크를 포함한 수직 주철근을 피복두께를 고려하여 지정 간격 및 교대 사이클에 맞춰 입체 배열합니다.
|
|
- **벽체 수평 배력철근**: 날개벽 경사 변화에 맞춰 하부 연속 구간과 상부 가변 구간, 천단 경사 연단근을 단계별로 가변 배치합니다.
|
|
- **저판 주철근 및 배력철근**: 저판 폭 변화 및 구배에 맞추어 상·하면 주철근(양단 후크 포함)과 종방향 배력철근을 입체 구성합니다.
|
|
- **헌치 및 전단 보강근**: 벽체와 저판이 만나는 취약부 헌치 보강근 및 결속 타이바/스터럽을 자동 생성합니다.
|
|
|
|
#### 2) 피복두께 준수 및 물량 자동 산출
|
|
- 콘크리트 외형 표면으로부터 법선 방향으로 **설계 피복두께(Cover Thickness)**를 엄격히 감산하여 철근이 외형 밖으로 돌출되지 않도록 기하학적 제약 조건을 적용합니다.
|
|
- 배근된 모든 철근의 규격(D13, D16, D19, D22 등), 본수, 본당 길이, 할증률을 반영한 **총연장(Total Length) 및 총중량(Total Weight)**을 실시간 집계합니다.
|
|
|
|
---
|
|
|
|
### 4단계: BIM 데이터 및 철근 가공조립표 내보내기
|
|
|
|
생성된 3D 모델과 물량 데이터를 외부 상용 CAD, BIM 소프트웨어, 견적 프로그램과 연계할 수 있는 표준 규격으로 내보냅니다.
|
|
|
|
| 포맷 | 파일 유형 | 호환성 및 활용 분야 |
|
|
| :--- | :--- | :--- |
|
|
| **OBJ** | 3D 형상 + 철근 폴리라인 | Blender, 3ds Max, Rhino 등 범용 3D 그래픽 및 시각화 도구 |
|
|
| **STL** | 삼각망 수밀 솔리드 | 3D 프린팅 슬라이서, 지반-구조 상호작용 수치해석 프로그램 |
|
|
| **3D DXF** | AutoCAD 3D Face / Polyline | AutoCAD, Civil 3D 등 CAD 프로그램에서 레이어별 3D 검토 |
|
|
| **CSV** | 철근 가공조립표 (BBS) | Excel 등 스프레드시트 호환 규격별·부재별 철근 집계표 |
|
|
| **JSON** | 기하 및 속성 메타데이터 | 웹 API 연동, 외부 BIM 플랫폼 커스텀 데이터 파이프라인 |
|
|
|
|
---
|
|
|
|
## 4. 화면 조작 인터랙션 가이드
|
|
|
|
웹 브라우저 환경에서 엔지니어가 3D 모델을 직관적으로 검토할 수 있는 다양한 상호작용 기능을 제공합니다.
|
|
|
|
### 1) 3D 뷰포트 카메라 제어
|
|
- **회전 (Orbit)**: 마우스 좌클릭 드래그로 모델 주위를 자유롭게 회전합니다.
|
|
- **이동 (Pan)**: 마우스 우클릭 드래그(또는 Shift + 좌클릭)로 카메라 시점을 수평/수직 이동합니다.
|
|
- **확대/축소 (Zoom)**: 마우스 휠 스크롤로 관심 영역을 확대하거나 축소합니다.
|
|
|
|
### 2) 부재 및 철근 상호작용
|
|
- **부재 선택 (2단계)**: 암거 본체 또는 좌/우 날개벽을 직접 클릭하면 해당 부재가 강조 표시되며 상세 치수 카드가 나타납니다.
|
|
- **철근 격리 표출 (3단계 Isolate Mode)**: 좌측 사이드바에서 특정 철근 기호를 선택하면 해당 철근군만 선명하게 단독 표출되고, 타 철근 및 콘크리트 외형은 반투명 고스트(Ghost) 모드로 전환되어 간섭 여부를 즉시 확인할 수 있습니다.
|
|
- **거리 비례 3D 라벨링**: 줌 인/아웃 시 카메라 거리에 비례하여 철근 기호 텍스트의 크기가 자동으로 보정되어 항상 선명한 가독성을 유지합니다.
|
|
|
|
---
|
|
|
|
## 5. 설치 및 실행 방법
|
|
|
|
### 환경 요구사항
|
|
- **Python**: 3.10 이상 권장
|
|
- **웹 브라우저**: WebGL 2.0을 지원하는 최신 브라우저 (Chrome, Edge, Firefox, Safari)
|
|
|
|
### 의존 패키지 설치
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
---
|
|
|
|
### 실행 모드 (3가지 방식 지원)
|
|
|
|
#### [모드 1] 로컬 웹 서버 실행 (권장)
|
|
- 백엔드 서버를 구동하여 동적 도면 업로드, 실시간 3D 변환, 파일 내보내기 전체 기능을 사용합니다:
|
|
```powershell
|
|
python app.py
|
|
```
|
|
- 구동 후 브라우저에서 `http://127.0.0.1:5000/` 에 접속합니다.
|
|
|
|
#### [모드 2] 독립형 정적 브라우저 실행 (서버 불필요)
|
|
- [`index.html`](index.html) 파일을 웹 브라우저로 직접 열어 실행합니다.
|
|
- `static/data/`의 번들 데이터를 활용하여 서버 설치 없이 오프라인 환경에서도 1~3단계 3D 뷰어와 인터랙션을 시연할 수 있습니다.
|
|
|
|
#### [모드 3] Linux / WSL2 환경 실행
|
|
- Linux 및 WSL2 환경에서는 제공된 쉘 스크립트로 간편하게 구동할 수 있습니다:
|
|
```bash
|
|
bash run_wsl.sh
|
|
```
|
|
|
|
---
|
|
|
|
## 6. 프로젝트 디렉터리 구조
|
|
|
|
```text
|
|
├── app.py # Flask 백엔드 REST API 서버
|
|
├── cad_parser.py # ezdwg 기반 DWG/DXF 파서 및 자동 분류기
|
|
├── model_3d.py # 암거 및 날개벽 3D 외형 솔리드 모델러
|
|
├── rebar_model.py # 구조도 기반 3D 철근 배근 및 물량 산출 엔진
|
|
├── exporters.py # OBJ / STL / 3D-DXF / CSV 내보내기 변환기
|
|
├── bundle_data.py # 서버리스 정적 구동용 데이터 번들러
|
|
├── index.html # Three.js 프론트엔드 단일 페이지 웹 애플리케이션 (SPA)
|
|
├── requirements.txt # 필수 파이썬 라이브러리 목록
|
|
├── static/
|
|
│ ├── css/ # 반응형 UI 레이아웃 스타일시트
|
|
│ ├── js/ # 3D 렌더러, 2D 벡터 캔버스, UI 상태 관리 스크립트
|
|
│ ├── libs/ # Three.js 및 컨트롤러 라이브러리
|
|
│ └── data/ # 정적 오프라인 구동용 번들 데이터
|
|
├── DOC/ # 개발 및 기능 검증 기술 문서
|
|
└── README.md # 본 시스템 종합 명세서
|
|
```
|
|
|
|
---
|
|
|
|
## 7. 자동화 파이프라인 검증 체계
|
|
|
|
본 시스템은 다양한 도면 변환 작업의 정확성을 유지하기 위해 자동화된 검증 파이프라인을 내장하고 있습니다.
|
|
|
|
### 테스트 실행
|
|
```bash
|
|
python test_pipeline.py
|
|
```
|
|
|
|
### 주요 검증 항목
|
|
1. **도면 분류 무결성**: 다양한 도면명 키워드 패턴에 대한 자동 분류 정확도 및 예외 도면 처리 검증
|
|
2. **외형 솔리드 수밀성**: 3D 메시의 비공유 변(Open Edge) = 0, Non-manifold 요소 = 0 무결성 검증
|
|
3. **철근 배근 정밀도**: 철근 재료표 수량과 3D 생성 인스턴스 간의 본수, 길이, 중량 100% 일치성 검증
|
|
4. **엔지니어링 내보내기 검증**: 생성된 OBJ, STL, DXF, CSV 파일의 문법 및 외부 CAD 호환성 검증
|