 - [code=lisp](defun c:tt (/ d ent f i lst m2 obj pt ss txt x y)
- (setq TextHeight (getdist "\n输入标注文字高度:")
- Textbh (getstring "\n输入编号前缀:")
- )
- (defun maketext (txt pt) ; 生成文字子函数
- (entmake (list '(0 . "TEXT")
- (cons 62 1)
- (cons 10 pt)
- (cons 40 TextHeight)
- (cons 1 txt)
- '(41 . 0.8)
- )
- )
- )
- (setvar "cmdecho" 0)
- (vl-load-com)
- (setq ss (ssget)
- ent (entlast)
- )
- (command ".region" ss "")
- (setq ss (ssadd)
- lst nil
- )
- (while (setq ent (entnext ent))
- (if (= (cdr (assoc 0 (entget ent))) "REGION")
- (setq obj (vlax-ename->vla-object ent)
- pt (vlax-safearray->list
- (vlax-variant-value (vla-get-centroid obj))
- )
- m2 (rtos (/ (vla-get-area obj) 1000000) 2 2)
- ; d (rtos (/ (vla-get-perimeter obj) 1000) 2 2)
- lst (cons (list pt m2 ;d
- ) lst)
- )
- )
- )
- (command ".undo" "")
- (setq
- lst (vl-sort
- lst
- (function (lambda (x y) (< (car (car x)) (car (car y)))))
- )
- )
- (setq
- lst (vl-sort
- lst
- (function (lambda (x y) (> (cadr (car x)) (cadr (car y)))))
- )
- )
- (setq f (getfiled "指定输出文件路径" "" "xls" 1)
- f (open f "a")
- )
- ;(write-line "编号\t周长(m)\t面积(m2)" f)
- (write-line "编号\t面积(m2)" f)
- (setq i 1)
- (foreach x lst
- (setq pt (car x)
- m2 (cadr x)
- d (caddr x)
- )
- (maketext (strcat Textbh (itoa i))
- (list (car pt) (+ (cadr pt) (* 1.2 TextHeight)))
- )
- ; (maketext (strcat "L=" d "m") pt)
- (maketext (strcat "S=" m2 "m2")
- (list (car pt) (- (cadr pt) (* 1.2 TextHeight)))
- )
- (write-line
- ;(strcat (strcat Textbh (itoa i)) "\t" d "\t" m2)
- (strcat (strcat Textbh (itoa i)) "\t" m2)
- f
- )
- (setq i (1+ i))
- )
- (close f)
- (princ)
- )
[/code] |