Try this
(defun c:per2 (/ *error* c_doc ms l_obj ss c_pt l_pt)
(defun *error* ( msg )
(if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc))
(if (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*EXIT*")) (princ (strcat "\nOops an Error : " msg " occurred.")))
(princ)
);_end_*error*_defun
(setq c_doc (vla-get-activedocument (vlax-get-acad-object))
ms (vla-get-modelspace c_doc)
);end_setq
(if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc))
(vla-startundomark c_doc)
(setq l_obj (vlax-ename->vla-object (car (entsel "\nSelect Line/Polyline : "))))
(prompt "\nSelect Circles : ")
(setq ss (ssget '((0 . "CIRCLE"))))
(vlax-for c_obj (vla-get-activeselectionset c_doc)
(setq c_pt (vlax-get c_obj 'center)
l_pt (vlax-curve-getclosestpointto l_obj c_pt)
);end_setq
(vla-addline ms (vlax-3d-point c_pt) (vlax-3d-point l_pt))
);end_for
(if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc))
);end_defun
I am not one of the robots you're looking for