AutoCAD中块的计数与替换

块(BLOCK)AutoCAD制图中一种重要的实体。在工

程图纸中,许多已形成规范或标准的设备元件的图形符号

往往被制成图块,编入图库,以利于今后调用。有时候一张图纸中需要统计相同元件的个数,例如电气开关、照明灯具等,或者应客户要求需要改变设备,以另一种设备替换,在设备元件较多的情况下,手工处理显然不合适。笔者于是编写了以下两个小程序,供大家考。程序在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程序,可以统计出全图内所有

图块的数量,大家也可以尽情享用。


标签:AutoCAD 计数 替换