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
This commit is contained in:
1 parent
6c7e555c25
commit
fe6fe26655
8 files changed
+9593
-4
No files matched your search
@@ -0,0 +1,61 @@
|
||||
#!/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")
|
||||
Reference in new issue
Block a user