用于过滤特定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
让我头痛:-) 试试这个伴侣:
(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))
对象管理组织
这就像“很棒”,我的意思是很棒,你知道,完美。
李你似乎总是知道所有的解决方案,虽然我知道你正在做lisp大约10个月左右。
非常感谢你的例行公事。它工作得很好,我会使用它。
很高兴你喜欢
谢谢Marco 你好
上述例程不会删除多个布局中的块。
它只删除当前活动布局中的块。
如果你能更新以上程序,这将是很大的帮助。
谢谢
阿什语 对我来说也是这样,但嘿,我想不可能全部拥有。
对不起,伙计,我不能这么做。
也许李有办法。。。
你好
上面的例程确实很棒,但它不会删除多个布局中的块。
它只删除当前活动布局中的块。
如果你能更新以上程序,这将是很大的帮助。
谢谢
阿什语 替换以下代码并删除所有代码:
旧的
(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))))
)
你好
使用速度更快
(vla-erase (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))而不是拟议的5个回路
@+ 很高兴认识帕特里克。。。谢谢
页:
[1]
2