이슈 #1 중 코치 몫(SPEC·CLAUDE·검사). - SPEC.md: 지금 지킬 규약만 남긴 새 판 - CLAUDE.md: 이슈 방식 작업 규칙 (하이쿠용) - check.sh: F17 기준을 짧은 README 기준으로 바꾸고 이슈 #1 완료 기준 F47 추가 코치가 저장소 밖 시험 사본(별도 README 참조안)으로 F47 이 통과 가능함을 확인. 이 저장소에서는 README·FEATURES·PROGRESS 작업 전이라 지금 F47 이 실패하는 것이 정상. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2.3 KiB
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가 합격 판정이다. 검사를 먼저 커밋하고 그 뒤 구현한다.- 기준값은 도면에서 가져온다. 코드에서 역산하지 않는다.
- 변조 시험: 도면을 바꾸면 결과도 그만큼 바뀌어야 한다(하드코딩 방지).
6. 공개 규칙
커밋하는 도면은 private/drawing.dxf·drawing.svg·drawing_gen.svg 뿐. 원본 DWG·지명·과업명·실제 좌표는 넣지 않는다.
7. 금지
화면 코드: 라이브러리·CDN·import·외부 URL. 도구: 표준 라이브러리만(LibreDWG 명령 제외).