Files
Pier_v1/pierzainer_ground/inspect_nearby_annotations.py
T
CopilotandCopilot 06e1b97a62
ITAM Code Check / build-and-config-check (push) Failing after 37s
ITAM Docker Build Check / docker-build-check (push) Failing after 1m0s
교각 프로그램 초기 버전
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-11-02 15:55:01 +09:00

27 lines
1.3 KiB
Python

import json,re
from pathlib import Path
import numpy as np
from ezdxf import recover
from build_sample_grounds import OUTPUT,save
from pierzainer_ground.project_coordinates import workbook_piers
jobs=json.loads((OUTPUT/'inputs.json').read_text(encoding='utf-8'))
for job in jobs:
if job['sample'] not in (4,5,6,7,10,11,12):continue
out=Path(job['output']);src=next((out/'cache').glob('*.dxf'));doc,_=recover.readfile(str(src))
centers=np.array([np.mean(p['axis'],axis=0) for p in workbook_piers(job['workbook'])])
found=[]
for block in doc.blocks:
for e in block:
if e.dxftype() not in ('TEXT','MTEXT'):continue
t=e.plain_text() if e.dxftype()=='MTEXT' else e.dxf.text
if not re.fullmatch(r'[-+]?\d{1,3}\.\d+',t.strip()):continue
xy=np.array([e.dxf.insert.y,e.dxf.insert.x])
for scale in (1.,.001):
for dn in (0.,100000.,-100000.):
a=xy*scale+[dn,0]
if np.any(np.linalg.norm(centers-a,axis=1)<250):
found.append(dict(block=block.name,handle=e.dxf.handle,text=t,xyz=list(e.dxf.insert),layer=e.dxf.layer,scale=scale,dn=dn))
save(out/'nearby_numeric_annotations.json',found)
print(json.dumps({'sample':job['sample'],'count':len(found),'examples':found[:12]},ensure_ascii=False),flush=True)