【飞鸟集】轻轻松松统计块!
<P>针对目前有很多人还在用R14,而且没有装express tools工具,对过滤器的用法又不熟悉,编写了一个lisp程序,<BR>能用来统计块的数量。<BR>附件中包含了lisp程序和演示文件.<BR>用法:加载程序,运行BC ,先选择要统计的块,然后选择要统计的区域,结束后按F2显示出统计数量。</P><P><BR>附件中包含了lisp程序和演示文件。</P>
<P></P>
<P></P> <p>另外针对很多人用天正,所以改了一下,能适合天正图块。</p><p> </p> 支持楼主 <p>谢谢LZ共享代码。 </p><p>顺便向LZ请教一下: </p><p>1、如何才能得到当前图层的所有块数目</p><p>2、如何从当前图层得到 已知块名的块</p><p>我是个lisp的初学者,为这两个问题困扰了2个星期,查资料、翻书、摸索代码、在论坛上找相关解决方案都没有成功。 还请版主不吝赐教。 万分感谢!</p> (if (setq ss1 (ssget '((0 . "INSERT"))))<br/> ;; 指定图层 <br/> ;; (setq ss1 (ssget "X" (list '(0 . "INSERT") (cons 8 "YourLayerName"))))<br/> ;; ie: (setq ss1 (ssget "X" (list '(0 . "INSERT") (cons 8 "Dim"))))<br/> <br/> ;; 当前图层 = (getvar "Clayer") + 已知块名 (BlockName需改成真实块名)<br/> ;; (setq ss1 (ssget "X" (list '(0 . "INSERT") (cons 8 (getvar "Clayer")) (cons 2 "BlockName"))))<br/> <br/> ;; (ssget "X" (list... ==> 全图滤取<br/> ;; (ssget (list... ==> User 选取 <p>谢谢楼上的大侠,受益菲浅。 </p><p>谢谢!</p> 本帖最后由 作者 于 2007-4-2 20:52:53 编辑 <br /><br /> <p> </p> 本帖最后由 作者 于 2007-4-2 22:04:52 编辑
;| Bss = 统计块数量(支持天正块,斯维尔门窗块) ---ok!--by lxx.2007.3|;
(defun c:Bss (/ ss n nam nams end ent)
(princ " 回车全选!")
(or (setq ss (ssget '((0 . "*INSERT,*OPENING"))))
(setq ss (ssget "x" '((0 . "*INSERT,*OPENING"))))
)
(mapcar 'princ (list "共选中"(sslength ss)"个实体"))
(setq n (sslength ss))
(repeat n
(setq n (1- n)
ent (entget(ssname ss n))
nam (read (strcat (cdr(assoc 0 ent)) ":" (cdr(assoc 2 ent)))))
(if (eval nam)
(set nam (1+ (eval nam)))
(progn (set nam 1)
(setq nams (cons nam nams))
)
)
)
(setq end (mapcar 'cons nams (mapcar 'eval nams)))
(mapcar (function (lambda (x) (set x nil))) nams)
(MAPCAR 'PRINT end)
(PRINC)
)
测试效果:命令: bss
回车全选!
选择对象:
共选中35个实体
(INSERT:$建筑平面$00000477 . 5)
(INSERT:$建筑平面$00000435 . 3)
(SWR_BLOCK_INSERT:$TOILET$00000016 . 9)
(SWR_OPENING:$ARCHSYS$DOOR3D . 4)
(SWR_OPENING:$ARCHSYS$WIN3D . 4)
(INSERT:AVE_GLOBAL . 1)
(INSERT:AVE_RENDER . 8)
(INSERT:AR3_INFO . 1) <p>能不能统计在表格里麻烦编一下,太谢谢</p><p></p> <p>能不能统计在表格里麻烦编一下,太谢谢</p>
页:
[1]
2