明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8384|回复: 31

闭合多义线面积批量标注

  [复制链接]
发表于 2013-1-13 13:55 | 显示全部楼层 |阅读模式
(defun c:mjjs (/ ss j length1 m ent zbc i sum x y n2 cx cy x1 x2 p1 p3 p4 pt area)
   (setvar "cmdecho" 0)
  (setq ss (ssget "x" (list (cons 0 "lwpolyline")))
length1 (- (sslength ss) 1)
j  0
  )
  (while (>= length1 0)
    (setq m   (ssname ss length1)
   ent (entget m)
   zbc '()
   i   1
   sum 0
   x   0
   y   0
     
    )
    (foreach n1 ent
      (if (= (nth 0 n1) 10)
(setq zbc (cons (cdr n1) zbc))
      )
    )
    (foreach n2 zbc
      (if (/= (rem i 2) 0)
(progn
   (setq x1 (nth 0 n2)
  y1 (nth 1 n2)
  i  (+ i 1)
   )
   (if (>= i 3)
     (progn
       (setq area (* (- (* x2 y1) (* x1 y2)) 0.500)
      sum  (+ sum area)
      cx (* (- (* x2 y1) (* x1 y2)) (+ x2 x1))
             cy   (* (- (* x2 y1) (* x1 y2)) (+ y1 y2))
      x (+ x cx)
      y (+ y cy)
       )
     )
   )
)
(progn
   (setq x2   (nth 0 n2)
  y2   (nth 1 n2)
  area (* (- (* x1 y2) (* x2 y1)) 0.500)
  sum  (+ sum area)
  cx   (* (- (* x1 y2) (* x2 y1)) (+ x2 x1))
  cy   (* (- (* x1 y2) (* x2 y1)) (+ y1 y2))
  i    (+ i 1)
  x    (+ x cx)
  y    (+ y cy)
   )

)
      )
    )
    (if (= (rem i 2) 0)
      (setq p1  (nth 0 zbc)
     x2  (nth 0 p1)
     y2  (nth 1 p1)
     area (* (- (* x1 y2) (* x2 y1)) 0.5)
     sum  (+ sum area)
     cx  (* (- (* x1 y2) (* x2 y1)) (+ x2 x1))
     cy  (* (- (* x1 y2) (* x2 y1)) (+ y1 y2))
     x  (+ x cx)
     y  (+ y cy)
      )
      (setq p1  (nth 0 zbc)
     x1  (nth 0 p1)
     y1  (nth 1 p1)
     area (* (- (* x2 y1) (* x1 y2)) 0.5);;;此句确定面积标注字体大小
     sum  (+ sum area)
     cx  (* (- (* x2 y1) (* x1 y2)) (+ x2 x1))
     cy  (* (- (* x2 y1) (* x1 y2)) (+ y1 y2))
     x  (+ x cx)
     y  (+ y cy)
      )
    )
    (setq x  (/ x (* sum 6))
   y  (/ y (* sum 6))
   pt (list  (- x 0.8) y)
          p1 (list  (+ x 0.8)  y)
    )
    (setq sum   (rtos (abs sum) 2 2)

   length1 (- length1 1)
                 p3 (list  x  (+ y 0.3))
                 p4 (list  x  (- y 0.3))
                 j (+ j 1)
               
    )
(setq sum (strcat "S=" sum  "㎡"))
(mkla "面积注释" 1);;;此句可以显示面积标注颜色,1红色2黄色3绿色
    (command "text" "j" "m" p3 0.5 0 sum)
   
   
  )
)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-8-27 14:31 | 显示全部楼层
谢谢楼主的分享,试用了,非常好,收藏备用了!
回复 支持 1 反对 0

使用道具 举报

发表于 2018-2-2 15:29 | 显示全部楼层
楼主的插件有问题的,后面的楼的代码是对的,
发表于 2013-1-13 16:05 | 显示全部楼层
命令: mjjs ; 错误: 参数类型错误: lselsetp nil     花了币确不能用,楼主不是坑人吗?还我币来
 楼主| 发表于 2013-1-13 16:08 | 显示全部楼层
成果字体很小,请楼上看清楚再说。不然把最后一行字体改大。
发表于 2013-1-13 17:37 | 显示全部楼层
指令: MJJS
; 错误: no function definition: MKLA
 楼主| 发表于 2013-1-13 18:00 | 显示全部楼层
我在2004中确实能运行,不知你们cad版本。我也没有收钱,哪来坑人吗?
发表于 2013-1-13 21:01 | 显示全部楼层
发表于 2013-1-14 16:26 | 显示全部楼层
程序这么长啊,是不是还有更简单的写法
 楼主| 发表于 2013-1-17 13:42 | 显示全部楼层
zyhandw 发表于 2013-1-14 16:26
程序这么长啊,是不是还有更简单的写法

愿望是良好的,可是目前还没有更好的办法。
发表于 2013-3-8 17:47 | 显示全部楼层
程序很好使用,就是单位不对,不知道是什么原因
发表于 2013-3-9 17:16 | 显示全部楼层
正需要呢  感恩。!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-9 07:21 , Processed in 0.181414 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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