问:

求一个cad lisp一键选取完全相同的图形

答:
在AutoCAD中,可以通过LISP编程实现一键选取完全相同的图形。思路如下:
1. 获取当前选取的图形实体,例如获取选择集合ssget的结果。
2. 获取这些图形的属性,比如层名(layer)、颜色(color)、线型(ltype)、线宽(lwidth)、样式(style)等。这些属性如果完全相同,则可认为是相同的图形。
3. 循环遍历图纸上的所有实体,检查每一个实体的属性是否与步骤2获取的选取图形属性完全匹配。
4. 如果属性匹配,则将该实体添加到选择集合,实现多选。
5. 最终,刷新重新生成选择集合ssget,就实现了一键选取所有相同属性的图形。
具体LISP代码可以这样实现:
(defun c:selectsame / ss ent attri butvalues layers styles) 
 (setq ss (ssget)   ;获取当前选择集合
       attri '(color layer ltype lwidth) ;要比较的属性列表
       ) 
 (if (= (sslength ss) 0)   ;如果没有选择图形,退出
    (prompt "\n没有图形被选择,请选择图形!")
    (progn
     (setq layers (entget (ssname ss 0))   ;获取选取图形的层属性
           color (cdr (assoc 0 layers))   
           ltype (cdr (assoc 6 layers))   
           lwidth (cdr (assoc 39 layers))   
           style (cdr (assoc 7 layers))       
           butvalues (list color ltype lwidth style) ;要匹配的属性值列表
           ) 
     (prompt "\n开始搜索相同属性的图形...")
     (setq ent (entnext (ssname ss (1- (sslength ss))))) 
     (while ent  
       (if (and 
              (equal (cdr (assoc 0 (entget ent))) color) ;检查颜色属性
              (equal (cdr (assoc 6 (entget ent))) ltype) ;检查线型属性  
              (equal (cdr (assoc 39 (entget ent))) lwidth) ;检查线宽属性
              (equal (cdr (assoc 7 (entget ent))) style) ;检查样式属性
              )
         (ssadd ent ss)     ;添加到选择集合
         ) 
       (setq ent (entnext ent)) ;检查下一实体  
       ) 
     (prin1 "\n选取完成!")  
     (sssetfirst ss) ;重新生成选择集合 
     )
    )
)