From 35b70dd4c5113734fb4fd700f07a948d27a8bbb0 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sun, 30 Aug 2026 17:22:26 +0900 Subject: [PATCH] =?UTF-8?q?fix(B07):=20=EB=8F=84=EA=B0=81=20=EC=95=88?= =?UTF-8?q?=EC=AA=BD=EC=9D=84=20=EC=B1=84=EC=9A=B0=EA=B3=A0,=20=EC=88=98?= =?UTF-8?q?=EB=9F=89=ED=91=9C=EB=A5=BC=20=ED=95=9C=20=EC=A4=84=EB=A1=9C=20?= =?UTF-8?q?=EC=84=B8=EC=9A=B4=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 여백이 많다는 지적. 도각 안쪽 작도영역(770x594)에서 5%를 떼고 배치해 사방에 70mm 가까이가 비었다. 2%로 줄이니 같은 블록으로 3장이 2장이 된다(16/7). 표가 제각각 높이에 뜨던 것은 블록을 칸 한가운데 놓았기 때문이다. 수량표 높이는 모든 블록이 같으므로 칸 아래 변에 맞춰 놓으면 표가 한 줄로 선다. 단면 높이 차이는 위쪽이 흡수한다. Co-Authored-By: Claude Opus 5 (1M context) --- .../B07_DesignDetail_Engine_Cad_Sheet.py | 15 ++++++++++----- .../B07_DesignDetail_Engine_Template.py | 4 +++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Sheet.py b/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Sheet.py index 6eca6c62..105614d8 100644 --- a/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Sheet.py +++ b/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Sheet.py @@ -112,14 +112,18 @@ def _pack( def _slots(col_widths: list[float], row_heights: list[float], count: int) -> list[list[float]]: - """칸 중심 좌표 — 좌하단부터 아래→위로 채우고, 열이 차면 오른쪽 열로 넘어간다.""" + """칸의 (가로 중심, 아래 변) — 좌하단부터 아래→위로 채우고, 열이 차면 오른쪽 열. + + 세로는 중심이 아니라 **아래 변**을 준다. 수량표 높이는 모든 블록이 같으므로 + 아래를 맞추면 같은 행의 표가 한 줄로 선다(2026-08-30 사용자: 표는 행·열을 맞춘다). + """ usable_w, usable_h = usable_area() rows = len(row_heights) slots: list[list[float]] = [] for index in range(count): column, row = divmod(index, rows) x = -usable_w / 2.0 + sum(col_widths[:column]) + col_widths[column] / 2.0 - y = -usable_h / 2.0 + sum(row_heights[:row]) + row_heights[row] / 2.0 + y = -usable_h / 2.0 + sum(row_heights[:row]) slots.append([x, y]) return slots @@ -179,11 +183,12 @@ def build_cross_sheet(sheet: dict[str, Any], sections: list[dict[str, Any]]) -> if bbox is None: continue min_x, min_y, max_x, max_y = bbox - center_x, center_y = slots[index] - # 2) 칸 가운데에 오도록 원점을 옮겨 다시 만든다. + center_x, bottom_y = slots[index] + # 2) 가로는 칸 가운데, 세로는 칸 아래 변에 맞춰 원점을 옮겨 다시 만든다. + # 아래를 맞춰야 같은 행의 수량표가 한 줄로 선다. origin = ( center_x - (min_x + max_x) / 2.0, - center_y - (min_y + max_y) / 2.0, + bottom_y + _BLOCK_GAP_MM / 2.0 - min_y, ) placed = build_cross_drawing( section["source"], diff --git a/B07_DesignDetail/B07_DesignDetail_Engine_Template.py b/B07_DesignDetail/B07_DesignDetail_Engine_Template.py index b8db14a0..12783025 100644 --- a/B07_DesignDetail/B07_DesignDetail_Engine_Template.py +++ b/B07_DesignDetail/B07_DesignDetail_Engine_Template.py @@ -29,7 +29,9 @@ A1_TEMPLATE = "00_template_A1" COMPASS_TEMPLATE = "00_template_compass" # 유역도 등 평면 도면의 방위표 # A1 내부 작도 영역(템플릿 좌표) — 콘텐츠가 이 영역 중앙에 오도록 배치한다. _A1_INNER = (42.0, 47.0, 812.0, 567.0) -_CONTENT_MARGIN = 0.05 # 내부 작도 영역 대비 콘텐츠 여백 비율(각 방향 5%) +# 내부 작도 영역 대비 콘텐츠 여백 비율(각 방향). 5%는 도각 안쪽에 70mm 가까이를 +# 비워 횡단 장이 한 장 더 늘었다 — 2%로 줄여 작도 영역을 쓴다(2026-08-30 사용자). +_CONTENT_MARGIN = 0.02 @lru_cache(maxsize=8)