- 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>
107 lines
15 KiB
Python
107 lines
15 KiB
Python
import json, os
|
||
SCR = r"C:\Users\User\AppData\Local\Temp\claude\D--Rhino-MCP-rhino-mcp-main\f46b47bc-9105-4079-9b62-fcbee31b26ae\scratchpad"
|
||
EX = json.load(open(r"D:\★Pier 자료\심수석님 검토 파일\검토_산외교P1\추출데이터\재료표_대조결과.json", encoding="utf-8"))
|
||
IM = json.load(open(SCR + r"\sw_images.json", encoding="utf-8"))
|
||
DIM = ["A", "B", "C", "D", "E", "R", "X1", "X2", "X3", "X4", "J"]
|
||
V = {}
|
||
for mk in ("C1", "C2", "C3", "C4"):
|
||
V[mk] = ("차이", "[M-1] 일부 철근 A 가 단일값보다 짧음. [M-2] J 1.560 은 모델 형상에 없음 (L 에만 포함).", "도면↔모델")
|
||
for mk in ("C5", "C6"):
|
||
V[mk] = ("차이", "[M-1] 일부 철근 B·D 가 4.018/4.016 보다 짧음(3.580~). [M-2] J 0.940 은 모델 형상에 없음.", "도면↔모델")
|
||
for mk in ("C7", "C8", "C9"):
|
||
V[mk] = ("차이", "[M-3] 재료표 A·C·L 대푯값(가산 포함) ↔ 모델 철근별 작도값. [M-2] C 660×2 는 폐합 형상에 없음. [M-7] H22 굽힘 내면지름 76.8 < 77.7.", "도면↔모델")
|
||
V["C10"] = ("차이", "[M-3] B = 모델 +99(일치). [M-4] A 최대 9.570 ↔ 모델 8.687 (대응 철근 없음). [M-2] J 0.660 형상에 없음. [M-7] H22.", "도면↔모델")
|
||
V["C11"] = ("일치 (가산 규칙)", "[M-3] A = 모델 +44 (일치). B 165 는 모델에서 정의 불가(미추출).", "일치")
|
||
V["C12"] = ("차이 (J)", "[M-3] A·B = 모델 +54/+99 (일치). [M-2] J 0.660 은 형상에 없음.", "도면↔모델")
|
||
V["C13"] = ("차이 (J)", "[M-3] A = 모델 +44 (일치). B 165 미추출. [M-2] J 0.660 은 형상에 없음.", "도면↔모델")
|
||
V["C14"] = ("차이", "[M-1] 재료표 A 3.000 단일 ↔ 모델 일부 2.633~2.892 (짧음).", "도면↔모델")
|
||
V["C15"] = ("차이", "[M-1] 재료표 A 4.500 단일 ↔ 모델 4.118/4.489/4.517. [M-7] H22 굽힘 내면지름.", "도면↔모델")
|
||
V["P5"] = ("일치", "A 2.295 · B 150 일치. [M-7] H19 굽힘 내면지름 66.5 < 66.85 (0.35 mm 부족).", "일치")
|
||
V["P2"] = ("미확인", "A·B·J 는 모델에서 정의 불가(미추출). R 1.149 일치. 반링 2조각(140개) = 1본 → 70 으로 환산.", "미확인")
|
||
V["P3"] = ("일치 (각도 미확인)", "A·B·R 일치(반원 2조각 = 1본 환산). [M-8] 이음 각도 도면에 없음.", "미확인")
|
||
V["P4"] = ("일치 (각도 미확인)", "A·B·R 일치. [M-8] 커플러 각도 도면에 없음.", "미확인")
|
||
V["B7"] = ("일치", "길이·본수 일치.", "일치")
|
||
for mk in ("S1", "S2", "S3", "S4", "B1", "B3", "B4", "B6", "B9", "B10"):
|
||
V[mk] = ("일치", "치수·길이·본수 일치.", "일치")
|
||
V["B2"] = ("차이 (J)", "[M-2] J 1.000 은 모델 형상에 없음 (중심선 11.758 < L 12.800). [M-7] H22 굽힘 내면지름.", "도면↔모델")
|
||
V["B5"] = V["B2"]
|
||
V["B8"] = ("차이", "[M-5] 모델 정사각 7.345×7.345 ↔ A 7.300 · B 7.350. [M-2] J 0.570 은 형상에 없음.", "도면↔모델")
|
||
V["P1"] = ("차이", "R 340 · A 27.510 · B 534 · C 500 일치. [M-6] 도면 표의 주철근 커플러 476개가 모델에 없음 (연속 28.545 m).", "도면↔모델")
|
||
M9 = {"B1": "상면 쪽 중심 77.5 (도면 100, -22.5)", "B2": "상면 쪽 122.5 (+22.5) · 하면 쪽 127.5 (도면 150, -22.5)", "B3": "하면 쪽 127.5 (도면 150, -22.5)",
|
||
"B4": "상면 쪽 122.5 (도면 100, +22.5)", "B5": "상면 쪽 77.5 (-22.5) · 하면 쪽 172.5 (+22.5)", "B6": "하면 쪽 172.5 (도면 150, +22.5)"}
|
||
for mk, t in M9.items():
|
||
v, n_, k_ = V[mk]
|
||
V[mk] = (v if v.startswith("차이") else "차이 (높이)", n_ + " [M-9] 철근 중심 높이가 도면 철근선과 다름: " + t + ".", "도면↔모델")
|
||
rows = []
|
||
n = 0
|
||
for tab in ("SD400", "SD500"):
|
||
for e in EX[tab]:
|
||
if e["kind"] != "bar":
|
||
continue
|
||
mk = e["mark"]
|
||
n += 1
|
||
d = e["d"]
|
||
m = e["m"]
|
||
detail = " ".join("%s=%s" % (k, d[k]) for k in DIM if d.get(k))
|
||
mdl = "N %s · L %s m · 총 %s m" % (m.get("n"), m.get("L"), m.get("tot"))
|
||
mdims = " ".join("%s=%s" % (k, m[k]) for k in DIM if m.get(k))
|
||
if mdims:
|
||
mdl += " · " + mdims
|
||
verdict, note, kind = V[mk]
|
||
rows.append(dict(no=str(n), mark=mk, item="형상·길이·본수 (%s)" % d["dia"], table="L %s × N %s = %s m" % (d["L"], d["n"], d["tot"]), detail=detail or "-", model=mdl, verdict=verdict, note=note, kind=kind))
|
||
items = [
|
||
dict(code="M-1", mark="C1~C6, C14, C15", content="일부 철근이 재료표 단일값보다 짧음 (모델은 철근마다 개별 길이)", cmp="재료표 ↔ 모델", diff="C1 A 8.462~9.259, C5 B 3.580~4.018, C14 A 2.633~3.000, C15 A 4.118~4.517", drawing_side="마크당 값 하나 (13본 동일 표기)", action="코핑 형상에 맞춘 의도된 단축인지 확인", kind="도면↔모델", image=IM["M-1"]),
|
||
dict(code="M-2", mark="C1~C13, P2, B2, B5, B8", content="J·C 길이가 재료표 L 에만 있고 모델 형상에는 없음", cmp="재료표 L = A+B+C+J ↔ 모델 J 제외", diff="C1~C4 J 1.560, C5·C6 0.940, C7~C9 C 660×2, C10·C12·C13 0.660, P2 0.380, B2·B5 1.000, B8 0.570", drawing_side="J 는 표 열 / 형상 III 의 작은 박스, 작도 위치 없음", action="형상에 넣을지 가산 길이로만 둘지 판단", kind="도면↔모델", image=IM["M-2"]),
|
||
dict(code="M-3", mark="C7~C13", content="치수 가산(+54/+44/+99) 산식: 재료표 대푯값·가산값 ↔ 모델 작도값", cmp="재료표 ↔ 모델", diff="C7~C9 L 평균 -0.027/-0.018/-0.027 m, C11~C13 은 가산 규칙으로 일치", drawing_side="NOTE: a=(1.250×2ea+2.000×1ea)/3ea + 주철근D + 수직스터럽D", action="가산 규칙의 적용 범위 확인 (운곡교 M-5 와 같은 유형)", kind="도면↔모델", image=IM["M-3"]),
|
||
dict(code="M-4", mark="C10", content="재료표 A 최대 9.570 에 대응하는 철근이 모델에 없음", cmp="재료표 ↔ 모델", diff="모델 최대 8.687, 설계길이 합 -6.178 m", drawing_side="A 9.570~3.393 (7본)", action="최대 폭 9.570 루프 존재 여부 확인", kind="도면↔모델", image=IM["M-4"]),
|
||
dict(code="M-5", mark="B8", content="모델 정사각 7.345×7.345 ↔ 재료표 A 7.300 · B 7.350", cmp="재료표 ↔ 모델", diff="A -45 / B +5 mm", drawing_side="L 31.581 = 2A+2B+4J", action="어느 값이 맞는지 확인", kind="도면↔모델", image=IM["M-5"]),
|
||
dict(code="M-6", mark="P1", content="주철근 커플러 476개(H32)가 모델에 없음 — P1 은 연속 28.545 m", cmp="커플러 표 ↔ 모델", diff="476개 (68본×7 추정)", drawing_side="재료표 아래 커플러 규격 표에 주철근 476 · 띠철근 49", action="커플러 위치·개수 모델 반영 여부 판단", kind="도면↔모델", image=IM["M-6"]),
|
||
dict(code="M-7", mark="B2, B5, C7~C10, C15, P5", content="굽힘 내면지름: H22 76.8 < 77.7, H19 66.5 < 66.85 (3.5db)", cmp="KDS 24 14 21 표 4.5-1 ↔ 모델", diff="0.9 / 0.35 mm 부족", drawing_side="도면에 내면반지름 표기 없음", action="모델 R 을 KDS 기준으로 키울지 결정", kind="기준↔모델", image=IM["M-7"]),
|
||
dict(code="M-9", mark="B1~B6", content="기초 철근 중심 높이가 도면 철근선(상면 100 아래 / 하면 150 위)과 ±22.5 mm 다름 (같은 방향 철근끼리 한 지름씩 어긋남)", cmp="도면 정면도·측면도 철근선 ↔ 모델", diff="상면 77.5/122.5, 하면 127.5/172.5 (±22.5)", drawing_side="철근 선은 상면 -100 / 하면 +150 같은 높이. ※ 단, 도면 정면·측면 단면의 철근 점(원)은 모델과 같은 높이(77.5/122.5/127.5/172.5)에 그려져 있음 (선과 점이 도면 안에서 다름)", action="모델 철근을 도면 선 높이에 맞출지 결정 (지시된 적 없는 모델 쪽 가정). 점 기준으로는 모델 = 도면 (0.0 mm) — 도면 내부 불일치 여부 판단 필요", kind="도면↔모델", image=IM["M-9"], image2=IM.get("M-9b")),
|
||
dict(code="M-10", mark="C7~C14 (수직 스터럽)", content="코핑 스터럽 수직선 상·하단이 도면 철근선보다 위 26.5 / 아래 27.5 mm 더 나감 (41곳 전부, 합 54 = 가산 +54)", cmp="도면 정면도 수직선 ↔ 모델 중심선", diff="상단 +26.5, 하단 -27.5 (합 54.0)", drawing_side="도면 선은 스터럽 철근선 위치 (코핑 상면 -100), 54 는 재료표 NOTE '주철근D + 스터럽D' 가산값", action="모델 스터럽 높이를 도면 선에 맞출지(재료표 L 에는 가산 포함) 결정 (옥성교 M-10 과 같은 유형)", kind="도면↔모델"),
|
||
dict(code="M-8", mark="P3, P4", content="링 이음(커플러) 각도 도면에 기준 없음 (모델 90°/270° 가정)", cmp="도면 없음 ↔ 모델 가정", diff="-", drawing_side="형상 V·X 도해에 COUPLER 위치만", action="각도 기준 확인 (설계자)", kind="미확인", image=IM["M-8"]),
|
||
]
|
||
CHECKS = [
|
||
["재료표","본수(전 마크)","재료표 N","모델 본수","일치","전 마크 본수 일치 (선행 확인)"],
|
||
["재료표","길이·총길이·형상 치수","재료표 L·치수","모델 설계길이·꼭짓점 치수","불일치 (M-1~M-8)",""],
|
||
["재료표","표 산술 (행 L×N, 소계, 단위중량, 총계)","L×N=총길이, 직경별 합","검산","일치","산술 오류 없음"],
|
||
["CTC","기초 상면 B1 (x)","28@250=7000 + 양끝 (도면 단면 점 31개)","31본, 점 위치차 0.0 mm","일치","좌 -3650/-3500, 우 3500/3600 (도면 점 그대로)"],
|
||
["CTC","기초 하면 B2+B3 (x)","56@125=7000 + 양끝 (점 59개)","59본, 0.0 mm","일치",""],
|
||
["CTC","기초 상면 B4 (y)","28@250=7000 + 양끝 (점 31개)","31본, 0.0 mm","일치","좌 -3650, 우 3650"],
|
||
["CTC","기초 하면 B5+B6 (y)","56@125=7000 + 양끝 (점 59개)","59본, 0.0 mm","일치",""],
|
||
["CTC","기초 중앙 B10 (x)","도면 점 7개 @1000 (-3250~2750)","7본 @1000, 0.0 mm","일치",""],
|
||
["CTC","기초 중앙 B7 수직근 (x,y)","13@500=6500, 14본 ×14 (도면 수직선 ±3250)","x -3250~3250, y -3250~3250 (98본 격자)","일치","모델 B7 은 한쪽 100 갈고리 달린 수직근, 길이 2179(수직부) vs 도면 선 2250 (끝 ±16 mm)"],
|
||
["CTC","기초 B8 링 (z)","도면 점 7단 @300 (±3672.5)","7단 @300, 높이 일치","일치",""],
|
||
["CTC","코핑 스터럽 x (C7~C9, C8)","도면 수직선 41개 (-4600~4600, @200/@500)","41개, 위치 차 0.0 mm","일치","도면에 -100 위치 선 1개 더 있음 (스터럽 아님)"],
|
||
["CTC","코핑 C1+C3, C2+C4 (y)","24@125=3000 (25본)","25본씩 @125, -1500~1500","일치",""],
|
||
["CTC","코핑 C5+C6 (y)","12@250=3000 (13본)","13본 @250","일치",""],
|
||
["CTC","기둥 띠철근 P3·P4·P2 (z)","11@150 / 25@150 / 70@300","P3 12개, P4 25개, P2 70개, 위치 일치","일치","합 위치 43538~69938 도면 치수와 같음"],
|
||
["피복","기초 B1~B6 중심 높이","도면 선 상면 100 / 하면 150","77.5/122.5 · 127.5/172.5","불일치 (M-9)","단, 도면 단면 점(원) 높이와는 0.0 mm 일치 (선 ↔ 점 도면 내부)"],
|
||
["피복","코핑 스터럽 C7~C14 상·하단","도면 수직선 끝","상 +26.5 / 하 -27.5","불일치 (M-10)","41곳 전부, 합 54"],
|
||
["피복","코핑 콘크리트 윤곽","코핑 상면 -273523.3(좌)/-273652.8(우), 기둥 접합 -276853.3","상면 71193/71063, 기둥 67863 (오프셋 344716.3)","일치","상면 높이차 129.5↔130, 0.5 mm 이내"],
|
||
["피복","기둥 주철근 P1 반지름·본수","단면 C-C·D-D·E-E 점 68개, r 1125","68본, r 1125.0","일치",""],
|
||
["피복","기둥 띠철근 반지름","도면 링 r 1148","P2·P3·P4 r 1149","일치","1 mm"],
|
||
["피복","코핑 C1~C6 높이, C7 상·하단 구간, C14·C15, S1~S4","—","—","미확인","정면·단면 높이/간격 판독 미완"],
|
||
]
|
||
|
||
cfg = dict(checks=CHECKS, checks_desc="도면 DXF 의 작도 선·단면 점(원)·치수와 모델 철근 중심선을 좌표로 비교 (2026-10-19). 점(원)은 도면 단면에서 철근 중심.", image2_header="캡처 2 (M-9: 모델 기초 콘크리트 + 철근 중심 피복 치수)", bridge="산외교(울산) P1", title="산외교(울산) P1 철근 도면 ↔ 모델 일치 검토 (불일치 종류별 분류)",
|
||
purpose="목적: 도면(재료표·형상 도해)과 라이노 모델이 일치하는지가 최우선. 범위는 모델↔도면 (도면 내부 불일치는 따로 보관). 작성 2026-10-19, 검토 미확정 초안. 기준: KDS 24 14 21.",
|
||
sheet1_desc="도면에 기준이 있거나 없는데 모델이 다르게 만들어진 항목 (M-n). 캡처: 위 도면(형상 도해·재료표) / 아래 모델(라이노).",
|
||
items=items, rows=rows,
|
||
unchecked=[
|
||
dict(item="코핑 C1~C6·C14·C15·S 높이/간격", content="정면도·단면도의 철근 높이·간격·피복 중 코핑 일부", note="기초·기둥·코핑 스터럽 위치는 ⑤ 시트에서 완료", status="일부 미검토"),
|
||
dict(item="받침 세트", content="받침대좌·패드·교량받침·솔플레이트 (일반도 표) 모델 대조", note="선행 보고서 G5 75/75 PASS (표 값 기준)", status="미검토"),
|
||
dict(item="코핑 철근 간 간섭", content="철근끼리 교차·관통", note="사용자 지시로 제외 (검토 단계)", status="제외"),
|
||
dict(item="형식 V·X 의 사각 치수", content="B8(형식 V)은 도해가 원형 링인데 재료표는 사각 A·B — 형상 정의가 불분명", note="도면으로 확인 불가", status="확인 불가"),
|
||
],
|
||
basis=[
|
||
dict(item="입력 파일", content="모델: 산외교P1 G5.3dm (원본 그대로), 도면: 교각배근도(울산P1)_2016.10.28.dwg → .dxf (라이노 변환)"),
|
||
dict(item="재료표", content="DXF 레이어 CS-TABL-TEX2 글자를 x(열)·y(행)로 읽음. 열: 번호 97922 · 형식 98653 · 직경 99384 · 개수 100115 · A 101099 · B 102337 · C 103575 · D 104813 · E 106051 · R 107162 · X1~X4 107957~109772 · J 110566 · L 112234 · 총길이 113472"),
|
||
dict(item="모델 치수", content="중심선(P1-RC-*)의 직선 구간을 연장한 꼭짓점 사이 거리(각진 치수). R 이 있는 형상(P1·C12)은 접선 직선 길이, P3·P4 는 호 길이. P2·P3 는 반원 2조각 = 1본 환산"),
|
||
dict(item="길이 비교", content="모델 철근의 설계길이(user string design_length + coupler_length)와 재료표 L·총길이를 대조. 중심선 실길이가 L 보다 3% 이상 짧은 마크는 J 등 미작도로 기록"),
|
||
dict(item="KDS 계산", content="내면지름 = 2×(중심선 R − 공칭 db/2). H22 R 49.5 → 76.8, H19 42.8 → 66.5 (기준 3.5db 77.7 / 66.85), H32 72 → 112.2, H16 24 → 32.1, H13 19.5 → 26.3 (기준 2db)"),
|
||
dict(item="가산 규칙", content="C10~C13 재료표 치수 = 모델 작도값 + 54(A, C10·C12) / +99(B) / +44(C11·C13 A) — 재료표 NOTE 의 '주철근D + 수직스터럽D' 산식과 연결"),
|
||
])
|
||
json.dump(cfg, open(SCR + r"\sw_cfg.json", "w", encoding="utf-8"), ensure_ascii=False, indent=1)
|
||
print(len(rows))
|