;; | ---------------------------------------------------------------------------- ;; | GE_GetNearestNode ;; | ---------------------------------------------------------------------------- ;; | Function : Returns the nearest node (DXF Code 10) around a point from a ;; | selection set of entities ;; | Arguments: ;; | 'pt' - Point, around which to search ;; | 'ss' - Selection set to search ;; | 'MeasD' - Measure distances ("Slope"/"Horiz") ;; | 'Types' - List of target object types to match ;; | If 'nil' , no criteria to match ;; | 'ExclLst' - Exclusion list of entities in the selection set that ;; | should NOT be processed by the function. ;; | ;; | Action : Returns the nearest point and object ;; | Updated : November 25, 2006 ;; | e-mail : rakesh.rao@4d-technologies.com ;; | Web : www.4d-technologies.com ;; | ---------------------------------------------------------------------------- (defun GE_GetNearestNode( pt ss MeasD Types ExclLst / ssl cnt ename en entl dist _pt __pt len _ename Ok HndLst Hnd ) (setq __pt nil _ename nil HndLst '() ) (foreach ename ExclLst (if (setq entl (entget ename)) (setq HndLst (cons (LI_item 5 entl) HndLst)) ) ) (if ss (progn (setq ssl (sslength ss) cnt 0 dist 1E20 ) (repeat ssl (setq ename (ssname ss cnt) entl (entget ename) en (LI_item 0 entl) _pt (LI_item 10 entl) cnt (1+ cnt) Ok nil ) (cond ((not Types) (setq Ok T) ) ((member en Types) (setq Ok T) ) ) (if Ok (progn (if HndLst (progn (setq Hnd (LI_item 5 entl) Ok nil ) (if (not (member Hnd HndLst)) (setq Ok T) ) )) (if Ok (progn (if (= MeasD "Slope") (setq len (distance pt _pt)) (setq len (distance (list (car pt) (cadr pt) 0.0) (list (car _pt) (cadr pt) 0.0) ) ) ) (if (<= len dist) (setq dist len __pt _pt _ename ename ) ) )) )) ) )) (if (and __pt _ename) (list __pt _ename) nil) )