feat(B07): 표준도 기울기를 판정값으로 — 그림·장 제목이 B08 한 벌을 그대로 부름
데스크탑 메인이 넣은 품셈 표준경사 판정(13-4-4 [주]⑪)이 **근거 문구 안에만** 있었고 표준도는 못 읽고 있었음. 판정 함수 `face_slope_ratio()` 를 그대로 부르게 바꿈 — 판정을 두 벌로 짜면 그림과 수량이 갈림(CLAUDE.md 5장). 실측 (프로젝트 936be972 구조물 5기) 돌쌓기(찰) H=2.5 1:0.3 뒷길이 45㎝ 깬돌 단면 (0,0)(0.75,2.5)(1.45,2.5)(1.45,0) 돌쌓기(메) H=2.0 1:0.35 뒷길이 35㎝ 야면석 단면 (0,0)(0.70,2.0)(1.35,2.0)(1.25,0) 큰돌쌓기 H=2.5 1:0.3 옹벽 판정 대상 아님 — 안 적음 ⇒ **메쌓기가 찰쌓기와 다른 값으로 갈림**(0.35 대 0.3). 장 제목에 그대로 뜸. 메/찰은 종류에서 옴. 큰돌쌓기는 `bond` 칸이 그것이고 안 고르면 찰쌓기로 봄 — 품셈 13-6 은 둘 다 「1:0.3 이상」이라 그림 기울기가 갈리지 않음. 기울기 근거 문구를 그림 아래 한 줄로 실음 — 「사용자 지정」인지 「품셈 표준경사」인지, 그리고 「성토/절토가 저장에 없어 성토 열로 잠정」인지가 도면에서 보여야 함. ⚠ 시험 제원에서 `face_slope_ratio` 를 뺐음 — 실제 구조물 제원에 그 칸이 없는데 시험만 갖고 있어 **판정 경로가 한 번도 안 돌았음**(늘 「사용자 지정」으로 빠짐). 빼고 나니 메/찰이 갈리는 것이 시험으로 잡힘. 사용자 지정이 이기는 것도 따로 검사함. 자체검증 — 회귀 573 통과 · 0 실패. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -76,6 +76,18 @@ def sheet_key(structure: dict[str, Any]) -> str:
|
||||
return json.dumps(payload, ensure_ascii=False, sort_keys=True)
|
||||
|
||||
|
||||
def _slope_or_none(structure: dict[str, Any]) -> float | None:
|
||||
"""돌쌓기 계열이면 판정된 전면 기울기, 아니면 `None`. 판정은 그림 모듈이 가진 한 벌."""
|
||||
from B07_DesignDetail.B07_DesignDetail_Engine_Cad_StandardFigure import (
|
||||
FIGURE_TYPE_IDS,
|
||||
slope_of,
|
||||
)
|
||||
|
||||
if str(structure.get("type_id") or "") not in FIGURE_TYPE_IDS:
|
||||
return None
|
||||
return slope_of(structure)[0]
|
||||
|
||||
|
||||
def sheet_title(structure: dict[str, Any]) -> str:
|
||||
"""장 제목 — 「이름 H=2.0 1:0.3 뒷길이 45㎝」처럼 **무엇이 갈랐는지**가 보이게."""
|
||||
parts = [str(structure.get("name") or structure.get("type_id") or "구조물")]
|
||||
@@ -83,9 +95,11 @@ def sheet_title(structure: dict[str, Any]) -> str:
|
||||
if height > 0:
|
||||
parts.append(f"H={height:g}")
|
||||
options = structure.get("options") or {}
|
||||
slope = options.get("face_slope_ratio")
|
||||
# 기울기는 **판정 결과**를 적는다 — 사용자가 안 정해도 품셈 표준경사로 갈린다(확정 ⑨).
|
||||
# 판정이 안 되는 종류(옹벽 등)는 안 적는다.
|
||||
slope = _slope_or_none(structure)
|
||||
if slope is not None:
|
||||
parts.append(f"1:{float(slope):g}")
|
||||
parts.append(f"1:{slope:g}")
|
||||
back = options.get("back_len_cm") or options.get("stone_back_length_cm")
|
||||
if back:
|
||||
parts.append(f"뒷길이 {int(back)}㎝")
|
||||
|
||||
Reference in New Issue
Block a user