Lee发布了一个很好的解决方案,但由于我已经编写了它,我还是会与大家分享。我走了边界盒路线。
顺便说一句,李很酷。
- <Scroll to see>
- (defun c:ALT (/ foo lst)
- ;; Align TEXT objects
- ;; Alan J. Thomspon, 08.02.10
- (vl-load-com)
- (defun foo (o / a b)
- (vla-getboundingbox o 'a 'b)
- (vlax-safearray->list a)
- )
- (if (and (setq lst (vl-sort ((lambda (/ ss l)
- (if (setq ss (ssget "_:L" '((0 . "TEXT"))))
- (progn
- (vlax-for x (setq ss (vla-get-activeselectionset
- (cond (*AcadDoc*)
- ((setq *AcadDoc*
- (vla-get-activedocument (vlax-get-acad-object))
- )
- )
- )
- )
- )
- ;; (XYZ, height, object)
- (setq l (cons (list (foo x) (vla-get-height x) x) l))
- )
- (vla-delete ss)
- l
- )
- )
- )
- )
- (function (lambda (a b) (> (cadar a) (cadar b))))
- )
- )
- (not (initget 0 "Single Double"))
- (setq *ALT:Space*
- (cond ((getkword (strcat "\nSpecify spacing [single/Double] <"
- (cond (*ALT:Space*)
- ((setq *ALT:Space* "Single"))
- )
- ">: "
- )
- )
- )
- (*ALT:Space*)
- )
- )
- )
- ((lambda (d m)
- (foreach x (cdr lst)
- (vla-move (caddr x)
- (vlax-3d-point (car x))
- (vlax-3d-point (polar (caar lst) (* pi 1.5) (setq d (+ d (* m (cadr x))))))
- )
- )
- )
- 0.
- (if (eq *ALT:Space* "Single")
- 1.5
- 3.
- )
- )
- )
- (princ)
- )
|