def PyRxCmd_doit2() -> None:
try:
filter = [(Db.DxfCode.kDxfStart, "POINT")]
sspointres: tuple[Ed.PromptStatus, Ed.SelectionSet] = Ed.Editor.select(filter)
if sspointres[0] != Ed.PromptStatus.eOk:
print("Oops {}: ".format(sspointres[0]))
return
esplineres = Ed.Editor.entSel("\nPick a pline: ", Db.Polyline.desc())
if esplineres[0] != Ed.PromptStatus.eOk:
print("Oops {}: ".format(esplineres[0]))
return
distres = Ed.Editor.getReal("\nEnter a distance: ")
if distres[0] != Ed.PromptStatus.eOk:
print("Oops {}: ".format(distres[0]))
return
start = time.time()
pline = Db.Polyline(esplineres[1])
pnts = [Db.Point(id).position() for id in sspointres[1].objectIds()]
close = []
for p in pnts:
x = pline.getClosestPointTo(p)
if x.distanceTo(p) <=distres[1]:
close.append((p,x))
print(len(close), time.time() - start)
for item in close:
Ed.Core.grDraw(item[0], item[1], 4,0)
except Exception as err:
traceback.print_exception(err)