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

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)))