关于测算建筑面积的lsp,逛透论坛尚无看到符合要求的,请高手出手!
本帖最后由 zcenc 于 2011-12-31 05:10 编辑我是搞建筑的,经常要算建筑面积,一般情况下我是用PL线围合一圈,然后用LI。但是碰到阳台比较复杂的就麻烦了,因为阳台面积只能算一半,还有建筑局部有挖空部分的情况;
我的想法是:
1、我先用3种不同颜色(比如红、绿、黄)的PL线分别把待算全部面积(红线)的、一半面积(绿线)的、和减掉面积的区域描点围合起来;(这3种PL线最好在一个图层(如AREA)中,实在不好办的话分3个图层也行,毕竟图层太多不好管理);
2、然后输入程序命令,框选所有PL线,最后得出个数据几+几-几=多少m2;
3、最后把计算结果(几+几-几=多少m2)写入图中指定位置。
希望哪位大侠能帮小弟解决这个工作上的大难题,不胜感激!(因无币,故发这,不然就悬赏了)
0PL线
本帖最后由 zcenc 于 2011-12-31 05:09 编辑
自顶一下
有想法,应很好解决了 我也顶一下顶出高手高手来 学习一下 这个不用高手出手,我简单写了一个。楼主可以根据需要调整一下。
(defun c:te (/ ss i ename object a1 a2 a3 a color dzin pt)
(setq ss (ssget '((0 . "LWPOLYLINE") (8 . "AREA") (-4 . "<or") (62 . 1) (62 . 2) (62 . 3) (-4 . "or>") ))
i0
a1 0.0
a2 0.0
a3 0.0
)
(if ss
(progn
(vl-load-com)
(repeat (sslength ss)
(setq ename(ssname ss i)
object (vlax-ename->vla-object ename)
i (1+ i)
a (vla-get-area object)
color(cdr (assoc 62 (entget ename)))
);setq
(cond ( (= color 1)
(setq a1 (+ a1 a))
)
( (= color 2)
(setq a2 (- a2 a))
)
( (= color 3)
(setq a3 (+ a3 (* 0.5 a)))
)
);cond
);repeat
(setq a (+ a1 a2 a3)
dzin (getvar "dimzin")
)
(setvar "dimzin" 0)
(setq a (rtos a 2 3))
(setvar "dimzin" dzin)
(while (not (setq pt (getpoint "\n选择文字插入点:"))))
(entmake
(list
(cons 0"TEXT")
(cons 1a)
(cons 7(getvar "TEXTSTYLE"))
(cons 8"AREA")
(cons 10 '(0 0 0))
(cons 11 (trans pt 1 0))
(cons 40 (getvar "TEXTSIZE"))
(cons 50 0)
(cons 41 0.7)
(cons 51 0.0)
(cons 72 1)
(cons 73 2)
);list
);entmake
);progn
(princ "\n没选中任何有效曲线!")
);if
)
谢谢楼上的兄台,这么迅速热心的给出了解决方案!
程序基本达成了我的想法,只是字太小了点,还有单位不是平方米!但还是万分感谢! zcenc 发表于 2011-12-31 14:15 static/image/common/back.gif
谢谢楼上的兄台,这么迅速热心的给出了解决方案!
程序基本达成了我的想法,只是字太小了点,还有单 ...
字的大小是根据你当前系统变量textsize确定的,可以根据你自己的需要修改一下(cons 40 (getvar "textsize"))这一句,单位的问题取决于你画图的单位了,可以自己把a a1 a2 a3 这几个数乘上单位换算因子。 本人是菜鸟中的菜鸟,多谢vormittag 兄的解释,我试试看!
还有个小问题,起初没想好。如果是任意的图层,不一定要非要area,只要是这三种颜色的PL线就能进行如上计算,这个程序该怎么改一下,还请赐教! 本帖最后由 vormittag 于 2011-12-31 15:01 编辑
zcenc 发表于 2011-12-31 14:47 http://bbs.mjtd.com/static/image/common/back.gif
本人是菜鸟中的菜鸟,多谢vormittag 兄的解释,我试试看!
还有个小问题,起初没想好。如果是任意的图层, ...
其实上面的代码还是有缺陷的,三种颜色必须是指定颜色,如果图线颜色是随层的红、绿、黄则还需要进行判断了。
至于任意图层的问题,只要在过滤列表里把(8 . "AREA")去掉就行了。
ue
本帖最后由 zcenc 于 2011-12-31 15:26 编辑vormittag 发表于 2011-12-31 14:21 http://bbs.mjtd.com/static/image/common/back.gif
字的大小是根据你当前系统变量textsize确定的,可以根据你自己的需要修改一下(cons 40 (getvar "textsize ...
再次谢过vormittag 的及时回复,前两个问题我试了半天还是没搞定(字体想300大),还望给出正确的语句,不然俺今晚觉都睡不好