[求助]统计所选多线段封闭区域内块的数量
<p>明经里关于统计一张CAD图里面相同块(或全部块)的数量的程序已经有不少,但程序功能不是够强大。</p><p>统计块的范围不是整张图纸就是某个范围内(该范围一般只能用鼠标框选),但是,如果是大型的公建的地下室或裙楼</p><p>部分,一层有多个防火分区,而每个防火分区形状各异。如果要统计每个防火分区内某个块或全部块的数量,则相当烦琐。哪位大虾能做个统计图块数量的程序:先用多线段绘出各防火分区范围,再用统计图块的程序命令,选取统计范围时点击所选的某个多选段,就可以统计出该多线段封闭区域内图块的数量。</p><p></p> sweetsea 发表于 2015-7-14 14:22;统计封闭复线内的块。明经 ZZXXQQ 2009.6.8
(DEFUN C:TT ()
(IF (AND (SETQ S1 (ENTSEL "\nSelect a ...
(defun c:tt( )
(if(setq ss(ssget":E:S"'((0 . "INSERT"))))
(progn(setq bnm(cdr(assoc 2(entget(ssname ss 0)))))(if(and(setq s1(entsel"\n选择封闭多段线: "))(setq EN(entget(car s1)))(=(cdr(assoc 0 EN))"LWPOLYLINE")(=(cdr(assoc 70 EN))1))(progn(setq ptn'())
(foreach N EN(if(=(car N)10)(setq ptn (cons(cdr N)ptn))))(setq ss(ssget"WP"ptn(list'(0 . "INSERT") (cons 2 bnm))))))))(if ss(progn(setq nn(sslength ss))
(alert(strcat "共找到了图块""【" bnm "】"""(itoa nn)" 个"))))
(princ)
)
sweetsea 发表于 2015-7-14 14:22
;统计封闭复线内的块。明经 ZZXXQQ 2009.6.8
(DEFUN C:TT ()
(IF (AND (SETQ S1 (ENTSEL "\nSelect a ...
你说的对。我也需要这样的插件。最好是可以同时选择多个块,然后一起统计。 命令: TT
选择对象:
参数类型错误: lselsetp nil 各位编程好手们帮帮忙啊,我顶~~~ 在选择的时候输入wp或者cp就能满足你的要求了 本帖最后由 作者 于 2009-6-9 12:42:24 编辑
;统计封闭复线内的块。明经 ZZXXQQ 2009.6.8
(DEFUN C:TT ()
(IF (AND (SETQ S1 (ENTSEL "\nSelect a Polyline 选择多段线 :"))
(SETQ ENT(ENTGET(CAR S1)))
(= (CDR(ASSOC 0 ENT)) "LWPOLYLINE")
(= (CDR(ASSOC 70 ENT)) 1)) (PROGN
(SETQ PLST (LIST))
(FOREACH N ENT (IF (= (CAR N) 10) (SETQ PLST (CONS (CDR N) PLST))))
(SETQ PLST (REVERSE PLST))
(SETQ SS (SSGET "WP" PLST '((0 . "INSERT"))))
))
(IF SS (SSLENGTH SS) 0)
)
<strong><font face="Verdana" color="#da2549">ZZXXQQ<font color="#000000">版主的程序有问题,加载后无任何反应哟</font></font></strong> 四楼改了,再试试。 <p>如题,等待高手~~~</p> ZZXXQQ发表于2009-6-8 12:57:00static/image/common/back.gif
<p>程序加载后如下:</p><p>[检查文字 <未命名-1> 正在加载...]<br/>.<br/>; 错误: 参数太少: (IF (AND ( ... ) ( ... ) ( ... ) ... ))<br/>.<br/>; 错误: 输入中含有多余的闭括号<br/>; 检查完成.<br/> 程序还有错误</p> ;统计封闭复线内的块。明经 ZZXXQQ 2009.6.8
(DEFUN C:TT ()
(IF (AND (SETQ S1 (ENTSEL "\nSelect a Polyline 选择多段线 :"))
(SETQ ENT(ENTGET(CAR S1)))
(= (CDR(ASSOC 0 ENT)) "LWPOLYLINE")
(= (CDR(ASSOC 70 ENT)) 1))(PROGN
(SETQ PLST (LIST))
(FOREACH N ENT (IF (= (CAR N) 10) (SETQ PLST (CONS (CDR N) PLST))))
(SETQ PLST (REVERSE PLST))
(SETQ SS (SSGET "WP" PLST '((0 . "INSERT"))))
))
(IF SS (SSLENGTH SS) 0)
) 程序加载后提示选择多段线,选择多段线后又无任何反应了。程序还有问题。