Files
CMPlanning/scripts/make_lining_doc.py
T
Claude fe6fe26655 feat: read concrete-lining drawings 04-004..009 and link lining spec to model (Task 6)
Extracted per-sheet pattern groups (입출구부 50 m / 온도미고려), note-5 scope,
fck 27 MPa, SD400, aggregate 25 mm, rebar label counts and printed radii.
Model keeps R1 = 6,982 mm; lining sheets print 6.892 m -> [CONFLICT DETECTED]
for user check. Sheet-to-station and pattern-name mapping left [미확정].
Viewer shows the lining spec on click.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A5Cun3RHQKna9qxE6ybZ4A
2026-10-21 06:30:45 +00:00

62 lines
4.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""Render the lining-reinforcement reference report (DOC/03_설계) from
data/lining_spec.json written by extract_lining_spec.py. Values are read from
the JSON, not typed. Usage: make_lining_doc.py <lining_spec.json> <out.md>"""
import json
import sys
SRC, OUT = sys.argv[1], sys.argv[2]
d = json.load(open(SRC, encoding="utf-8"))
S = d["sheets"]
note5 = S[0]["note5"]
conc = S[0]["concrete"][0].split("=")[-1]
rebar = S[0]["rebar_grade"][0].split("=")[-1]
agg = S[0]["aggregate"][0].split("Ø")[-1]
r1_drawn = next(x for x in S[0]["radius_dims"] if x.startswith("R1="))
r1_mm = float(r1_drawn.split("=")[1])
lines = ["# 콘크리트 라이닝 구조도 판독 및 재료 사양 (초안)\n",
"| 버전 | 일자 | 변경 내용 |", "|---|---|---|",
"| v0.1.00 | 2026-10-21 | 최초 작성. 콘크리트라이닝구조도 C0060304-004~009 판독 (HITL 검토 대상) |\n",
"## 1. 개요",
"- 6장은 **지보패턴 입출구부 취약구간**의 철근 상세와 공통 사양이다. 도면에 측점(STA) 표기가 없어 어느 측점 구간에 적용되는지는 판독되지 않았다 ([미확정]).",
"- 적용 범위(주기 5, 원문): " + note5 + "\n",
"## 2. 시트별 패턴군",
"| 도면 | 패턴군 | 상세 종류 | 철근 라벨(H13~H29 개수) |",
"|---|---|---|---|"]
for r in S:
bars = ", ".join(f"{k} {v}" for k, v in r["rebar_sizes_label_count"].items())
for i, g in enumerate(r["pattern_details"]):
lab = bars if i == 0 else ""
lines.append(f"| {r['file'][:14]} | {g['group']} | {g['kind']} | {lab} |")
lines += ["",
"- 철근 라벨 개수는 도면 시트 단위 합계다 (패턴군별 분리 불가). 첫 행에만 표기했다.\n",
"## 3. 공통 재료 사양 (6장 동일)",
f"- 콘크리트: {conc} ({S[0]['concrete'][0]})",
f"- 철근: {rebar} ({S[0]['rebar_grade'][0]})",
f"- 굵은골재 최대치수: Ø{agg} mm",
"- 설계방법: 강도설계법, 피복두께 6 cm 이상 확보 (주기 1)",
"- 이음장 600 mm (도면 치수), 겹침이음 1 cycle (도면 상세)",
"- 라이닝 뒷면 주입재 강도 1.0 MPa 기대 (주기 11)",
"- 천정부 방수쉬트 부착형 앵커, 철근처짐방지 앵커 적용 (주기 4, 12)\n",
"## 4. 기준선과 치수",
f"- 도면 표기 R1 = {r1_drawn} (6장 모두 동일 표기)",
"- 표준단면 치수표(설계_표준단면치수표) R1 = 6,982 mm, 골격 모델은 6,982 mm 사용",
f"- 라이닝 외면 R 7.282 m 에서 내면 R 6.982 m 를 빼면 두께 0.300 m, 표기 6.892 m 를 쓰면 0.390 m 이다. 표준단면 두께 300 mm 와 맞는 값은 6.982 m 이다.",
"- R2 = 3,712 mm, R2′ = 3,910 mm (도면 표기, 표준단면 치수표와 일치)",
"- EL. 0.000 = 노면 기준 (계획고 F = 0.000 과 일치 기록)",
"- EL. -0.367 = 아치 중심 높이 (골격의 중심 c = -0.367 m 와 일치)\n",
"## 5. 충돌·미확정",
"- [CONFLICT DETECTED] 도면 R1 6.892 m 와 표준단면 R1 6.982 m 가 다르다. 골격은 6.982 m 를 유지하고 확인을 요청한다.",
"- [미확정] 시트별 패턴군이 어느 측점 구간인지 (도면에 측점 없음)",
"- [미확정] 라이닝 패턴군(A~C-2, D-1~2, E-1~2, WL-1~4, RP-1~2, P-2~3)과 굴착 순서도 패턴명(NP-4AD-1-D-2 등)의 대응 관계",
"- 재료표 수량(총 중량)은 이번 판독에서 추출하지 않았다. 필요하면 재료표 추출을 별도 Task로 한다.",
"- 철근 배치는 골격 LOD 범위 밖이라 모델에 넣지 않았다 (사용자 승인 3D 상세 수준: 축선·표준단면 스윕 골격).",
"- 설계 조건과 상이하면 구조해석 검토 후 철근 보강 가능 (주기 5, 시공 중 판단 대상)\n",
"## 6. 확인 요청 (HITL)",
"1. R1 6.892 m 와 6.982 m 중 설계 기준값은 무엇인지",
"2. 라이닝 패턴군과 굴착 패턴명의 대응표가 있는지",
"3. 측점별 지보패턴 구간표가 확보되면 그 값으로 placeholder 구간을 교체할지",
""]
open(OUT, "w", encoding="utf-8").write("\n".join(lines))
print("written", OUT, len(lines), "lines")