这个不用高手出手,我简单写了一个。楼主可以根据需要调整一下。

- (defun c:te (/ ss i ename object a1 a2 a3 a color dzin pt)
- (setq ss (ssget '((0 . "LWPOLYLINE") (8 . "AREA") (-4 . "<or") (62 . 1) (62 . 2) (62 . 3) (-4 . "or>") ))
- i 0
- a1 0.0
- a2 0.0
- a3 0.0
- )
- (if ss
- (progn
- (vl-load-com)
- (repeat (sslength ss)
- (setq ename (ssname ss i)
- object (vlax-ename->vla-object ename)
- i (1+ i)
- a (vla-get-area object)
- color (cdr (assoc 62 (entget ename)))
- );setq
- (cond ( (= color 1)
- (setq a1 (+ a1 a))
- )
- ( (= color 2)
- (setq a2 (- a2 a))
- )
- ( (= color 3)
- (setq a3 (+ a3 (* 0.5 a)))
- )
- );cond
- );repeat
- (setq a (+ a1 a2 a3)
- dzin (getvar "dimzin")
- )
- (setvar "dimzin" 0)
- (setq a (rtos a 2 3))
- (setvar "dimzin" dzin)
- (while (not (setq pt (getpoint "\n选择文字插入点:"))))
- (entmake
- (list
- (cons 0 "TEXT")
- (cons 1 a)
- (cons 7 (getvar "TEXTSTYLE"))
- (cons 8 "AREA")
- (cons 10 '(0 0 0))
- (cons 11 (trans pt 1 0))
- (cons 40 (getvar "TEXTSIZE"))
- (cons 50 0)
- (cons 41 0.7)
- (cons 51 0.0)
- (cons 72 1)
- (cons 73 2)
- );list
- );entmake
- );progn
- (princ "\n没选中任何有效曲线!")
- );if
- )
|