27 lines
1.3 KiB
Python
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)
|