feat(B07): 표제란 축척 칸을 도면 축척 상수에서 채움
축척은 지어내는 값이 아니라 이미 정해져 있던 것 — `config_system` 의 도면별 축척 상수를 그대로 표제란에 싣는다. 도각이 `A1 = 1 :` 를 이미 찍으므로 **분모만** 낸다. - `scale_fields()` 신설 — A3 는 A1 도면을 절반으로 뽑는 종이라 분모가 2배. 가로·세로가 다른 도면(종단·토적)은 이름표를 붙여 함께 적는다. - 종단면도 `1000(H) · 200(V)` / 횡단면도 `100` / 유역도 `6000` / 토적도 `2000(H)`. A3 는 각각 2배. 담을 내용이 없는 빈 도면·표지는 축척이 없어 빈칸 그대로. 검증: `pytest tmp/tests/ -q` 135 passed / 0 failed(축척 2건 신규 — 상수 유래·A3 2배, 호출부가 넘긴 값이 도각에 실림). 백엔드 재시작 뒤 화면 실측(5174, wdw): 종단 `1000(H) · 200(V)`/`2000(H) · 400(V)`, 횡단 `100`/`200`, 유역도 `6000`/`12000`, 토적도 `2000(H)`/`4000(H)`, 표준도 빈칸. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -35,6 +35,7 @@ from B07_DesignDetail.B07_DesignDetail_Engine_Template import (
|
||||
compass_entities,
|
||||
entities_bbox,
|
||||
frame_entities,
|
||||
scale_fields,
|
||||
usable_area,
|
||||
)
|
||||
from config.config_system import DRAINAGE_RECOMMEND_DIAMETERS_MM, DRAWING_SCALE_BASIN
|
||||
@@ -400,7 +401,10 @@ def build_watershed_drawing(
|
||||
)
|
||||
entities.extend(
|
||||
frame_entities(
|
||||
drawing_id, entities_bbox(entities) or bbox, fit=False, fields={"도면명": "유역도"}
|
||||
drawing_id,
|
||||
entities_bbox(entities) or bbox,
|
||||
fit=False,
|
||||
fields={"도면명": "유역도", **scale_fields(("", DRAWING_SCALE_BASIN))},
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -44,6 +44,7 @@ from B07_DesignDetail.B07_DesignDetail_Engine_Cad import (
|
||||
from B07_DesignDetail.B07_DesignDetail_Engine_Template import (
|
||||
entities_bbox,
|
||||
frame_entities,
|
||||
scale_fields,
|
||||
)
|
||||
from common_util.common_util_route_profile import design_elevation_from_longitudinal
|
||||
from config.config_system import DRAWING_SCALE_LONG_H, DRAWING_SCALE_LONG_V
|
||||
@@ -669,7 +670,17 @@ def build_longitudinal_drawing(
|
||||
# A1 도각: 콘텐츠가 이미 종이 mm라 도각도 실치수(1:1)로 두고 위치만 맞춘다.
|
||||
bbox = entities_bbox(entities)
|
||||
if bbox:
|
||||
entities.extend(frame_entities(drawing_id, bbox, fit=False, fields={"도면명": "종단면도"}))
|
||||
entities.extend(
|
||||
frame_entities(
|
||||
drawing_id,
|
||||
bbox,
|
||||
fit=False,
|
||||
fields={
|
||||
"도면명": "종단면도",
|
||||
**scale_fields(("H", DRAWING_SCALE_LONG_H), ("V", DRAWING_SCALE_LONG_V)),
|
||||
},
|
||||
)
|
||||
)
|
||||
|
||||
return {
|
||||
"format": DRAWING_FORMAT,
|
||||
|
||||
@@ -34,7 +34,11 @@ from B07_DesignDetail.B07_DesignDetail_Engine_Cad import (
|
||||
polyline_entity,
|
||||
station_no_label,
|
||||
)
|
||||
from B07_DesignDetail.B07_DesignDetail_Engine_Template import entities_bbox, frame_entities
|
||||
from B07_DesignDetail.B07_DesignDetail_Engine_Template import (
|
||||
entities_bbox,
|
||||
frame_entities,
|
||||
scale_fields,
|
||||
)
|
||||
from config.config_system import (
|
||||
DRAWING_SCALE_MASSHAUL_H,
|
||||
DRAWING_SCALE_MASSHAUL_V_M3_MM,
|
||||
@@ -519,7 +523,10 @@ def build_mass_haul_drawing(
|
||||
)
|
||||
entities.extend(
|
||||
frame_entities(
|
||||
drawing_id, entities_bbox(entities) or bbox, fit=False, fields={"도면명": "토적도"}
|
||||
drawing_id,
|
||||
entities_bbox(entities) or bbox,
|
||||
fit=False,
|
||||
fields={"도면명": "토적도", **scale_fields(("H", DRAWING_SCALE_MASSHAUL_H))},
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -31,8 +31,10 @@ from B07_DesignDetail.B07_DesignDetail_Engine_Cad_Table import (
|
||||
from B07_DesignDetail.B07_DesignDetail_Engine_Template import (
|
||||
entities_bbox,
|
||||
frame_entities,
|
||||
scale_fields,
|
||||
usable_area,
|
||||
)
|
||||
from config.config_system import DRAWING_SCALE_CROSS
|
||||
|
||||
# 장 도면 id — 측점 도면(cross_00020m)과 겹치지 않게 `s`를 끼운다(cross_s00020m).
|
||||
# 옛 순번 형식(cross_s01)도 읽어 준다 — 이미 확정한 매니페스트가 그 이름을 갖고 있다.
|
||||
@@ -209,7 +211,14 @@ def build_cross_sheet(sheet: dict[str, Any], sections: list[dict[str, Any]]) ->
|
||||
|
||||
bbox = entities_bbox(entities)
|
||||
if bbox:
|
||||
entities.extend(frame_entities(sheet["id"], bbox, fit=False, fields={"도면명": "횡단면도"}))
|
||||
entities.extend(
|
||||
frame_entities(
|
||||
sheet["id"],
|
||||
bbox,
|
||||
fit=False,
|
||||
fields={"도면명": "횡단면도", **scale_fields(("", DRAWING_SCALE_CROSS))},
|
||||
)
|
||||
)
|
||||
|
||||
return {
|
||||
"format": DRAWING_FORMAT,
|
||||
|
||||
@@ -304,6 +304,23 @@ def _fill_placeholders(
|
||||
]
|
||||
|
||||
|
||||
def scale_fields(*denominators: tuple[str, int]) -> dict[str, str]:
|
||||
"""축척 칸(`{{축척_A1}}`·`{{축척_A3}}`)에 넣을 값.
|
||||
|
||||
도각이 `A1 = 1 :` 를 이미 찍으므로 **분모만** 낸다. A3 는 A1 도면을 절반으로 뽑는
|
||||
종이라 분모가 2배다. 가로·세로 축척이 다른 도면(종단·토적)은 이름표를 붙여 함께 적는다.
|
||||
값은 `config_system` 의 축척 상수에서 오며 여기서 새로 정하지 않는다.
|
||||
"""
|
||||
|
||||
def text(factor: int) -> str:
|
||||
return " · ".join(
|
||||
f"{denominator * factor}({name})" if name else str(denominator * factor)
|
||||
for name, denominator in denominators
|
||||
)
|
||||
|
||||
return {"축척_A1": text(1), "축척_A3": text(2)}
|
||||
|
||||
|
||||
def frame_entities(
|
||||
drawing_id: str,
|
||||
content_bbox: tuple[float, float, float, float],
|
||||
|
||||
Reference in New Issue
Block a user