- 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>
35 lines
1.8 KiB
Python
35 lines
1.8 KiB
Python
import sys; sys.path.insert(0,".")
|
|
import json, collections, io
|
|
from swdots import dots
|
|
B=json.load(open('swpos.json',encoding='utf-8'))
|
|
OFF=328016.3
|
|
o=io.open('swfoot2.txt','w',encoding='utf-8')
|
|
foot=['B1','B2','B3','B4','B5','B6','B7','B8','B9','B10']
|
|
for nm,(x0,x1,cx,ax,perp) in (('정면도',(6700,14250,10473.9,0,1)),('측면도',(20850,28400,24604.3,1,0))):
|
|
# 도면 점 (원 지름 22.5 = 안쪽 점)
|
|
D=[(d[0]-cx,d[1]) for d in dots(x0,x1,-285300,-282700) if d[2]==22.5]
|
|
# 모델: 보는 방향(perp 축)으로 길게 뻗은 철근 — 끝이 보이는 점
|
|
M=[]
|
|
for m in foot:
|
|
for b in B[m]:
|
|
bb=b['bb']; ext=[bb[3]-bb[0],bb[4]-bb[1],bb[5]-bb[2]]
|
|
if ext[perp]>1000 and ext[ax]<60 and ext[2]<60:
|
|
M.append(((bb[ax]+bb[ax+3])/2,(bb[2]+bb[5])/2-OFF,m))
|
|
o.write(u'== %s: 도면 점 %d, 모델 \"끝이 보이는\" 철근 %d\n'%(nm,len(D),len(M)))
|
|
# 도면점 -> 모델
|
|
unmatchedD=[]; used=set()
|
|
for (x,y) in D:
|
|
best=None
|
|
for i,(mx,mz,m) in enumerate(M):
|
|
d=max(abs(mx-x),abs(mz-y))
|
|
if best is None or d<best[0]: best=(d,i)
|
|
if best and best[0]<6: used.add(best[1])
|
|
else: unmatchedD.append((round(x,1),round(y,1),round(best[0],1) if best else None))
|
|
o.write(u' 도면 점 중 모델과 불일치 %d개\n'%len(unmatchedD))
|
|
c=collections.Counter(y for x,y,d in unmatchedD)
|
|
o.write(u' 불일치 도면 점 높이별 %s\n'%sorted(c.items()))
|
|
o.write(u' 예 %s\n'%unmatchedD[:6])
|
|
unM=[M[i] for i in range(len(M)) if i not in used]
|
|
o.write(u' 모델 철근 중 도면 점 없음 %d개: 마크별 %s\n'%(len(unM),collections.Counter(m for x,z,m in unM)))
|
|
cz=collections.Counter((m,round(z,1)) for x,z,m in unM); o.write(u' %s\n'%sorted(cz.items()))
|