这个鸟程序可以框选批量标注面积,字体打下随面积改变的。但不支持圆和非闭合多段线
 - (defun c:mj ( / ee h i slst ss vlalst x xy)
- (setq ss (ssget '((0 . "LWPOLYLINE"))))
- (setq slst (ss-en ss))
- (setq slst
- (vl-remove-if
- 'not
- (mapcar
- '(lambda (x)
- (if
- (= (vlax-curve-isClosed (vlax-ename->vla-object x)) T) ;;判断为闭合的图元名组表
- x
- )
- )
- slst
- )
- )
- )
- (setq vlalst (mapcar 'vla-get-Area (mapcar 'vlax-ename->vla-object slst)))
- (setq i 0)
- (repeat (length slst)
- (bwh (nth i slst))
- (setq ee (emake (nth i vlalst) xy h))
- ;;; (entmod ee)
- (setq i (1+ i))
- )
- (princ)
- )
- ;选择集变图元名表
- (defun ss-en (ss / a en lst)
- (setq a -1)
- (while (setq en (ssname ss (setq a (1+ a))
- )
- )
- (setq lst (cons en lst))
- )
- lst
- )
- ;;包围盒中点坐标(获取字体高度,文字插入点坐标)
- (defun bwh (e / ll ur p2 p4)
- (vla-getboundingbox (vlax-ename->vla-object e) 'll 'ur)
- (setq ll (mapcar 'vlax-safearray->list (list ll ur))
- )
- (setq h
- (* (sqrt
- (apply '+
- (list (expt (apply '- (list (caar ll) (caadr ll))) 2)
- (expt (apply '- (list (cadar ll) (cadadr ll))) 2)
- )
- )
- )
- 0.04
- )
- )
- (setq x (* (apply '+ (list (caar ll) (caadr ll))) 0.5))
- (setq y (* (apply '+ (list (cadar ll) (cadadr ll))) 0.5))
- (setq xy (list x y))
- )
- ;;;建立文本函数
- (defun emake (mj xy h)
- (command "-text" "j" "mc" xy h 0 (rtos mj 2 3)))
|