import fitz, math from trace import nets doc=fitz.open('Xiaomi_Mi_8_Schematic.pdf') def redtext(page): out=[] for b in page.get_text('dict')['blocks']: for l in b.get('lines',[]): for s in l['spans']: if s['color']==0xFF0000 and s['text'].strip(): out.append((s['text'].strip(), fitz.Rect(s['bbox']))) return out def run(pgno, probes, maxd=18, top=3): page=doc[pgno-1] segs,dsu,key,comp=nets(page) pts=[] for a,b in segs: pts.append(a); pts.append(b) rt=redtext(page) for name,q in probes.items(): d,p=min((math.dist(p,q),p) for p in pts) if d>maxd: print(f'{name:10s} -> NO WIRE (d={d:.1f})'); continue c=dsu.find(key(p)); cp=comp[c] scored=[] for t,r in rt: dm=min(math.hypot(max(r.x0-x,0,x-r.x1), max(r.y0-y,0,y-r.y1)) for x,y in cp) scored.append((dm,t)) scored.sort() print(f'{name:10s} d={d:.1f} n={len(cp):3d} :: ' + ', '.join(f'{t}({dm:.1f})' for dm,t in scored[:top]))