MarcoW 发表于 2022-7-5 20:02:56

用于过滤特定blo的Lisp

我正在寻找可以执行以下操作的lisp文件:
 
在发出命令“fildel”后,它应该扫描图形中具有特定名称的块,即“标题栏”。当它这样做了,它应该提示“图纸包含x块称为“标题栏”-做什么:或
 
输入+将删除所有标题栏。
S+enter将提示用户选择要进行交叉的图形部分。
 
我花了几个小时的时间处理
 
http://www.cadtutor.net/forum/showthread.php?t=34972
 
但是,如果没有diesle字符串中的额外命令,例如^C^C^fildel,我就无法做到这一点;标题栏;????
 
不管怎样,我想我搞不懂,所以请帮帮我。(不仅仅是通过提供代码,还包括如何做到这一点。)
 
还访问了:
 
http://afralisp.net/lispa/lisp19.htm
 
让我头痛:-)

Lee Mac 发表于 2022-7-5 20:07:46

试试这个伴侣:
 

(defun c:fildel (/ bdef blk ss tmp uss)
(vl-load-com)
(or *fil:del* (setq *fil:del* "All"))
(setq bdef (getvar "INSNAME"))
(while
   (progn
   (setq blk
       (getstring t
         (strcat "\nSpecify Block Name <" bdef ">: ")))
   (cond ((eq "" blk) (setq blk bdef) nil)
         ((not (snvalid blk))
            (princ "\n** Invalid Block Name **"))
         ((not (tblsearch "BLOCK" blk))
            (princ "\n** Block Not Found in Drawing **"))
         (t nil)))) ; Exit Loop
(if (setq ss (ssget "_X" (list (cons 0 "INSERT")
                              (cons 2 blk))))
   (progn
   (princ (strcat "\nDrawing Contains "
                  (rtos (sslength ss) 2 0) " Blocks with Name: " blk))
   (initget "All Selection")
   (or (not (setq tmp
                (getkword
                  (strcat "\nDelete ll or election? <" *fil:del* "> : "))))
         (setq *fil:del* tmp))
   (cond ((eq *fil:del* "Selection")
            (while (not uss)
            (setq uss (ssget (list (cons 0 "INSERT")
                                     (cons 2 blk)))))
            (setq ss uss)))
   (mapcar 'entdel
       (vl-remove-if 'listp
         (mapcar 'cadr (ssnamex ss))))))
(princ))

MarcoW 发表于 2022-7-5 20:09:32

对象管理组织
 
这就像“很棒”,我的意思是很棒,你知道,完美。
 
李你似乎总是知道所有的解决方案,虽然我知道你正在做lisp大约10个月左右。
 
非常感谢你的例行公事。它工作得很好,我会使用它。

Lee Mac 发表于 2022-7-5 20:14:39

 
很高兴你喜欢
 
谢谢Marco

apsonwane 发表于 2022-7-5 20:18:07

你好
 
上述例程不会删除多个布局中的块。
它只删除当前活动布局中的块。
 
如果你能更新以上程序,这将是很大的帮助。
 
谢谢
阿什语

MarcoW 发表于 2022-7-5 20:20:20

对我来说也是这样,但嘿,我想不可能全部拥有。
对不起,伙计,我不能这么做。
也许李有办法。。。

apsonwane 发表于 2022-7-5 20:25:08

 
 
 
你好
 
上面的例程确实很棒,但它不会删除多个布局中的块。
它只删除当前活动布局中的块。
 
如果你能更新以上程序,这将是很大的帮助。
 
谢谢
阿什语

ronjonp 发表于 2022-7-5 20:26:17

替换以下代码并删除所有代码:
旧的
   (mapcar 'entdel
       (vl-remove-if 'listp
         (mapcar 'cadr (ssnamex ss))))))
 
 
 

(mapcar    'vla-delete
   (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
)

Patrick_35 发表于 2022-7-5 20:31:23

 
你好
 
使用速度更快
(vla-erase (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))而不是拟议的5个回路
 
@+

ronjonp 发表于 2022-7-5 20:32:06

很高兴认识帕特里克。。。谢谢
页: [1] 2
查看完整版本: 用于过滤特定blo的Lisp