如果你能按层次、风格和/或高度过滤文本,这会有很大帮助。
试试这个
(defun C:TEST (/ sp st i e p1 p2 lp pt) (if (and (setq sp (ssget '((0 . "*POLYLINE")))) (setq st (ssget "X" '((0 . "TEXT")))); add here more filters (8 . "Text Layer") (7 . "Text Style") ) (progn (repeat (setq i (sslength sp)) (setq i (1- i) e (ssname sp i) p1 (vlax-curve-getstartpoint e) p2 (vlax-curve-getendpoint e) lp (cons (list (vlax-curve-getdistatparam e (vlax-curve-getendparam e)) (list nil (distance p1 '(0.0 0.0 0.0)) p1) (list nil (distance p2 '(0.0 0.0 0.0)) p2) ) lp ) ) ) (repeat (setq i (sslength st)) (setq i (1- i) e (entget (ssname st i)) pt (cdr (assoc 10 e)) lp (mapcar (function (lambda (pl) (cons (car pl) (mapcar (function (lambda (x / d) (if (< (setq d (distance pt (caddr x))) (cadr x)) (list (cdr (assoc 1 e)) d (caddr x)) x ) ) ) (cdr pl) ) ) ) ) lp ) ) ) (setq lp (mapcar (function (lambda (x) (list (caadr x) (caaddr x) (car x)) ) ) lp ) ) (mapcar 'print lp) (textscr) ) ) (princ))