Here is something to play with. Have fun.
(defun c:BConnenct (/ ss dst ang pts pt)
(if (and (setq ss (ssget '((0 . "INSERT,CIRCLE,POINT"))))
(setq dst (getdist "\nMax distance: "))
(not (initget "Horizontal Vertical Orthogonal Diagonal Angular"))
(or (setq ang (getkword "\nExclude direction [Orthogonal/Horizontal/Vertical/Angular/Diagonal] <none>: "))
T)
(setq pts (mapcar '(lambda (e)
(cdr (assoc 10 (entget e))))
(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
)
(repeat (1- (length pts))
(setq pt (car pts)
pts (cdr pts))
(foreach px pts
(and (<= (distance pt px) dst)
(cond ((not (setq ax (angle pt px))))
((not ang))
((= ang "Horizontal")
(not (equal (rem ax pi) 0. 1e-3)))
((= ang "Vertical")
(not (equal (rem ax pi) (/ pi 2) 1e-3)))
((= ang "Orthogonal")
(not (equal (rem ax (/ pi 2)) 0. 1e-3)))
((= ang "Angular")
(equal (rem ax (/ pi 2)) 0. 1e-3))
((= ang "Diagonal")
(not (equal (rem ax (/ pi 2) (/ pi 4)) 0. 1e-3))))
(entmake (list (cons 0 "LINE")
(cons 10 pt)
(cons 11 px)))))))
(princ)
)
Note. If the red ones are missing on purpose, you're unable to exclude them.

Edit: code updated.