feat(B07): 유역도 정보표 측점 표기도 n+ 0.0 으로 통일
토적도만 납품 표기(`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) <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user