Files
drawing3d-web/SPEC.md
T
오문성andClaude Haiku 5.5 bdd296597a KIT: 이슈 방식으로 — 새 SPEC·CLAUDE.md, #1 완료 기준 검사 (#1)
이슈 #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>
2026-10-27 16:24:59 +09:00

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 명령 제외).