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