闭合多义线面积批量标注
(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)
j0
)
(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 (listx(+ y 0.3))
p4 (listx(- 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)
)
)
谢谢楼主的分享,试用了,非常好,收藏备用了! 楼主的插件有问题的,后面的楼的代码是对的, 命令: mjjs ; 错误: 参数类型错误: lselsetp nil 花了币确不能用,楼主不是坑人吗?还我币来 成果字体很小,请楼上看清楚再说。不然把最后一行字体改大。 指令: MJJS
; 错误: no function definition: MKLA
我在2004中确实能运行,不知你们cad版本。我也没有收钱,哪来坑人吗? 程序这么长啊,是不是还有更简单的写法 zyhandw 发表于 2013-1-14 16:26 static/image/common/back.gif
程序这么长啊,是不是还有更简单的写法
愿望是良好的,可是目前还没有更好的办法。 程序很好使用,就是单位不对,不知道是什么原因 正需要呢感恩。!!