feat(B07): 표준도 도면에 하단표를 실제로 그림 — 빈 도각에서 표 넉 장으로

「표준도」를 누르면 도각만 실린 빈 장이 뜨던 것을, 제원 조합마다 표 한 벌을
CAD 표 객체로 그려 낸다. 도각은 두르지 않음(2026-09-08 사용자 지시).

값은 여기서 셈하지 않음 — `build_standard_sheets` 가 낸 것을 글자로 옮길 뿐임.
셈이 두 벌이 되면 도면과 수량서가 갈림(CLAUDE.md 5장).

실화면 확인 (프로젝트 936be972, 구조물 5기를 심고 확인)
  장 4개 · 개소 5 — ①③ 이 같은 제원이라 한 장에 2개소로 모임(장 나눔 실물 증명)
  돌쌓기(찰) H=2.5 뒷길이 45㎝ 깬돌   12줄  2개소·합 20.00m
  돌쌓기(메) H=2.0 뒷길이 35㎝ 야면석 10줄  1개소
  옹벽 H=2.0                          7줄  1개소 (관측 원단위 사유 1줄)
  큰돌쌓기 H=2.5                       5줄  1개소 (막힌 사유 4줄이 표에 그대로 뜸)

⚠ 만들다 잡은 것 — 표 폭을 176㎜ 로 냈더니 단서가 붙은 근거 문구(물구멍관·버림
콘크리트)가 칸을 넘어 수량 칸을 덮었음. 표는 글자를 안 접음. A1 작도 영역
739 × 499㎜ 에 맞춰 735㎜ 로 넓히고 줄 높이 9㎜ 로 잡음 —
**네 장까지** 한 면에 듦(47줄 × 9 + 간격 = 465㎜). 더 늘면 장 나눔(㉢)이 필요함.

⚠ 못 낸 값은 0 이 아니라 「-」 로 적음. 도면에 0 이 찍히면 「없다」로 읽힘.
⚠ 구조물이 없으면 빈 격자 대신 사유 한 줄이 뜸 — 빈 표는 「만들다 만 것」으로 보임.

자체검증 — 회귀 573 통과 · 0 실패. 공용 브라우저에서 표준도를 눌러 실제로 열고
확대해 글자·수치를 읽어 확인함(스크린샷 `tmp/browser/shots/standard_fit.png`).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-08 19:44:17 +09:00
co-authored by Claude Opus 5
parent 83e63c70a6
commit 16c61add02
2 changed files with 195 additions and 1 deletions
@@ -47,6 +47,7 @@ from B07_DesignDetail.B07_DesignDetail_Engine_Cad_Sheet import (
plan_cross_sheets,
section_block_size,
)
from B07_DesignDetail.B07_DesignDetail_Engine_Cad_StandardSheet import standard_drawing_for
from B07_DesignDetail.B07_DesignDetail_Engine_Cad_Standard import (
STANDARD_LABEL,
build_standard_cross_drawing,
@@ -444,8 +445,12 @@ def _read_drawing(
table = stored_table if kind == "cross" and isinstance(stored_table, dict) else None
return kind, label, saved, True, table
if drawing_id in BLANK_LABELS:
# 아직 내용을 만들지 않은 도면 — 도각만 실어 연다. 확정 대상이 아니다.
label = BLANK_LABELS[drawing_id]
if drawing_id == "blank_standard":
# 표준도 — 이제 하단표를 싣는다(2026-09-09). 도각은 두르지 않는다(사용자 지시).
drawing = standard_drawing_for(project_root, drawing_id, label)
return "blank", label, drawing, False, None
# 아직 내용을 만들지 않은 도면 — 도각만 실어 연다. 확정 대상이 아니다.
return "blank", label, build_blank_drawing(drawing_id, label), False, None
if drawing_id == COVER_ID: