이슈마다 검사를 checks/ 의 파일 하나로 두어, 여러 이슈를 다른 폴더(git worktree)에서 동시에 해도 check.sh 가 충돌하지 않게 함. 코치가 저장소 밖 사본에서 통과·실패· 오류 파일·부분 검사·두 브랜치 합치기를 시험함. check.sh 마지막 줄: 결과: PASS 153 / FAIL 0 / SKIP 3 (검사 범위 F01~F47) Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
42 lines
2.6 KiB
Markdown
42 lines
2.6 KiB
Markdown
# 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<N>_<짧은이름>.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 명령 제외).
|