- 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>
91 lines
9.2 KiB
Python
91 lines
9.2 KiB
Python
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)
|