AutoCAD中块的计数与替换


 

盛青

 

 

  块(BLOCK)是AutoCAD制图中一种重要的实体。在工程图纸中,许多已形成规范或标准的设备元件的图形

符号往往被制成图块,编入图库,以利于今后调用。有时候一张图纸中需要统计相同元件的个数,例如电气开

关、照明灯具等,或者应客户要求需要改变设备,以另一种设备替换,在设备元件较多的情况下,手工处理显

然不合适。笔者于是编写了以下两个小程序,供大家参考。程序在AutoCAD12或更高版本下均获得通过。

 

  程序1:统计所选择的块的数量。 

  (defunc:count(/s1 s2 sum) 

  (setq s1nil s2 nil sum0) 

  (setq s1(ssget));选择一个块 

  (setq s1(ssnames10));获得实体名称 

  (setq s1(entgets1)) 

  (setq s1(cdr(assoc2 s1)));获得块名 

  (setq s2(ss get″x″(list(cons0″INSERT″)(cons2s1))));将同名块加入选择集 

  (setq sum(ss length s2));统计数量 

  (terpri);输出结果 

  (princ″″) 

  (princs1) 

  (princ″″) 

  (princsum) 

  (princ″found.″) 

  (princ))

 

   程序2:以新块替换旧块,并保持插入点、比例、角度不变。 

  (defunc :replace(/en s0 s1s2 s3 s4) 

  (setq s0 nil s1 nil s2 nil s3 nil s4 nil en nil) 

  (setq s0(ss get));选择一个块 

  (setq en(ss names00));获得实体名称 

  (setq s0(en tgeten)) 

  (setq s1(cdr(assoc2s0)));获得块名 

  (setq s2(cdr(assoc10s0)));获得插入点 

  (setq s3(cdr(assoc41s0)));获得比例因子

  (setq s4(cdr(assoc50s0)));获得旋转角度 

  (setq s1(getstring″Replace blockname:″));输入新块名 

  (COMMAND ″ERASE″ en″″);删除旧块 

  (COMMAND ″INSERT″ s1 s2 s3 s3 s4);插入新块完成替换)

 

  当然,在最新的AutoCAD14中的bonus工具里,有一个名为count.lsp的AutoLISP程序,可以统计出全图内

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