- 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.4 KiB
Python
35 lines
1.4 KiB
Python
import json, io, collections
|
|
B=json.load(open('swpos.json',encoding='utf-8'))
|
|
o=io.open('swruns.txt','w',encoding='utf-8')
|
|
def runs(vals):
|
|
v=sorted(set(round(x,1) for x in vals))
|
|
if len(v)<2: return str(v)
|
|
out=[]; cur=[v[0]]
|
|
for a in v[1:]:
|
|
if len(cur)>=2 and abs((a-cur[-1])-(cur[-1]-cur[-2]))<1.5: cur.append(a)
|
|
elif len(cur)==1: cur.append(a)
|
|
else:
|
|
out.append(cur); cur=[cur[-1],a] if False else [a]
|
|
out.append(cur)
|
|
# 간단 표기: 연속 구간 (start, n, pitch)
|
|
res=[]
|
|
i=0
|
|
v=sorted(set(round(x,1) for x in vals))
|
|
i=0
|
|
while i<len(v):
|
|
j=i+1
|
|
if j<len(v):
|
|
p=v[j]-v[i]
|
|
while j+1<len(v) and abs((v[j+1]-v[j])-p)<1.5: j+=1
|
|
res.append('%s..%s n=%d @%.1f'%(v[i],v[j],j-i+1,p)); i=j+1
|
|
else:
|
|
res.append('%s'%v[i]); i+=1
|
|
return ' | '.join(res)
|
|
for mk in sorted(B,key=lambda s:(s[0],int(s[1:]) if s[1:].isdigit() else 0)):
|
|
L=B[mk]
|
|
cx=[(b['bb'][0]+b['bb'][3])/2 for b in L]; cy=[(b['bb'][1]+b['bb'][4])/2 for b in L]; cz=[(b['bb'][2]+b['bb'][5])/2 for b in L]
|
|
nx,ny,nz=len(set(round(v) for v in cx)),len(set(round(v) for v in cy)),len(set(round(v) for v in cz))
|
|
o.write(u'%s n=%d %s %s dist x=%d y=%d z=%d\n'%(mk,len(L),L[0]['dia'],L[0]['shape'],nx,ny,nz))
|
|
for ax,vals,nn in (('x',cx,nx),('y',cy,ny),('z',cz,nz)):
|
|
if nn>1: o.write(u' %s: %s\n'%(ax,runs(vals)))
|