很抱歉造成混淆,这是因为我只编写了水平文本的代码,所以现在试试。
- (defun c:Test (/ ss i sn e lst l st p r)
- ;;;;; Tharwat 01. Nov. 2012 ;;;;;
- ;;;;; gathering TEXT entities all together in ;;;;;
- ;;;;; the first left entity from the selection set ;;;;;
- (or acdoc (setq acdoc (vla-get-activedocument (vlax-get-acad-object))))
- (if (setq ss (ssget "_:L" '((0 . "TEXT"))))
- (progn (repeat (setq i (sslength ss))
- (setq sn (ssname ss (setq i (1- i))))
- (setq e (entget sn))
- (setq lst (cons (list (cdr (assoc 10 e)) (cdr (assoc 1 e)) sn) lst))
- )
- (setq l (vl-sort lst '(lambda (a b) (< (car (car a)) (car (car b))))))
- (setq st (apply 'strcat (mapcar 'cadr l)))
- (setq p (mapcar 'car (mapcar 'car lst)))
- (foreach x p
- (if (equal x (car p))
- (setq r (cons x r))
- )
- )
- (vla-StartUndoMark acdoc)
- (if (eq (length r) (length p))
- (progn (setq st (vl-list->string (reverse (vl-string->list st))))
- (if (entmod (subst (cons 1 st) (assoc 1 (entget (caddr (last l)))) (entget (caddr (last l)))))
- (progn (setq l (reverse l)) (setq l (vl-remove (car l) l)) (mapcar 'entdel (mapcar 'caddr l)))
- )
- )
- (if (entmod (subst (cons 1 st) (assoc 1 (entget (caddr (car l)))) (entget (caddr (car l)))))
- (progn (setq l (reverse l)) (setq l (vl-remove (last l) l)) (mapcar 'entdel (mapcar 'caddr l)))
- )
- )
- (vla-EndUndomark acdoc)
- )
- (princ)
- )
- (princ)
- )
|