Files
drawing3d-web/SPEC.md
T
오문성andClaude Haiku 5.5 4d21c3bb08 KIT: 이슈별 검사 파일 checks/ — 여러 하이쿠 동시 작업 준비
이슈마다 검사를 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>
2026-10-30 13:39:08 +09:00

2.6 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 가 합격 판정이다. 검사를 먼저 커밋하고 그 뒤 구현한다.
  • 이슈 #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 명령 제외).