嗨,西蒙,
请尝试以下程序并让我知道:
- (defun c:test (/ sel int obj lst txt srt p pt c l e)
- ;;====================================================;;
- ;; Author: Tharwat Al Shoufi. Date: 10.Apr.2016 ;;
- ;; move single text objects to nearest line with 1.0 ;;
- ;; unit away on Y Axe. ;;
- ;;====================================================;;
- (if (setq sel (ssget "_:L" '((0 . "LINE,TEXT"))))
- (repeat (setq int (sslength sel))
- (if (eq "LINE" (cdr (assoc 0 (entget (setq obj (ssname sel (setq int (1- int))))))))
- (setq lst (cons obj lst))
- (setq txt (cons obj txt))
- )
- )
- )
- (if (and lst txt)
- (mapcar '(lambda (xt)
- (setq l nil
- e (entget xt)
- p (cdr (assoc 10 e))
- )
- (mapcar '(lambda (n)
- (setq c (vlax-curve-getclosestpointto n p)
- l (cons (list (distance c p) c) l)
- )
- )
- lst)
- (setq srt (vl-sort l '(lambda (j k) (< (car j) (car k)))))
- (if (< (cadr (cadar srt)) (cadr p))
- (setq pt (polar (cadar srt) (* pi 0.5) 1.0))
- (setq pt (polar (cadar srt) (* pi 1.5) (1+ (cdr (assoc 40 e)))))
- )
- (entmod (subst (cons 10 pt)
- (assoc 10 e)
- e))
- )
- txt
- )
- )
- (princ)
- )(vl-load-com)
|