写了个比较简单的

- (defun c:ttomt (/ ss n lst en str h pt st lay)
- (setq ss (ssget '((0 . "text"))))
- (repeat (setq n (sslength ss))
- (setq lst (cons (list (setq en (ssname ss (1- n)))
- (cadr (cdr (assoc 10 (entget en))))
- )
- lst
- )
- n (1- n)
- )
- )
- (setq
- lst (vl-sort lst
- (function (lambda (a1 a2) (> (cadr a1) (cadr a2))))
- )
- )
- (setq str
- (apply
- 'strcat
- (mapcar
- '(lambda (x) (strcat x "\\P"))
- (mapcar '(lambda (x) (cdr (assoc 1 (entget (car x))))) lst)
- )
- )
- )
- (setq str (substr str 1 (- (strlen str) 2)))
- (setq h (cdr (assoc 40 (entget (car (car lst)))))
- pt (polar (cdr (assoc 10 (entget (car (car lst))))) (/ pi 2) h)
- st (cdr (assoc 7 (entget (car (car lst)))))
- lay (cdr (assoc 8 (entget (car (car lst)))))
- )
- (entmake (list '(0 . "MTEXT")
- '(100 . "AcDbEntity")
- '(100 . "AcDbMText")
- (cons 8 lay)
- (cons 40 h)
- (cons 7 st)
- (cons 1 str)
- (cons 10 pt)
- )
- )
- (foreach n lst (entdel (car n)))
- (princ)
- )
|