diff --git a/E05_StabReport/E05_StabReport_Rock.py b/E05_StabReport/E05_StabReport_Rock.py index c7ef1fe90..5c2ef3eae 100644 --- a/E05_StabReport/E05_StabReport_Rock.py +++ b/E05_StabReport/E05_StabReport_Rock.py @@ -59,7 +59,7 @@ def _summary(rock: dict[str, Any]) -> str: def fill_rock(sheet: dict[str, Any], rock: dict[str, Any], labels: dict) -> None: - """s11 — 1. 조건 · 요약(5~9 행) · 2. 절리군(한 줄씩 · 13 행 서식) · 3. 측점(17 행 서식).""" + """s11 — 1. 조건 · 요약(5~9 행) · 2. 절리군(한 줄씩 · 13 행 서식) · 3. 측점(17 행 서식 · 머리 줄 쪽마다).""" s = rock["settings"] d = rock_model.DEFAULT_SETTINGS lateral = (s["lateral_planar_deg"], s["lateral_toppling_deg"]) @@ -143,6 +143,7 @@ def fill_rock(sheet: dict[str, Any], rock: dict[str, Any], labels: dict) -> None # 3. 측점별 판정 r = head(r + 1, 15) + sheet["인쇄"]["머리행"] = [r - 1, r - 1] # 측점 표 머리 줄 = 쪽마다 for entry in rock["stations"]: r = _station_rows(sheet, put_row, r, entry, labels) diff --git a/E06_StabRock/E06_StabRock_Model.py b/E06_StabRock/E06_StabRock_Model.py index 95e57df69..d67907ac5 100644 --- a/E06_StabRock/E06_StabRock_Model.py +++ b/E06_StabRock/E06_StabRock_Model.py @@ -274,7 +274,7 @@ def _gamma_for(resolved: dict | None, materials: dict, override: float | None) - def _fmt(value: float | None) -> float | None: if value is None or not math.isfinite(value): return None - return round(value, 4) + return round(value, 4) + 0.0 # -0.0 → 0.0(들림 · 볼트 없음) def _cases_for(slope: dict, joints: list[dict], kin: dict, settings: dict, gamma: float, conds): diff --git a/resources/master_template/report/stab_report.json b/resources/master_template/report/stab_report.json index 4128cb5bc..1b9d49ef2 100644 --- a/resources/master_template/report/stab_report.json +++ b/resources/master_template/report/stab_report.json @@ -4071,7 +4071,7 @@ "폭": 14 }, "B": { - "폭": 26 + "폭": 33 }, "C": { "폭": 16 diff --git a/resources/master_template/report/stab_report_slots.md b/resources/master_template/report/stab_report_slots.md index f9028a20b..4fdae58dd 100644 --- a/resources/master_template/report/stab_report_slots.md +++ b/resources/master_template/report/stab_report_slots.md @@ -117,7 +117,7 @@ - 6 행 · 10 행 서식을 줄마다 복사 · 저장본 = (측점 · 종류 · 비탈)마다 가장 최근 하나. -## s11 암반검토 (프로그램 몫 · E06 암반 해석 저장본 · 없으면 시트를 뺌) +## s11 암반검토 (프로그램 몫 · E06 암반 해석 저장본 · 없으면 시트를 뺌 · 측점 표 머리 줄 쪽마다 반복) | 칸 | 내용 | | --- | --- | diff --git a/resources/tester/test_536_1_e06_rock.py b/resources/tester/test_536_1_e06_rock.py index f2e37b3a9..9bfdfd844 100644 --- a/resources/tester/test_536_1_e06_rock.py +++ b/resources/tester/test_536_1_e06_rock.py @@ -227,6 +227,11 @@ def test_wedge_gravity_water_and_bolt(): assert bolted["F"] > dry["F"] +def test_fmt_negative_zero(): + assert str(model._fmt(-0.0)) == "0.0" # 들림 · 볼트 없음 = 0(「-0.0」 아님) + assert model._fmt(math.inf) is None + + def test_wedge_not_formed(): # 교선이 사면보다 가파름 → 사면으로 안 나옴 assert _wedge((141, 75), (219, 75), (180, 50), 35) is None @@ -480,6 +485,7 @@ def test_e05_rock_sheet(monkeypatch): assert "기본값 · 사용자 확정 전" in cells["B7"]["값"] and "½" in cells["B7"]["값"] assert cells["B9"]["값"].startswith("깎기 비탈 1") assert cells["A13"]["값"] == doc["sets"][0]["name"] + assert sheet["인쇄"]["머리행"] == [16, 16] and cells["A16"]["값"] == "측점" # 절리 한 줄 rows = [r for r in range(17, 40) if cells.get(f"A{r}", {}).get("값") == "STA"] assert len(rows) == len(stations[0]["cases"]) + len(stations[0]["kinematic"]["toppling"]) for r, case in zip(rows, stations[0]["cases"]):