fix(B07): 빈 도면의 "작도 영역을 넘습니다" 경고 제거
빈 도면 7종이 도각만 두르는데도 경고를 냈음 — `build_blank_drawing()` 이 콘텐츠 bbox 로 작도 영역(`_A1_INNER`, 770×520mm)을 그대로 넘겼고, 검사 기준은 여백을 뺀 수용 한도(739×499mm)라 담을 내용이 없는데도 넘친 것으로 잡혔음. - `usable_bbox()` 신설 — 작도 영역 한가운데의 수용 한도 크기 bbox. 중심이 같아 도각 배치(이동량 0)는 그대로. - 한도와 **같은** 크기는 넘친 것이 아니므로 비교에 부동소수 여유(1e-6)를 둠. 한도를 그대로 넘기면 마지막 자리 오차로 경고가 났음. 검증: `pytest tmp/tests/ -q` 138 passed / 0 failed(경고 없음을 잠그는 1건 신규). 백엔드 재시작 뒤 화면 실측(5174, wdw): 빈 도면 7종 전부 200, 새 서버 로그의 "작도 영역을 넘습니다" **0건**. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -259,6 +259,19 @@ def compass_entities(
|
||||
]
|
||||
|
||||
|
||||
def usable_bbox() -> tuple[float, float, float, float]:
|
||||
"""작도 영역 한가운데에 놓인 **수용 한도 크기**의 빈 bbox.
|
||||
|
||||
담을 내용이 없는 도면(빈 도면)이 도각만 두를 때 쓴다. `_A1_INNER`를 그대로 넘기면
|
||||
여백을 뺀 한도(`usable_area()`)보다 커서 "작도 영역을 넘습니다" 경고가 뜬다 —
|
||||
내용이 없는데 넘칠 리 없다. 중심이 같으므로 도각 배치(이동량 0)는 그대로다.
|
||||
"""
|
||||
ix0, iy0, ix1, iy1 = _A1_INNER
|
||||
width, height = usable_area()
|
||||
cx, cy = (ix0 + ix1) / 2.0, (iy0 + iy1) / 2.0
|
||||
return (cx - width / 2.0, cy - height / 2.0, cx + width / 2.0, cy + height / 2.0)
|
||||
|
||||
|
||||
def usable_area() -> tuple[float, float]:
|
||||
"""A1 내부 작도 영역에서 여백을 뺀 유효 크기(mm). 척도 고정 도면의 수용 한도."""
|
||||
ix0, iy0, ix1, iy1 = _A1_INNER
|
||||
@@ -344,7 +357,9 @@ def frame_entities(
|
||||
ix0, iy0, ix1, iy1 = _A1_INNER
|
||||
usable_w, usable_h = usable_area()
|
||||
scale = max(content_w / usable_w, content_h / usable_h) if fit else 1.0
|
||||
if not fit and (content_w > usable_w or content_h > usable_h):
|
||||
# 한도와 **같은** 크기는 넘친 것이 아니다 — 부동소수 오차만큼의 여유를 둔다
|
||||
# (수용 한도를 그대로 넘기는 빈 도면이 마지막 자리 오차로 경고를 냈다).
|
||||
if not fit and (content_w > usable_w + 1e-6 or content_h > usable_h + 1e-6):
|
||||
logger.warning(
|
||||
"도면 콘텐츠가 A1 작도 영역을 넘습니다: %s (%.0fx%.0f mm > %.0fx%.0f mm)",
|
||||
drawing_id,
|
||||
|
||||
Reference in New Issue
Block a user