明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2056|回复: 12

[源码] 以下源码为批量统计面积及长度输出到Excel,请大家修改仅批量统计面积输出到Excel....

[复制链接]
发表于 2019-9-14 09:45 | 显示全部楼层 |阅读模式
(defun c:zcmj (/ 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)
  (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) f)
    (setq i (1+ i))
  )
  (close f)
  (princ)
)


"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2019-9-15 09:00 | 显示全部楼层
  1. [code=lisp](defun c:tt (/ d ent f i lst m2 obj pt ss txt x y)
  2.   (setq        TextHeight (getdist "\n输入标注文字高度:")
  3.         Textbh           (getstring "\n输入编号前缀:")
  4.   )
  5.   (defun maketext (txt pt)                ; 生成文字子函数
  6.     (entmake (list '(0 . "TEXT")
  7.                    (cons 62 1)
  8.                    (cons 10 pt)
  9.                    (cons 40 TextHeight)
  10.                    (cons 1 txt)
  11.                    '(41 . 0.8)
  12.              )
  13.     )
  14.   )
  15.   (setvar "cmdecho" 0)
  16.   (vl-load-com)
  17.   (setq        ss  (ssget)
  18.         ent (entlast)
  19.   )
  20.   (command ".region" ss "")
  21.   (setq        ss  (ssadd)
  22.         lst nil
  23.   )
  24.   (while (setq ent (entnext ent))
  25.     (if        (= (cdr (assoc 0 (entget ent))) "REGION")
  26.       (setq obj        (vlax-ename->vla-object ent)
  27.             pt        (vlax-safearray->list
  28.                   (vlax-variant-value (vla-get-centroid obj))
  29.                 )
  30.             m2        (rtos (/ (vla-get-area obj) 1000000) 2 2)
  31.           ;  d        (rtos (/ (vla-get-perimeter obj) 1000) 2 2)
  32.             lst        (cons (list pt m2 ;d
  33.                             ) lst)
  34.       )
  35.     )
  36.   )
  37.   (command ".undo" "")
  38.   (setq
  39.     lst        (vl-sort
  40.           lst
  41.           (function (lambda (x y) (< (car (car x)) (car (car y)))))
  42.         )
  43.   )
  44.   (setq
  45.     lst        (vl-sort
  46.           lst
  47.           (function (lambda (x y) (> (cadr (car x)) (cadr (car y)))))
  48.         )
  49.   )
  50.   (setq        f (getfiled "指定输出文件路径" "" "xls" 1)
  51.         f (open f "a")
  52.   )
  53.   ;(write-line "编号\t周长(m)\t面积(m2)" f)
  54.   (write-line "编号\t面积(m2)" f)
  55.   (setq i 1)
  56.   (foreach x lst
  57.     (setq pt (car x)
  58.           m2 (cadr x)
  59.           d  (caddr x)
  60.     )
  61.     (maketext (strcat Textbh (itoa i))
  62.               (list (car pt) (+ (cadr pt) (* 1.2 TextHeight)))
  63.     )
  64.    ; (maketext (strcat "L=" d "m") pt)
  65.     (maketext (strcat "S=" m2 "m2")
  66.               (list (car pt) (- (cadr pt) (* 1.2 TextHeight)))
  67.     )
  68.     (write-line
  69.       ;(strcat (strcat Textbh (itoa i)) "\t" d "\t" m2)
  70.       (strcat (strcat Textbh (itoa i))  "\t" m2)
  71.       f
  72.     )
  73.     (setq i (1+ i))
  74.   )
  75.   (close f)
  76.   (princ)
  77. )
[/code]
发表于 2019-9-15 20:50 | 显示全部楼层
m2        (rtos (/ (vla-get-area obj) 1000000) 2 2)即然单位是平方米为什么要/1000000
个人认为
m2        (rtos (vla-get-area obj) 2 2)
 楼主| 发表于 2019-9-14 09:45 | 显示全部楼层
上面源码为批量统计面积及长度输出到Excel,请大咖修改仅批量统计面积输出到Excel,长度无需统计及输出,谢谢
 楼主| 发表于 2019-9-15 09:47 | 显示全部楼层

可以了,多谢多谢
发表于 2019-9-17 10:28 | 显示全部楼层
有把标注文字(不炸开)提取到cad或excel里,合并排序的吗
发表于 2019-9-20 09:47 | 显示全部楼层
为什么我用了后显示面积为000呢~~~~
发表于 2019-10-22 12:19 | 显示全部楼层

你好能否修改为批量统计长度输出到excel
发表于 2019-10-22 22:00 | 显示全部楼层
664571221 发表于 2019-10-22 12:19
你好能否修改为批量统计长度输出到excel

我对Excel这个不了解。没弄过。
发表于 2019-11-14 10:21 | 显示全部楼层
学习学习   感谢楼主分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-17 07:05 , Processed in 0.215606 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表