程图纸中,许多已形成规范或标准的设备元件的图形符号
往往被制成图块,编入图库,以利于今后调用。有时候一张图纸中需要统计相同元件的个数,例如电气开关、照明灯具等,或者应客户要求需要改变设备,以另一种设备替换,在设备元件较多的情况下,手工处理显然不合适。笔者于是编写了以下两个小程序,供大家考。程序在Auto
CAD12或更高版本下均获得通过。
程序1:统计所选择的块的数量。
(defun
c:count(/
s1
s2
sum)
(setq
s1
nil
s2
nil
sum
0)
(setq
s1
(ssget))
;选择一个块
(setq
s1
(ssname
s1
0))
;获得实体名称
(setq
s1
(entget
s1))
(setq
s1
(cdr
(assoc
2
s1)))
;获得块名
(setq
s2
(ssget
″x″
(list
(cons
0
″INSERT″
)
(cons
2
s1))))
;将同名块加入选择集
(setq
sum
(sslength
s2))
;统计数量
(terpri)
;输出结果
(princ
″)
(princ
s1)
(princ
″)
(princ
sum)
(princ
found.″)
(princ)
)
程序2:以新块替换旧块,并保持插入点、比例、角
度不变。
(defun
c:replace(/
en
s0
s1
s2
s3
s4)
(setq
s0
nil
s1
nil
s2
nil
s3
nil
s4
nil
en
ni
l)
(setq
s0
(ssget))
;选择一个块
(setq
en
(ssname
s0
0))
;获得实体名称
(setq
s0
(entget
en))
(setq
s1
(cdr
(assoc
2
s0)))
;获得块名
(setq
s2
(cdr
(assoc
10
s0)))
;获得插入点
(setq
s3
(cdr
(assoc
41
s0)))
;获得比例因子
(setq
s4
(cdr
(assoc
50
s0)))
;获得旋转角度
(setq
s1
(getstring
″Replace
block
name:″))
;输入新块名
(COMMAND
″ERASE″
en
″″)
;删除旧块
(COMMAND
″INSERT″
s1
s2
s3
s3
s4)
;插入新块完成替换
)
当然,在最新的AutoCAD
14中的bonus工具里,有一
个名为count.lsp的AutoLISP程序,可以统计出全图内所有
图块的数量,大家也可以尽情享用。