# drawing3d-web 설계 규약 지금 지켜야 할 규약만 둔다. **작업 목록·설계 배경·결정 이력은 Gitea 이슈**에 있고, 옛 설계서(34장)는 git 이력(9068b6c)에 남아 있다. ## 1. 무엇 원형 수직구 일반도(DWG) 한 장을 도구가 읽어 3D 데이터(`model_extracted.js`)와 도면 그림(`private/drawing_gen.svg`)을 만들고, `index.html` 이 라이브러리 없이 Canvas 2D 로 보여 준다. `model.js` 는 손으로 만든 정답 모델 — 검사 기준이자 `answer.html` 화면. ## 2. 좌표·단위 mm, z 위 +, 지표 z 0. 각도는 X축에서 반시계, 도. 모델 XY 는 슬래브 평면 틀이다(평면도는 −30.3° 돌아 있어 views 의 `rot_deg`). 도면 DXF 좌표는 공개용으로 평행이동된 값이다. ## 3. 데이터 형식 `const MODEL = {순수 JSON};` — `units` "mm", `parts[]`, `drawing{src, viewBox, fit, section, plan, views[]}`. 부재 공통 `id·kind·type·name·color`. type 별: | type | 필드 | |---|---| | disc | cx cy r z0 z1 (holes) | | ring | cx cy r_in r_out z0 z1 | | pipe | x y z angle_deg length r_in r_out | | fill | x y z angle_deg length r v0 v1 half_width | | stair | z_low z_high risers first_riser riser tread x_top dir y0 y1 | | prism | polygon z0 z1 (holes) | | zone | r x_min x_max z0 z1 alpha | | ladder | x0 x1 yc width z0 z1 rung (angle_deg) | | obox | cx cy angle_deg s0 s1 t0 t1 z0 z1 | | railing | z h paths | ## 4. 도면 → 데이터 (`tools/`) `bash tools/make_model.sh`: DWG → DXF(GNU LibreDWG) → `views.json` 의 그림 상자만 → `extract_from_dxf.py`(+ 도면에 없는 값은 `design_rules.json`) → `model_extracted.js`, `dxf_to_svg.py` → `drawing_gen.svg`. 규칙의 근거는 코드 주석과 이슈. ## 5. 검사 원칙 - `check.sh` 가 합격 판정이다. 검사를 먼저 커밋하고 그 뒤 구현한다. - 이슈 #N 의 검사는 `checks/i_<짧은이름>.py` 한 파일에 `check(ok, 메시지)` 로 쓴다. check.sh 가 번호 순으로 모아 돌린다(F01~F47 은 1차 검사로 check.sh 안). 이슈끼리 파일이 겹치지 않아 여러 이슈를 동시에 할 수 있다. - 기준값은 도면에서 가져온다. 코드에서 역산하지 않는다. - 변조 시험: 도면을 바꾸면 결과도 그만큼 바뀌어야 한다(하드코딩 방지). ## 6. 공개 규칙 커밋하는 도면은 `private/drawing.dxf`·`drawing.svg`·`drawing_gen.svg` 뿐. 원본 DWG·지명·과업명·실제 좌표는 넣지 않는다. ## 7. 금지 화면 코드: 라이브러리·CDN·import·외부 URL. 도구: 표준 라이브러리만(LibreDWG 명령 제외).