"""Find original coordinate callouts and their actual leader endpoints.""" import json,re,sys from pathlib import Path from ezdxf import recover from build_sample_grounds import OUTPUT,save,PACKAGE from pierzainer_ground.dxf_terrain import convert_dwg_to_dxf sys.path.insert(0,str(PACKAGE/'app/Code/bridge_extractor_package/src')) from bridge_drawing_extractor.inference import coordinate_points from bridge_drawing_extractor.geometry import leader_endpoint for job in json.loads((OUTPUT/'inputs.json').read_text(encoding='utf-8')): if job['sample'] not in (5,10,11):continue out=Path(job['output']);support=out/'cache/registration';support.mkdir(exist_ok=True) sources=[p for p in Path(job['drawing']).parent.glob('*.dwg') if '받침' in p.name] for source in sources: dxf=convert_dwg_to_dxf(source,support);doc,_=recover.readfile(str(dxf)) texts=[];segments=[] for e in doc.modelspace(): if e.dxftype() in ('TEXT','MTEXT'): text=e.plain_text() if e.dxftype()=='MTEXT' else e.dxf.text texts.append(dict(h=e.dxf.handle,t=text,x=e.dxf.insert.x,y=e.dxf.insert.y,height=e.dxf.get('height',1) if e.dxftype()=='TEXT' else e.dxf.char_height)) if e.dxftype()=='LINE':segments.append(dict(h=e.dxf.handle,a=list(e.dxf.start)[:2],b=list(e.dxf.end)[:2])) elif e.dxftype()=='LWPOLYLINE': a=[list(p)[:2] for p in e.get_points()] segments.extend(dict(h=e.dxf.handle,a=p,b=q) for p,q in zip(a,a[1:])) coords=coordinate_points(texts) for point in coords: tip=leader_endpoint(point['cad'],segments) if tip:point['leader_tip']=tip[0];point['leader_handles']=[s['h'] for s in tip[1]] report=dict(source=str(source),coordinate_callouts=coords,labels=[t for t in texts if re.search(r'IP[123]|P[1-9]',t['t'])]) save(out/'support_controls.json',report) print(json.dumps({'sample':job['sample'],'coords':coords[:16],'labels':report['labels'][:12]},ensure_ascii=False),flush=True)