From e29e3cab677f320dbcd8b10f1118b17e42d613a1 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Thu, 3 Sep 2026 16:09:14 +0900 Subject: [PATCH] =?UTF-8?q?feat(B07):=20=EC=9C=A0=EC=97=AD=EB=8F=84=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=ED=91=9C=20=EC=B8=A1=EC=A0=90=20=ED=91=9C?= =?UTF-8?q?=EA=B8=B0=EB=8F=84=20`n+=200.0`=20=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 토적도만 납품 표기(`120+ 0.0`)로 바꿔 두어 유역도 정보표는 `No.6` 으로 남아 있었다 (2026-09-03 사용자 지시로 통일). `station_plus_label()` 을 토적도 전용 모듈에서 공용 `_Engine_Cad` 로 올려 두 도면이 같은 함수를 쓴다. 종단도 표·횡단도 제목의 `No.n` 표기는 그대로 둔다 — 이번 지시 범위가 아니다. 검증 — 유역도 정보표 첫 줄 `(1) No.6` → `(1) 6+ 0.0`. pytest 383 passed·17 skipped, ruff format 무변경. Co-Authored-By: Claude Opus 5 (1M context) --- B07_DesignDetail/B07_DesignDetail_Engine_Cad.py | 15 +++++++++++++++ .../B07_DesignDetail_Engine_Cad_Basin.py | 5 +++-- .../B07_DesignDetail_Engine_Cad_MassHaul.py | 16 +--------------- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/B07_DesignDetail/B07_DesignDetail_Engine_Cad.py b/B07_DesignDetail/B07_DesignDetail_Engine_Cad.py index 14e47164..93daca79 100644 --- a/B07_DesignDetail/B07_DesignDetail_Engine_Cad.py +++ b/B07_DesignDetail/B07_DesignDetail_Engine_Cad.py @@ -264,6 +264,21 @@ def infer_station_interval(stations: list[dict[str, Any]]) -> float: return max(counts.items(), key=lambda pair: (pair[1], pair[0]))[0] +def station_plus_label(chainage_m: float, interval_m: float, decimals: int = 1) -> str: + """납품 도면 측점 표기 — `120+ 0.0` (M.N 은 소수 2자리 `0+16.90`). + + 종전에는 `No.120` 이었다. 납품 도면과 표기를 맞춘다(2026-09-03 사용자 확정). + """ + safe = interval_m if interval_m > 0 else 1.0 + number = int((chainage_m + 1e-6) // safe) + remainder = chainage_m - number * safe + if remainder >= safe - 0.05: + number += 1 + remainder = 0.0 + gap = " " if decimals == 1 else "" + return f"{number}+{gap}{remainder:.{decimals}f}" + + def station_no_label(chainage_m: float, interval_m: float) -> str: """납품 도면 측점 표기: No.n (비정규 측점은 No.n+잔여거리).""" safe = interval_m if interval_m > 0 else 1.0 diff --git a/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Basin.py b/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Basin.py index e79f7336..271f75cd 100644 --- a/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Basin.py +++ b/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Basin.py @@ -28,7 +28,7 @@ from B07_DesignDetail.B07_DesignDetail_Engine_Cad import ( _layer, _text_entity, polyline_entity, - station_no_label, + station_plus_label, table_entity, ) from B07_DesignDetail.B07_DesignDetail_Engine_Template import ( @@ -226,7 +226,8 @@ def _info_box_entities( 선과 문자를 따로 두지 않는다 — 표로 두어야 나중에 DXF의 표로 나갈 수 있다. """ - station = station_no_label(_number(props.get("chainage_m")), interval_m) + # 측점 표기는 납품 도면과 같은 `n+ 0.0` 형식(2026-09-03 사용자 확정 — 토적도와 통일). + station = station_plus_label(_number(props.get("chainage_m")), interval_m) values = { "area": f"{_number(props.get('area_m2')) / 10000.0:.2f} ha", "relief": f"{_format(_number(props.get('relief_m')), 1)} m", diff --git a/B07_DesignDetail/B07_DesignDetail_Engine_Cad_MassHaul.py b/B07_DesignDetail/B07_DesignDetail_Engine_Cad_MassHaul.py index 899f52b1..18df4f9b 100644 --- a/B07_DesignDetail/B07_DesignDetail_Engine_Cad_MassHaul.py +++ b/B07_DesignDetail/B07_DesignDetail_Engine_Cad_MassHaul.py @@ -33,6 +33,7 @@ from B07_DesignDetail.B07_DesignDetail_Engine_Cad import ( _text_entity, infer_station_interval, polyline_entity, + station_plus_label, ) from B07_DesignDetail.B07_DesignDetail_Engine_Template import ( entities_bbox, @@ -113,21 +114,6 @@ _TABLE_LABEL_FONT_SIZE = 3.2 # 행 이름은 본문보다 크게(납품 도면 _TABLE_TOP_GAP = 6.0 # 그래프 최저점과 테이블 사이 간격(mm) -def station_plus_label(chainage_m: float, interval_m: float, decimals: int = 1) -> str: - """납품 도면 측점 표기 — `120+ 0.0` (M.N 은 소수 2자리 `0+16.90`). - - 종전에는 `No.120` 이었다. 납품 도면과 표기를 맞춘다(2026-09-03 사용자 확정). - """ - safe = interval_m if interval_m > 0 else 1.0 - number = int((chainage_m + 1e-6) // safe) - remainder = chainage_m - number * safe - if remainder >= safe - 0.05: - number += 1 - remainder = 0.0 - gap = " " if decimals == 1 else "" - return f"{number}+{gap}{remainder:.{decimals}f}" - - def _number(value: Any, fallback: float = 0.0) -> float: return float(value) if isinstance(value, (int, float)) else fallback