82 lines
4.0 KiB
Markdown
82 lines
4.0 KiB
Markdown
# R2C DXF → 3D 웹 뷰어
|
||
|
||
`drawing/R2C_일반도_20260601.dxf`를 읽어 단면 기반 3D 모델, 원본 벡터 도면, 독립 HTML 페이지를 생성하고 웹 서버로 게시하는 Python 프로그램입니다. Python 3.9 이상에서 외부 패키지 없이 실행합니다.
|
||
|
||
## 실행 및 로컬 웹 게시
|
||
|
||
WSL 터미널에서 다음 명령을 실행합니다.
|
||
|
||
```bash
|
||
cd /home/b19203/3d-drawing-web
|
||
python3 r2c.py serve
|
||
```
|
||
|
||
브라우저에서 **http://localhost:8000** 을 엽니다. 서버 종료는 `Ctrl+C`입니다. 실행할 때마다 DXF에서 모델과 웹페이지를 다시 생성합니다. 생성된 루트 `index.html`은 더블클릭해서 직접 열 수도 있습니다.
|
||
|
||
다른 포트 또는 로컬 네트워크에 게시하려면 다음처럼 실행합니다.
|
||
|
||
```bash
|
||
python3 r2c.py serve --host 0.0.0.0 --port 8080
|
||
```
|
||
|
||
다른 기기에서는 이 PC의 IP 주소와 포트로 접속합니다. WSL의 네트워크 모드 및 Windows 방화벽 설정에 따라 접근 범위가 달라집니다. 서버는 생성된 `dist/`만 제공하므로 저장소의 Git 파일이나 프로그램 소스를 노출하지 않습니다.
|
||
|
||
## 정적 호스팅에 게시
|
||
|
||
```bash
|
||
python3 r2c.py build
|
||
```
|
||
|
||
생성된 **`dist/` 폴더 전체**를 정적 웹 호스팅의 게시 폴더로 지정하면 됩니다. 빌드 후 웹 서버 측 Python이나 CAD 소프트웨어는 필요하지 않습니다. HTML은 모델과 벡터 도면을 포함하고 외부 CDN을 사용하지 않습니다.
|
||
|
||
입력 및 출력 경로를 바꾸려면 다음 옵션을 사용합니다.
|
||
|
||
```bash
|
||
python3 r2c.py build --dxf './drawing/R2C_일반도_20260601.dxf' --output ./dist
|
||
```
|
||
|
||
## 화면 기능
|
||
|
||
- R2C 전환관과 원심력 콘크리트관의 3D 보기
|
||
- 마우스 회전, 휠 확대, 방향키 회전, 입구/소켓/측면/평면 시점
|
||
- 덮개 분리, 상부를 제거한 내부 보기, 윤곽선 표시
|
||
- DXF 벡터 도면 확대·이동 및 A-A/B-B 단면 비교
|
||
- 7개 규격의 변화치수표와 현재 Ø1,000 규격 표시
|
||
- OBJ 모델, 원본 DXF, 추출 근거 JSON 다운로드
|
||
- JavaScript 실행 전에도 미리 생성한 SVG 3D 형상 표시
|
||
|
||
## 도면에서 추출한 형상
|
||
|
||
현재 DXF의 제목은 `R2C관`, 연결 원심력관은 `Ø1000 일반 B형`입니다. 이전의 2,500 × 1,620 직사각형 관 모델은 교체했습니다.
|
||
|
||
| 항목 | 추출값 |
|
||
| --- | ---: |
|
||
| R2C 길이 L | 1,620 mm |
|
||
| 외형 폭 B | 1,540 mm |
|
||
| 외형 높이 H | 1,486 mm |
|
||
| 원형 유로 내경 D | 1,000 mm |
|
||
| 관 중심 높이 h6 | 666 mm |
|
||
| 사각 입구 | 1,310 × 1,205 mm |
|
||
| 사각→원형 전환 구간 | X = 100 ~ 1,400 mm |
|
||
| 소켓 구간 | X = 1,500 ~ 1,620 mm |
|
||
|
||
R2C의 A-A 외곽선과 치수표가 일치하는지 검증한 후 단면을 연결합니다. B-B 원호에서 소켓 반지름을 추출하며, 원심력관은 실제 폴리라인 `195`의 종단을 회전하여 만듭니다. 추출 근거에는 DXF 엔티티 핸들과 원본 파일 SHA-256이 남습니다.
|
||
|
||
2D 도면을 기반으로 단면 사이의 면을 직선 보간합니다. 상·하부 접합 홈, 철근, 개스킷은 3D에서 생략했습니다. 원본 SVG에는 외곽선·숨은선·원호·타원·스플라인·문자·치수 블록을 표시하고, 해치 채움과 SOLID 치수 화살표는 생략합니다.
|
||
|
||
이 프로그램은 **이 R2C 일반도의 구성에 맞춘 변환기**입니다. 임의의 모든 2D CAD 도면을 자동으로 3D화하는 범용 변환기가 아닙니다. 필수 단면이나 치수표를 찾지 못하면 오류로 종료합니다.
|
||
|
||
## 파일 구성 및 수정
|
||
|
||
- `r2c.py`: DXF 파서, 치수 추출, 모델 생성, SVG 변환, 웹 서버
|
||
- `web/viewer.html`: 웹페이지 원본 템플릿
|
||
- `tests/test_r2c.py`: 치수/단면/폐곡면/정적 패키지 검증
|
||
- `dist/`: 웹 게시 산출물 (`index.html`, `drawing.svg`, `model.json`, `model.obj`, 원본 DXF)
|
||
- `index.html`: 직접 열기용으로 함께 생성하는 단일 HTML
|
||
|
||
화면 수정은 `web/viewer.html`에 하고 `python3 r2c.py build`로 반영합니다.
|
||
|
||
```bash
|
||
python3 -m unittest discover -s tests -v
|
||
```
|