Files
Pier_v1/Code/review_pipeline/dots_method/ok_cfg.py
T
ahnyongjooandClaude Sonnet 5.5 964a841de1 chore(rebar): Pier_T_rebar 작업 폴더 초기 구성 및 외부 의존 파일 통합
- Code\rebar_pipeline, review_pipeline, pier-program을 정션에서 실제 폴더로 전환
- Code\rhino_mcp 및 CLAUDE_rhino배경.md 추가, .mcp.json은 PYTHONPATH로 새 위치 사용
- pier-program 내부 .git 제거(이력은 backup\pier-program_20261028.bundle에 보관)
- worktree 가이드 반영(CLAUDE.local.md, HANDOFF.md)
- D:\Rhino-MCP 경로 참조를 새 위치로 치환

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-28 11:20:18 +09:00

181 lines
21 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.
import json, re, os
SCR = r"C:\Users\User\AppData\Local\Temp\claude\D--Rhino-MCP-rhino-mcp-main\f46b47bc-9105-4079-9b62-fcbee31b26ae\scratchpad"
tab = json.load(open(SCR + r"\ok_table.json", encoding="utf-8"))
S = json.load(open(SCR + r"\ok_shapes.json", encoding="utf-8"))
Mo = json.load(open(SCR + r"\ok_model_dims.json", encoding="utf-8"))
IM = json.load(open(SCR + r"\ok_images.json", encoding="utf-8"))
_t = {}
for k, v in tab.items():
_t[k] = v
if k == "S4":
_t["UM"] = {"dia": "H22", "L": 4504.0, "n": 92, "tot": 414.368}
tab = _t
D = {}
for e in S:
D.setdefault(e["mark"], e)
HALF = ("P3", "P4")
J = {"C1": "1.510", "C2": "1.510", "C3": "1.510", "C4": "1.510", "C5": "1.510", "C6": "1.510", "C7": "1.050",
"B1": "1.530", "B2": "1.070", "B3": "1.530", "B4": "1.070", "B5": "1.530", "B6": "1.070", "B7": "1.530", "B8": "1.070",
"B10": "0.560×6", "B11": "0.560", "B12": "0.560", "C14": "0.550×4", "C16": "0.550×4", "C17": "0.550"}
KDS = {"C8": "H25", "C9": "H25", "C10": "H25", "C11": "H25", "C12": "H25", "C13": "H25", "C14": "H22", "C16": "H22",
"B9": "H19", "B10": "H19", "B11": "H19", "B12": "H19", "C18": "H19", "C19": "H19", "C20": "H19", "S1": "H19", "S2": "H19"}
KDS_TXT = {"H25": "[M-7] H25 굽힘 내면지름 87.0 < 3.5db 88.9 (1.9 mm 부족).", "H22": "[M-7] H22 굽힘 내면지름 76.8 < 77.7 (0.9 mm 부족).",
"H19": "[M-7] H19 굽힘 내면지름 66.5 < 66.85 (0.35 mm 부족)."}
V = {}
for mk in ("C1", "C2", "C3", "C4", "C5", "C6"):
d = {"C1": "-19.630", "C2": "-19.630", "C3": "-19.630", "C4": "-18.120", "C5": "-18.120", "C6": "-18.120"}[mk]
V[mk] = ("차이 (j)", "[M-2] 모델 설계길이 = a+b+c (재료표 L 은 j 1.510 포함). 모델 총길이 %s m." % d, "도면↔모델")
V["C7"] = ("차이", "[M-3] 바깥 2본(y ±1525) 형상 다름(a·e 606 없음, b·d 4.309). [M-2] j 1.050 제외. 모델 총길이 -17.940 m.", "도면↔모델")
for mk in ("B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8"):
V[mk] = ("일치 (j 형상 없음)", "a·b 일치, 설계길이 = 재료표 L. [M-2] j %s 는 모델 형상에 없음." % J[mk], "도면↔모델")
V["B9"] = ("일치 (경미)", "철근상세 a 586~548 범위 ↔ 모델 567 단일 (재료표 L 4.763 은 567 기준). 길이·본수 일치.", "일치")
V["B10"] = ("일치 (경미)", "a·b 9.448 ↔ 모델 9.445 (3 mm). [M-2] j 0.560×6 은 모델 형상에 없음.", "도면↔모델")
V["B11"] = ("일치 (j 형상 없음)", "a·b 일치. [M-2] j 0.560 은 모델 형상에 없음.", "도면↔모델")
V["B12"] = V["B11"]
for mk in ("C8", "C9", "C10", "C11", "C12", "C13"):
V[mk] = ("차이", ("[M-11] 오각형 스터럽 모따기 d 가 도면보다 33~43 mm 큼. " if mk in ("C9", "C11", "C13") else "") + "[M-10] 코핑 스터럽 상·하단이 도면 선보다 22.5 mm씩 더 나감. [M-4] 철근상세 a·c(630)·d 가 모델 폐합 형상과 다름, 재료표 L 은 b 평균 기준, 모델은 철근마다 b 가 달라 길이 개별.", "도면↔모델")
V["C14"] = ("차이", "[M-5] a 도면 10.475~3.496 = 모델 +54, b 3.207 단일 ↔ 모델 변화. [M-2] j 0.550×4 는 형상에 없음.", "도면↔모델")
V["C16"] = ("차이", "[M-5] a 11.804 = 모델 11.750 +54, b 3.207 ↔ 모델 3.160. [M-2] j 0.550×4 는 형상에 없음.", "도면↔모델")
V["C15"] = ("차이", "[M-5] 모델 직선 3.442~10.421, 도면 b 188 · c 140 끝 갈고리 없음.", "도면↔모델")
V["C17"] = ("차이", "[M-5] 모델 직선 11.750, 도면 a 11.794 · b 188 · c 140 갈고리 없음. j 0.550 형상 없음.", "도면↔모델")
V["C18"] = ("차이", "[M-6] 도면 a 3.050 단일 ↔ 모델 a 3.207/3.126/2.565 (총길이 +14.302 m).", "도면↔모델")
V["C19"] = ("일치", "a 2.226 · b 370 일치.", "일치")
V["C20"] = ("일치 (경미)", "a 2.721~2.472 범위가 모델과 일치, 평균 3.008 ↔ 재료표 L 2.967 (총길이 +3.095 m).", "일치")
V["P1"] = ("일치", "a 8.313 · b 424(호) · c 500 · r 270 일치.", "일치")
V["P2"] = V["P1"]
V["P3"] = ("일치 (각도 미확인)", "a 3.533 일치(호 3532.8, 반원 2조각 = 1본 환산). b 80 끝 연장은 모델 형상에 없음 (형상 합 7065.6 + 160 = 설계길이 7226, [M-2] 유형). [M-8] 이음 각도 도면에 없음.", "미확인")
V["P4"] = ("일치 (각도 미확인)", "a 3.538 일치(호 3538.4, 반원 2조각 = 1본 환산). b 65 끝 연장은 모델 형상에 없음 (형상 합 7076.8 + 129 = 설계길이 7206, [M-2] 유형). [M-8] 이음 각도 도면에 없음.", "미확인")
V["P5"] = ("차이 (c, d)", "a 160 · b 2.341 일치. 끝 c 도면 141 ↔ 모델 150 (+9), d 80 은 모델 형상에 없음 (모델: 90°·135° 갈고리 R24 호). 도면 c·d 정의 확인 필요.", "도면↔모델")
V["S1"] = ("일치", "a 2.629 · b 700 일치.", "일치")
V["S2"] = ("일치", "a 1.262 · b 700 일치.", "일치")
for mk in ("S3", "S4", "S5", "S6", "S7", "S8"):
V[mk] = ("일치", "길이·본수 일치.", "일치")
V["UM"] = ("모델 없음", "[M-1] 기초 조립용 철근. 모델에 0본.", "도면↔모델")
M9 = {"B5": "상면 122.5 (도면 100, +22.5)", "B6": "상면 77.5 (-22.5) · 하면 172.5 (도면 150, +22.5)", "B7": "상면 122.5 (도면 100, +22.5)", "B8": "상면 77.5 (-22.5) · 하면 172.5 (+22.5)"}
for mk, t in M9.items():
v, n_, k_ = V[mk]
V[mk] = ("차이 (높이)", n_ + " [M-9] 철근 중심 높이가 도면 철근선과 다름: " + t + ".", "도면↔모델")
for mk, t in (("B1", "상면 100"), ("B3", "상면 100"), ("B2", "하면 150"), ("B4", "하면 150")):
v, n_, k_ = V[mk]
V[mk] = (v, n_ + " 기초 중심 높이는 도면 선과 일치(" + t + ").", k_)
def m3(x):
return "%.3f" % (x / 1000.0)
rows = []
last_dia = None
n = 0
tot_t = 0.0
tot_m = 0.0
for mk, t in tab.items():
n += 1
verdict, note, kind = V[mk]
if mk in KDS:
note = note + " " + KDS_TXT[KDS[mk]]
m = Mo.get(mk)
d = D.get(mk)
dd = list(d["dims"]) if d else []
if mk in ("C1", "C2", "C3", "C4", "C5", "C6", "C8", "C10", "C12"):
dd = [x for x in dd if not x.startswith("r=")]
if mk == "C7" and d:
dd += d["dims2"]
detail = " ".join(dd) if d and dd else ("(철근상세 치수 없음: 직선)" if mk in ("S3", "S4", "S7", "S8") else "-")
if mk == "UM" and d:
detail = " ".join(d["dims"])
if m:
k = 2 if mk in HALF else 1
cnt = m["n"] // k
dl = [x * k for x in m["dl"]]
mean = sum(dl) / len(dl)
tot = sum(dl) / 1000.0 / k
tot = sum(m["dl"]) / 1000.0
model = "N %d · 설계길이 %s m" % (cnt, m3(mean)) if min(dl) == max(dl) else "N %d · 설계길이 %s~%s m (평균 %s)" % (cnt, m3(min(dl)), m3(max(dl)), m3(mean))
model += " · 총 %.3f m" % tot
vals = m["values"]
if mk not in HALF and vals:
sv = [str(int(x)) for x in vals[:6]]
model += " · 꼭짓점 치수 " + "/".join(sv) + ("…" if len(vals) > 6 else "")
tot_m += tot
else:
model = "모델 없음 (0본)"
tot_t += t["tot"]
if t["dia"] not in ('"', None):
last_dia = t["dia"]
dia = Mo[mk]["dia"] if mk in Mo else last_dia
table = "L %s × N %d = %.3f m" % (m3(t["L"]), t["n"], t["tot"])
rows.append(dict(no=str(n), mark=mk, item="형상·길이·본수 (%s)" % dia, table=table, detail=detail, model=model, verdict=verdict, note=note, kind=kind))
items = [
dict(code="M-1", mark="UM", content="UM(H22, 기초 조립용 철근) 92본 모델에 없음", cmp="재료표·철근상세 ↔ 모델", diff="L 4.504 m × 92본 = 414.368 m 누락", drawing_side="상세·재료표에 있음 (a 200 · b 1.952 · c 200, 70° 사각 설치). 배치 위치·간격은 예시도뿐", action="모델에 넣을지 판단 필요 (운곡교 UA1 과 같은 유형)", kind="도면↔모델", image=IM["M-1"]),
dict(code="M-2", mark="C1~C7, B1~B8, B10~B12, C14·C16·C17", content="j(겹침) 길이가 재료표 L 에만 있고 모델 형상에는 없음. C1~C7 은 모델 설계길이에도 j 제외", cmp="재료표 L = a+b+c+j ↔ 모델 a+b+c", diff="C1~C6 총길이 -113.25 m, C7 -17.94 m. 그 외 마크는 설계길이 포함, 형상에서만 j 만큼 짧음(합 약 600 m)", drawing_side="j 는 상세의 작은 박스로만 표시, 작도 위치 없음", action="형상에 넣을지 가산 길이로만 둘지 판단. C1~C7 만 설계길이에서 j 가 빠진 점 확인", kind="도면↔모델", image=IM["M-2"]),
dict(code="M-3", mark="C7", content="C7 바깥 2본(y ±1525) 형상이 도면(13본 동일)과 다름", cmp="철근상세 C7 ↔ 모델", diff="a·e 606 없음, b·d 4.309 (도면 4.774), 길이 11.280 (나머지 13.424)", drawing_side="N=13 에 형상 하나, L 14.474", action="바깥 2본을 도면 형상대로 맞출지, 의도된 단축인지 확인", kind="도면↔모델", image=IM["M-3"]),
dict(code="M-4", mark="C8~C13", content="스터럽 폭 a(2.057 ↔ 2.103)와 끝 길이 c 630 이 모델 폐합 형상과 다름", cmp="철근상세 ↔ 모델", diff="총길이 C8 -40.8, C9 -86.6, C10 -30.6, C11 -24.4, C12 -41.8, C13 -35.0 m (합 -259 m)", drawing_side="재료표 L 은 b 범위 평균 기준(예 C8 9.570 = 2×2.057 + 2×2.098 + 2×0.630)", action="c 630(겹침·갈고리) 모델 반영 여부, a 2.057 ↔ 2.103 어느 쪽이 맞는지 판단", kind="도면↔모델", image=IM["M-4"]),
dict(code="M-5", mark="C14~C17", content="루프 a 가산 54, b 단일 3.207 ↔ 모델 변화, C15·C17 끝 갈고리(b 188 · c 140) 없음", cmp="철근상세 ↔ 모델", diff="총길이 C14 -22.5, C15 -23.0, C16 -14.4, C17 -30.0 m", drawing_side="C14 a 10.475~3.496, b 3.207, j 0.550×4 / C15 b 188 · c 140", action="갈고리·j 반영 여부, b 단일값 ↔ 모델 변화 판단", kind="도면↔모델", image=IM["M-5"]),
dict(code="M-6", mark="C18", content="a 3.050 단일값 ↔ 모델 3종 (3.207 / 3.126 / 2.565)", cmp="철근상세 ↔ 모델", diff="총길이 +14.302 m (모델 457.732 / 재료표 443.430)", drawing_side="a 3.050 · b 370 · L 3.790 · 117본", action="모델의 개별 길이가 의도인지 확인", kind="도면↔모델", image=IM["M-6"]),
dict(code="M-7", mark="C8~C13, C14·C16, B9~B12, C18~C20, S1·S2", content="굽힘 내면지름: H25 87.0 < 88.9, H22 76.8 < 77.7, H19 66.5 < 66.85 (3.5db)", cmp="KDS 24 14 21 표 4.5-1 ↔ 모델", diff="1.9 / 0.9 / 0.35 mm 부족", drawing_side="도면에 내면반지름 표기 없음", action="모델 R 을 KDS 기준으로 키울지 결정", kind="기준↔모델", image=IM["M-7"]),
dict(code="M-9", mark="B5~B8", content="기초 직각 방향 철근 B5~B8 중심 높이가 도면 철근선(상면 100 아래 / 하면 150 위)과 ±22.5 mm 다름 (B1~B4 는 일치)", cmp="도면 정면도·측면도 철근선 ↔ 모델", diff="상면 122.5/77.5, 하면 172.5 (±22.5)", drawing_side="철근 선은 상면 -100 / 하면 +150 같은 높이. ※ 단, 도면 측면 단면의 철근 점(원)은 모델과 같은 높이(하면 321527.3, 상면 323432.3)에 그려져 있고 정면 단면 점과 22.5 다름 (선·점이 도면 안에서 다름)", action="모델 철근을 도면 선 높이에 맞출지 결정 (지시된 적 없는 모델 쪽 가정). 점 기준으로는 모델 = 도면 — 도면 내부 불일치 여부 판단 필요", kind="도면↔모델", image=IM["M-9"], image2=IM.get("M-9b")),
dict(code="M-10", mark="C8~C13", content="코핑 스터럽 상·하단이 도면 정면도 철근선보다 22.5 mm씩 더 나감 (106곳 전부 동일)", cmp="도면 정면도 수직선 ↔ 모델 중심선", diff="상단 +22.5 (피복 얕아짐), 하단 -22.5", drawing_side="상·하 끝이 철근선 위치로 작도 (예 C10 상단 코핑 상면 -120), 어긋나게 하라는 지시 없음", action="모델 스터럽 상·하단을 도면 선에 맞출지 결정 (M-9 와 같은 22.5 mm)", kind="도면↔모델", image=IM["M-10"]),
dict(code="M-11", mark="C9, C11, C13", content="오각형 스터럽 모따기 아래 평면부 d 가 도면 철근상세보다 33~43 mm 큼, C11 b 최대 +54", cmp="철근상세 범위 ↔ 모델 꼭짓점 치수", diff="d +33~43, b +54, c2 +5~6, a -4 (mm)", drawing_side="범위(~)로만 표기, 철근별 값 없음", action="모따기 d·b 를 도면 범위대로 맞출지 확인 (M-4 와 같은 계열)", kind="도면↔모델", image=IM["M-11"]),
dict(code="M-12", mark="B12", content="기초 중앙 B12(H19, x방향) 중간층 높이가 도면 점보다 19.0 mm 높음 (B11 은 일치, 도면은 B11·B12 같은 높이)", cmp="도면 정면·측면 단면 점 ↔ 모델 중심선", diff="+19.0 (z 322023.8/323023.8 ↔ 322004.8/323004.8)", drawing_side="B11·B12 모두 바닥 위 650·1650 에 점으로 작도", action="모델 B12 를 도면 점 높이에 맞출지 결정 (B11 과 간섭 피해 올린 것으로 보임, 지시된 적 없는 가정 — M-9 와 같은 유형)", kind="도면↔모델"),
dict(code="M-8", mark="P3, P4", content="링 이음(커플러) 각도·위치 도면에 기준 없음 (모델 90°/270° 가정)", cmp="도면 없음 ↔ 모델 가정", diff="-", drawing_side="철근상세 a·b 뿐, 방향·엇갈림 없음", action="각도 기준 확인 (설계자)", kind="미확인", image=IM["M-8"]),
]
CHECKS = [
["재료표","본수(전 마크)","재료표 N","모델 본수","일치 (UM 제외)","UM 92본 모델 없음 (M-1)"],
["재료표","길이·총길이·형상 치수","재료표 L·철근상세 a b c j","모델 설계길이·꼭짓점 치수","불일치 (M-1~M-6)","46마크 중 30마크 차이"],
["CTC","기초 상면 B1+B3 (x)","2@100 + 72@125 + 2@100 = 77본","77본, 위치 차이 0.0 mm","일치",""],
["CTC","기초 하면 B2+B4 (x)","2@100 + 72@125 + 2@100 = 77본","77본, 0.0 mm","일치",""],
["CTC","기초 상면 B5+B7 (y)","2@163 + 70@125 + 2@163 = 75본","75본, 0.0 mm","일치","2@163 = 162.5"],
["CTC","기초 하면 B6+B8 (y)","2@163 + 70@125 + 2@163 = 75본","75본, 0.0 mm","일치",""],
["CTC","기초 중앙 B12 (x)","18@500=9.000 (19본)","19본, 0.0 mm","일치",""],
["CTC","기초 중앙 B11 (y)","16@500=8.000 (17본)","19본 (±4537.5 에 2본 추가), 재료표 N=19","확인 필요","도면 치수는 17본, 재료표는 19본 → 도면 내부 (보관 D-6)"],
["CTC","코핑 스터럽 x (C8+C10+C12)","10@150 + 85@100 + 10@150 = 106본","106본, 도면 수직선과 0.4 mm 이내","일치","도면 원점 기준 +25 비대칭 패턴까지 같음"],
["CTC","코핑 단별 y (1~4단 C1+C4, C2+C5, C3+C6, C7+C19)","22@125 + 가장자리 150/125 = 25본","25본씩, 0.0 mm","일치","단면 A-A·B-B"],
["CTC","기둥 띠철근 P3·P4 구간","2@300 / 16@150 / 8@300 / 2@600 (z)","P3 13개, P4 16개 위치가 구간과 일치","일치","P3 14375 포함 17개 = 16@150"],
["형상","코핑 오각형 스터럽 C9·C11·C13 (a b c d c1 c2)","철근상세 범위 치수","모델 꼭짓점 치수","불일치 (M-11)","d +33~43, C11 b +54"],
["재료표","표 산술 (행 L×N, 소계, 단위중량, 총계)","L×N=총길이, 직경별 합 = 소계, 중량","검산","일치","옥성교·산외교·Ramp-A 모두 산술 오류 없음"],
["CTC","기둥 띠철근 P5 CTC","C.T.C 300 / 150 / 300 / 600","z 간격 300 (구간별)","일치 (대략)","구간별 세부 위치는 미확인"],
["피복","기초 B1~B4 (상면/하면)","상면 100 / 하면 150","100 / 150","일치",""],
["피복","기초 B5~B8","상면 100 / 하면 150","122.5 · 77.5 / 172.5","불일치 (M-9)","±22.5"],
["피복","기초 B11 중간층 (y방향 점)","도면 점 z 322004.8 / 323004.8 (바닥 위 650·1650)","322004.8 / 323004.8","일치","19본, 위치도 일치"],
["피복","기초 B12 중간층 (x방향 점)","도면 점 z 322004.8 / 323004.8 (B11 과 같은 높이)","322023.8 / 323023.8 (+19.0)","불일치 (M-12)","x 위치 -4500~4500 @500 19본은 일치, 높이만 +19 (H19 지름)"],
["점대조","기초 정면·측면 단면 점 (B1~B8, B10, B11)","도면 점 183 / 184개 (z·위치)","모델 직선 끝 위치와 3 mm 이내 일치","일치","B12 제외. 정면 상·하 77본, 측면 상·하 75본 (±4700)"],
["점대조","기둥 단면 C-C~F-F 점","60점 r 1080 + 60점 r 1125 / 띠철근 링 r 1148","P2 r 1080 (60), P1 r 1125 (60), 띠 P3 1150·P4 1147","일치","띠철근 ±2 mm"],
["점대조","코핑 단면 B-B 점 (C1~C7·C14~C17·C19·C20·S)","도면 점 173개","173개 전부 위치·높이 일치","일치","코핑 단면 높이·피복 체인 포함"],
["점대조","코핑 단면 A-A 점","도면 점 137개","124개 일치, C7 바닥 13점(z 19755.1, y ±1525 @250) 불일치","미확인","모델 C7 은 코핑 평면 끝이 사각이라 y 별 높이가 다름 — 절단 위치 확정 필요"],
["피복","코핑 스터럽 C8~C13 상·하단","도면 수직선 끝","상 +22.5 / 하 -22.5","불일치 (M-10)","106곳 전부"],
["피복","코핑 최상단 단 (C19 120)","코핑 상면 -120","120.0","일치",""],
["피복","기둥 주철근 반지름","DIVISION 60, 125+1125+1125+125","P1 1125 (60본), P2 1080 (60본)","일치","P2 는 안쪽 링"],
["피복","코핑 C1~C7 단별 깊이","단면 B-B 점 (치수 체인 대신 점 좌표)","C1~C7 점 모두 일치","일치 (B-B)","A-A 는 C7 바닥 13점만 미확인"],
["피복","코핑 C14~C17 루프·타이, S 받침 철근","단면 B-B·A-A 점","B-B 일치, A-A 일치 (C7 외)","일치","S 받침 철근은 점 있는 부분만"],
["피복","기초 측면 피복(x,y)","양 끝 100(상면/중앙/하면)","100","일치","B 철근 중심 기준"],
]
cfg = dict(image2_header="캡처 2 (M-9: 모델 기초 콘크리트 + 철근 중심 피복 치수)", checks=CHECKS, checks_desc="도면 DXF 의 작도 선·치수와 모델 철근 중심선을 좌표로 비교 (2026-10-19). 일치·불일치·미확인 구분. 판정 보류(기록만).",
bridge="옥성교 P1",
title="옥성교 P1 철근 도면 ↔ 모델 일치 검토 (불일치 종류별 분류)",
purpose="목적: 도면(재료표·철근상세)과 라이노 모델이 일치하는지가 최우선. 범위는 모델↔도면 (도면 내부 불일치는 따로 보관). 작성 2026-10-19, 검토 미확정 초안. 기준: KDS 24 14 21.",
sheet1_desc="도면에 기준이 있거나 없는데 모델이 다르게 만들어진 항목 (M-n). 캡처: 위 도면(철근상세·재료표) / 아래 모델(라이노).",
items=items, rows=rows,
unchecked=[
dict(item="코핑·기둥·기초 철근 위치", content="정면도·단면도의 철근 높이·간격·피복(점 좌표)과 모델 위치 대조", note="재료표·철근상세(형상·길이·본수) 대조만 완료", status="미검토"),
dict(item="받침 세트 10개", content="받침대좌·패드·교량받침·솔플레이트 (ELEVATION TABLE · 솔플레이트 TABLE) 모델 대조", note="선행 보고서 G5 183/183 PASS (표 값 기준)", status="미검토"),
dict(item="코핑 철근 간 간섭", content="철근끼리 교차·관통", note="사용자 지시로 제외 (검토 단계)", status="제외"),
dict(item="P5 갈고리 c 141 · d 80", content="철근상세의 끝 길이 정의가 모델(90°·135° 갈고리)과 맞춰지지 않음", note="도면으로 확인 불가", status="확인 불가"),
],
basis=[
dict(item="입력 파일", content="모델: 옥성교P1_G5.3dm (원본 그대로), 도면: 옥성교P1.dwg → 옥성교P1.dxf (라이노 변환)"),
dict(item="재료표", content="DXF 레이어 CS-TABL-TEX2 의 글자를 x(열)·y(행)로 읽음 (번호 x≈715129, 직경 715879, 길이 717004, 개수 717629, 총길이 719004). 재료표에는 A~J 치수 열이 없음 — 치수는 '철근상세'(레이어 CS-TEXT, 형상 도해 옆 L= N= a= b= c= j=)에서 읽음"),
dict(item="모델 치수", content="중심선(P1-RC-*)의 직선 구간을 연장한 꼭짓점 사이 거리(각진 치수)로 환산. P1·P2·P3·P4 는 호 길이/접선 길이로 비교. P3·P4 는 반원 2조각 = 1본으로 환산"),
dict(item="길이 비교", content="모델 철근의 설계길이(user string design_length + coupler_length)와 재료표 L·총길이를 대조. 형상 실길이(중심선)는 굽힘으로 약간 짧아 비교하지 않음"),
dict(item="KDS 계산", content="내면지름 = 2×(중심선 R − 공칭 db/2). H25 R 56.2 → 87.0, H22 49.5 → 76.8, H19 42.8 → 66.5, H29 65.2 → 101.8, H32 72 → 112.2, H16 24 → 32.1, H13 해당 없음. 기준: D19 이상 3.5db, D16 이하 2db (KDS 24 14 21 표 4.5-1)"),
dict(item="재료표 총계", content="도면 총계 13806.206 m (소계 합). 모델 설계길이 합 %.3f m (UM 제외 시 도면 %.3f m)" % (tot_m, tot_t - tab["UM"]["tot"])),
],
)
json.dump(cfg, open(SCR + r"\ok_cfg.json", "w", encoding="utf-8"), ensure_ascii=False, indent=1)
print(len(rows), tot_t, tot_m)