fix(B08): 층따기 밑수를 원지반 표면 길이로 갈아 끼움 (사용자 확정 ⑦)
⚠ **면이 달랐음.** 층따기는 성토부 **아래 원지반**을 계단으로 깎는 일인데(교본 6장 4절) 우리는 **성토 비탈면 길이**를 밑수로 쓰고 있었음. 값이 나오므로 아무 시험도 안 잡던 자리. B06 설계가 측점마다 내는 `design.bench_cut_length_m`(원지반 표면의 경사길이, 원지반 횡단기울기 1:4 보다 급한 조각만)를 그대로 밑수로 씀. 면적은 종전대로 **평균단면적법**. ⚠ 값이 없는 측점은 **0** — 성토 사면길이로 대신 채우지 않음(다른 면을 세게 됨). ⚠ 단위는 **㎡ 그대로**(사용자 확정 ⑦). ㎥ 로 바꾸지 않음 — 단의 높이·폭은 설계도서 값이라 지어낼 수 없음. 앞서 「품셈 밑수가 ㎥ 라 못 곱함」으로 막아 둔 자리는 이 확정으로 풀림. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -86,8 +86,11 @@ def _length_of(slope: StationSlope, series: str, face: str) -> float:
|
||||
법면보호공은 면고르기를 참조한다 — 같은 사면길이를 쓴다. 끊고 싶으면 이 함수만 고친다.
|
||||
층따기는 성토면만 대상이다.
|
||||
"""
|
||||
if series == "bench_cut" and face != "fill":
|
||||
return 0.0
|
||||
if series == "bench_cut":
|
||||
# ⚠ 층따기는 **원지반 표면**을 깎는 일이라 밑수가 성토 비탈면이 아니다
|
||||
# (교본 6장 4절). B06 설계가 측점마다 내는 값을 그대로 쓴다.
|
||||
# 없으면 0 — 성토 사면길이로 대신 채우면 **다른 면을 세게 된다**(2026-09-09 정정).
|
||||
return slope.bench_cut_length_m if face == "fill" else 0.0
|
||||
return slope.fill_length_m if face == "fill" else slope.cut_length_m
|
||||
|
||||
|
||||
|
||||
@@ -58,6 +58,12 @@ class StationSlope:
|
||||
chainage_m: float
|
||||
cut_length_m: float = 0.0
|
||||
fill_length_m: float = 0.0
|
||||
#: 층따기 밑수 — **원지반 표면**의 경사길이(m). B06 설계가 측점마다 낸다
|
||||
#: (`design.bench_cut_length_m`, 2026-09-09 랩탑 메인).
|
||||
#: ⚠ **성토 비탈면 길이와 다른 면이다** — 층따기는 성토부 **아래 원지반**을 계단으로
|
||||
#: 깎는 일이라(교본 6장 4절) 비탈면이 아니라 지표면을 따라간다. 앞서 성토 사면길이를
|
||||
#: 밑수로 쓰고 있었는데 **면이 달랐다.**
|
||||
bench_cut_length_m: float = 0.0
|
||||
berm_width_m: float = 0.0
|
||||
# 성토고(m) — 성토 사면 조각들의 **수직 낙차 합**. 노면 끝에서 원지반까지 내려간 높이다.
|
||||
# ⚠ 좌우가 다르면 **큰 쪽**을 쓴다. 「중심점 성토고 5m 이상」(품셈 11-3 [주]①) 판정은
|
||||
@@ -216,6 +222,8 @@ def station_slope(chainage_m: float, design: dict[str, Any]) -> StationSlope:
|
||||
chainage_m=float(chainage_m),
|
||||
cut_length_m=sum(s.length_m for s in segments if s.role == "cut"),
|
||||
fill_length_m=sum(s.length_m for s in segments if s.role == "fill"),
|
||||
# ⚠ 없는 측점은 0 이다 — 성토 사면길이로 **대신 채우지 않는다**(면이 다름).
|
||||
bench_cut_length_m=_num(design.get("bench_cut_length_m")) or 0.0,
|
||||
fill_height_m=max(fill_by_side.values(), default=0.0),
|
||||
berm_width_m=_num(berm.get("width_m")) or 0.0,
|
||||
segments=tuple(segments),
|
||||
|
||||
Reference in New Issue
Block a user