Files
Pier_v1/Code/review_pipeline/dots_method/sw_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

107 lines
15 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, 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))