R2C DXF → 3D 웹 뷰어
drawing/R2C_일반도_20260601.dxf를 읽어 단면 기반 3D 모델, 원본 벡터 도면, 독립 HTML 페이지를 생성하고 웹 서버로 게시하는 Python 프로그램입니다. Python 3.9 이상에서 외부 패키지 없이 실행합니다.
실행 및 로컬 웹 게시
WSL 터미널에서 다음 명령을 실행합니다.
cd /home/b19203/3d-drawing-web
python3 r2c.py serve
브라우저에서 http://localhost:8000 을 엽니다. 서버 종료는 Ctrl+C입니다. 실행할 때마다 DXF에서 모델과 웹페이지를 다시 생성합니다. 생성된 루트 index.html은 더블클릭해서 직접 열 수도 있습니다.
다른 포트 또는 로컬 네트워크에 게시하려면 다음처럼 실행합니다.
python3 r2c.py serve --host 0.0.0.0 --port 8080
다른 기기에서는 이 PC의 IP 주소와 포트로 접속합니다. WSL의 네트워크 모드 및 Windows 방화벽 설정에 따라 접근 범위가 달라집니다. 서버는 생성된 dist/만 제공하므로 저장소의 Git 파일이나 프로그램 소스를 노출하지 않습니다.
정적 호스팅에 게시
python3 r2c.py build
생성된 dist/ 폴더 전체를 정적 웹 호스팅의 게시 폴더로 지정하면 됩니다. 빌드 후 웹 서버 측 Python이나 CAD 소프트웨어는 필요하지 않습니다. HTML은 모델과 벡터 도면을 포함하고 외부 CDN을 사용하지 않습니다.
입력 및 출력 경로를 바꾸려면 다음 옵션을 사용합니다.
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로 반영합니다.
python3 -m unittest discover -s tests -v