你需要我之前发布的子程序。
- (defun c:Test2 (/ _closest ss)
- ;; Alan J. Thompson,
- (defun _closest (pt)
- (caar
- (vl-sort textlist (function (lambda (a b) (< (distance pt (cadr a)) (distance pt (cadr b))))))
- )
- )
- (if (setq ss (ssget '((0 . "LINE,*POLYLINE,TEXT"))))
- ((lambda (i / e d textlist pts lst)
- (while (setq e (ssname ss (setq i (1+ i))))
- (cond ((eq (cdr (assoc 0 (setq d (entget e)))) "TEXT")
- (setq textlist (cons (list (cdr (assoc 1 d)) (cdr (assoc 10 d))) textlist))
- )
- ((wcmatch (cdr (assoc 0 d)) "LINE,*POLYLINE")
- (mapcar (function (lambda (a b) (setq lst (cons (list a b (distance a b)) lst))))
- (setq pts (AT:GetVertices e))
- (cdr pts)
- )
- )
- )
- )
- ;;; (setq lst
- ;;; (mapcar
- ;;; (function (lambda (x)
- ;;; (reverse (cons (caddr x) (mapcar (function _closest) (cdr (reverse x)))))
- ;;; )
- ;;; )
- ;;; lst
- ;;; )
- ;;; )
- (setq lst
- (mapcar
- (function (lambda (x)
- (strcat (_closest (car x))
- ","
- (_closest (cadr x))
- ","
- (rtos (caddr x) (getvar 'LUNITS) 0)
- )
- )
- )
- lst
- )
- )
- (mapcar 'print lst)
- )
- -1
- )
- )
- (princ)
- )
|