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

91 lines
9.2 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
SCR = r"C:\Users\User\AppData\Local\Temp\claude\D--Rhino-MCP-rhino-mcp-main\f46b47bc-9105-4079-9b62-fcbee31b26ae\scratchpad"
TT = json.load(open(SCR + r"\ra_table.json", encoding="utf-8"))
tab = TT["tab"]; order = TT["order"]
S = json.load(open(SCR + r"\ra_shapes.json", encoding="utf-8"))
Mo = json.load(open(SCR + r"\ra_model_dims.json", encoding="utf-8"))
IM = json.load(open(SCR + r"\ra_images.json", encoding="utf-8"))
D = {}
for e in S:
D.setdefault(e["mark"], e)
HALF = ("P2", "P2-1")
KDS = {"C3": "[M-6] H25 굽힘 내면지름 87.0 < 3.5db 88.9 (1.9 mm 부족)."}
for mk in ("C7", "C8", "C9", "C10", "C11", "C12", "C13", "C14", "C15", "C16"):
KDS[mk] = "[M-6] H19 굽힘 내면지름 66.5 < 66.85 (0.35 mm 부족)."
V = {}
for mk in ("C1", "C2", "C3", "C4", "C5"):
V[mk] = ("일치 (경미)", "a 일치, 일부 철근 b·c 가 3~17 mm 짧음 [M-4]. 설계길이 = 재료표 L.", "일치")
V["C6"] = ("일치", "하면 곡선(R 5.100/5.000) 형상을 모델이 폴리선 곡선으로 작성, 길이 9.000/9.003 일치.", "일치")
for mk in ("C7", "C9", "C11"):
V[mk] = ("차이", "[M-1] 끝 겹침 c 450 이 형상에 없음. [M-2] a 1.673 = 모델 1.625 + 48. [M-3] b 범위 ↔ 모델 철근별.", "도면↔모델")
for mk in ("C8", "C10", "C12"):
V[mk] = ("차이", "[M-1] 끝 겹침 c 450 이 형상에 없음. [M-2] a 0.673 = 모델 0.625 + 48. [M-3] b 단일값 ↔ 모델 철근별 변화.", "도면↔모델")
V["C13"] = ("차이", "[M-1] 끝 c 350 형상에 없음. [M-3] a 5.898~2.006 · b 1.002 ↔ 모델 a 1.862~5.854 · b 0.795~1.955.", "도면↔모델")
V["C14"] = ("차이", "[M-1] 끝 c 350 · j 290 형상에 없음. [M-3] a 7.375~6.979 · b 1.006 ↔ 모델 변화.", "도면↔모델")
V["C15"] = ("일치", "a 2.000 · b 350 일치.", "일치")
V["C16"] = ("일치", "a 3.300 · b 350 일치.", "일치")
for mk in ("S1", "S2", "S3", "S4"):
V[mk] = ("일치", "치수·길이·본수 일치.", "일치")
V["P1"] = ("차이 (커플러)", "모델 형상 16.260 + 커플러 간격 0.040 = 16.300 (재료표). [M-5] 커플러 54개 모델에 없음.", "도면↔모델")
V["P1-1"] = ("차이 (커플러)", "길이·본수 일치. [M-5] 커플러 61개 모델에 없음.", "도면↔모델")
V["P1-2"] = ("일치", "길이·본수 일치 (H22).", "일치")
V["P2"] = ("미확인", "모델 반링 2조각(214개) = 1본 → 107 환산, 길이 일치. [M-7] 겹침 j 650×2 위치·각도 도면에 없음.", "미확인")
V["P2-1"] = ("미확인", "모델 반링 2조각(96개) = 1본 → 48 환산, 길이 일치. [M-7] 겹침 j 880×2 위치 도면에 없음.", "미확인")
V["P3"] = ("미확인", "a 200 · b 1.832 일치, 끝 길이 c 141 · d 100 정의가 모델(150 / 92·176)과 달라 확인 불가. [M-7]", "미확인")
V["P3-1"] = ("미확인", "a 200 · b 2.137 일치, c 165 ↔ 모델 150. [M-7]", "미확인")
V["P3-2"] = ("일치", "a 1.780 · b 581 · c 200 일치.", "일치")
def m3(x): return "%.3f" % (x / 1000.0)
rows = []
n = 0
tot_t = 0; tot_m = 0
for mk in order:
n += 1
t = tab[mk]; m = Mo[mk]
verdict, note, kind = V[mk]
if mk in KDS:
note += " " + KDS[mk]
d = D.get(mk)
detail = " ".join(d["dims"] + d["dims2"]) if d and (d["dims"] or d["dims2"]) else "(철근상세 치수 없음: 직선)"
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(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
if mk not in HALF and mk != "C6":
model += " · 꼭짓점 치수 " + "/".join(str(int(x)) for x in m["values"][:6]) + ("…" if len(m["values"]) > 6 else "")
tot_t += t["tot"]; tot_m += tot
rows.append(dict(no=str(n), mark=mk, item="형상·길이·본수 (%s)" % t["dia"], table="L %s × N %d = %.3f m" % (m3(t["L"]), t["n"], t["tot"]), detail=detail, model=model, verdict=verdict, note=note, kind=kind))
items = [
dict(code="M-1", mark="C7~C14", content="끝 겹침 c(450/350)·j 290 이 모델 형상에 없음 (재료표 L·설계길이에는 포함)", cmp="철근상세·재료표 L ↔ 모델 형상", diff="C7 L 7.480 = 2×1.673 + 2×1.617 + 2×0.450, 형상 평균 약 0.9 m 짧음", drawing_side="상세 a·b·c(+j) 표기, 형상 도해의 이중선(겹침)", action="형상에 넣을지 가산 길이로만 둘지 판단 (옥성교 M-2 와 같은 유형)", kind="도면↔모델", image=IM["M-1"]),
dict(code="M-2", mark="C7~C12", content="스터럽 폭 a: 도면 1.673 / 0.673 = 모델 1.625 / 0.625 + 48", cmp="철근상세 ↔ 모델", diff="+48 mm", drawing_side="a 가산 규칙(작도 + 48)", action="가산 적용 범위 확인 (운곡교 M-5 · 산외교 M-3 유형)", kind="도면↔모델", image=IM["M-2"]),
dict(code="M-3", mark="C8~C14", content="도면 b 단일값·범위 ↔ 모델 철근별 변화, 총길이 차이", cmp="재료표 ↔ 모델", diff="총길이 C7 -5.33, C8 -37.68, C10 -10.08, C11 -5.33, C12 +17.04, C13 -8.99 m (총계 -49.9 m)", drawing_side="b 단일값(C8 2.301 · C10 2.660 · C12 1.248) 또는 범위만 표기", action="철근별 개별 길이가 의도인지 확인", kind="도면↔모델", image=IM["M-3"]),
dict(code="M-4", mark="C1~C5", content="일부 철근 다리 b·c 가 도면 단일값보다 짧음 (최대 17 mm)", cmp="철근상세 ↔ 모델", diff="C1 b 858 · c 841 ↔ 828~858 (4/9본)", drawing_side="마크당 값 하나", action="코핑 형상에 맞춘 조정인지 확인 (경미)", kind="도면↔모델", image=IM["M-4"]),
dict(code="M-5", mark="P1, P1-1", content="커플러 수량 P1 54 · P1-1 61 (115개) 모델에 없음", cmp="커플러 수량 표 ↔ 모델", diff="115개", drawing_side="철근상세 시트의 '커플러 수량' 표", action="커플러 위치·개수 반영 여부 (산외교 M-6 유형)", kind="도면↔모델", image=IM["M-5"]),
dict(code="M-6", mark="C3, C7~C16", content="굽힘 내면지름 H25 87.0 < 88.9, H19 66.5 < 66.85 (3.5db)", cmp="KDS 24 14 21 표 4.5-1 ↔ 모델", diff="1.9 / 0.35 mm 부족", drawing_side="도면에 내면반지름 표기 없음", action="모델 R 을 KDS 기준으로 키울지 결정", kind="기준↔모델", image=IM["M-6"]),
dict(code="M-7", mark="P2, P2-1, P3, P3-1", content="갈고리 끝 길이 c·d, 겹침 j 위치 도면 기준 불명 (모델 가정)", cmp="철근상세 ↔ 모델", diff="P3 c 141 · d 100 ↔ 모델 92/176, P3-1 c 165 ↔ 150", drawing_side="정의·각도 표기 없음", action="기준 확인 (설계자)", kind="미확인", image=IM["M-7"]),
]
cfg = dict(bridge="Ramp-A교 P1",
title="Ramp-A교 P1 철근 도면 ↔ 모델 일치 검토 (불일치 종류별 분류)",
purpose="목적: 도면(재료표·철근상세)과 라이노 모델이 일치하는지가 최우선. 범위는 모델↔도면 (도면 내부 불일치는 따로 보관). 작성 2026-10-19, 검토 미확정 초안. 기준: KDS 24 14 21.",
sheet1_desc="도면에 기준이 있거나 없는데 모델이 다르게 만들어진 항목 (M-n). 캡처: 위 도면(철근상세·재료표) / 아래 모델(라이노).",
items=items, rows=rows,
unchecked=[
dict(item="코핑·기둥·말뚝 철근 위치", content="정면도·단면도(A-A~J-J) 철근 높이·간격·피복과 모델 위치 대조", note="재료표·철근상세 대조만 완료", status="미검토"),
dict(item="받침 세트", content="받침대좌·패드·교량받침·솔플레이트·PLATE 대조", note="선행 보고서 G5 39/39 PASS (표 값 기준)", status="미검토"),
dict(item="코핑 철근 간 간섭", content="철근끼리 교차·관통", note="사용자 지시로 제외", status="제외"),
dict(item="떠오름 방지 PLATE · SPACER", content="도면(4) 우측 PLATE 1,250×1,250×4 · 철단 · 용접 표와 모델 PLATE", note="재료 외 항목 — 모델 PLATE(P1-PL)는 말뚝 단면 대조 미실시", status="미검토"),
],
basis=[
dict(item="입력 파일", content="모델: ramp-A G5.3dm (디스크 저장본), 도면: Ramp-A교 P1 교각(1)~(4).dwg → .dxf (라이노 변환). 재료표는 (3) 코핑·(4) 기둥/말뚝, 철근상세는 (3)"),
dict(item="재료표", content="DXF(3) 레이어 CS-TABL-TEX2: 기호 x≈64862 · 직경 65762 · 길이(mm, 천 단위 콤마) 67162 · 개수 67862 · 총길이(m) 69562. DXF(4): 좌표 89586 / 99898 열 (길이 m)"),
dict(item="철근상세", content="DXF(3) CS-TEXT 의 L= N= 행 아래 줄(a= b= c= d= j=)을 마크 태그(CSBNUM1 속성 RB_NO)와 짝지어 읽음. A~J 치수 열이 재료표에는 없음"),
dict(item="모델 치수·길이", content="중심선(P1-RC-*, user string mark)의 꼭짓점 사이 거리. 설계길이 = design_length + coupler_length. P2·P2-1 은 반링 2조각 = 1본 환산"),
dict(item="KDS 계산", content="내면지름 = 2×(중심선 R − 공칭 db/2). H25 R 56.2 → 87.0, H19 42.8 → 66.5, H29 65.2 → 101.8, H16 24 → 32.1"),
dict(item="총계", content="도면 재료표 합 %.3f m (SD400 코핑 2401.846 + 기둥·말뚝) ↔ 모델 설계길이 합 %.3f m" % (tot_t, tot_m)),
])
json.dump(cfg, open(SCR + r"\ra_cfg.json", "w", encoding="utf-8"), ensure_ascii=False, indent=1)
print(len(rows), tot_t, tot_m)