vernonlee 发表于 2022-7-5 16:41:01

 
嗨,李。
 
加载LISP后出错
 

BIGAL 发表于 2022-7-5 16:43:59

代码现在是1括号错误,以找到数字可能有帮助(定义blc的vlax;22应该是1或只是缺少LM的结束语:deletblocks
 

look at end of line0;;--------------------=={ Delete Blocks }==-------------------;;;00
0;;                                                            ;;;00
0;;Deletes all references of a list of blocks from a drawing ;;;00
0;;(including nested references, nested to any level).       ;;;00
0;;Proceeds to delete the associated block definitions from;;;00
0;;the drawing, if possible.                                 ;;;00
0;;                                                            ;;;00
0;;This function is compatible with ObjectDBX.               ;;;00
0;;------------------------------------------------------------;;;00
0;;Author: Lee Mac, Copyright © 2012 - www.lee-mac.com       ;;;00
0;;------------------------------------------------------------;;;00
0;;Arguments:                                                ;;;00
0;;doc - VLA Document Object                                 ;;;00
0;;lst - List of blocks to be deleted (case insensitive)   ;;;00
0;;------------------------------------------------------------;;;00
0;;Returns:List of blocks that were successfully deleted.;;;00
0;;------------------------------------------------------------;;;00
0 ;00
1(defun LM:deleteblocks ( doc lst / blc bln lck rtn );11
2    (setq blc (vla-get-blocks doc);22
2          lst (mapcar 'strcase lst);22
1    );11
2    (vlax-for lay (vla-get-layers doc);22
3      (if (= :vlax-true (vla-get-lock lay));33
3            (progn(setq lck (cons lay lck)) (vla-put-lock lay :vlax-false));33
2      );22
1    );11
2    (vlax-for def blc;22
3      (vlax-for obj def;33
4            (if ;44
5                (and (= "AcDbBlockReference" (vla-get-objectname obj));55
6                  (or ;66
7                        (and (vlax-property-available-p obj 'effectivename);77
7                           (setq bln (strcase (vla-get-effectivename obj)));77
6                        );66
7                        (setq bln (strcase (vla-get-name obj));77
6                  );66
6                  (vl-some '(lambda ( x ) (wcmatch bln x)) lst);66
5                );55
6                (progn;66
6                  (vl-catch-all-apply 'vla-delete (list obj));66
6                  (or (member bln rtn)(setq rtn (cons bln rtn)));66
5                );55
4            );44
3      );33
2    );22
2    (foreach lay lck (vla-put-lock lay :vlax-true));22
2    (vl-remove-if '(lambda ( x ) (vl-catch-all-error-p (vl-catch-all-apply 'vla-delete (list (vla-item blc x))))) rtn);22
1);11
11111;
; this should be 0 if ok

Lee Mac 发表于 2022-7-5 16:46:51

 
抱歉-我错过了一个右括号-我现在已经更新了我之前帖子中的代码。

vernonlee 发表于 2022-7-5 16:51:40

 
NP李。周末回来后会测试一下。谢谢,伙计

Lee Mac 发表于 2022-7-5 16:53:13

 
不用担心-让我知道你进展如何

vernonlee 发表于 2022-7-5 16:56:40

 
李,它工作得非常好拇指支撑:

Lee Mac 发表于 2022-7-5 17:00:36

 
很高兴听到!

danleebank 发表于 2022-7-5 17:01:43

李,我是这个网站的新手。这是我的第一篇帖子,我看到这条帖子很老了,但也许你仍然可以帮我。当我尝试运行dbtest时,我能够选择目录,但之后什么也没有发生,命令在我选择之后就结束了。就好像从未调用deleteblocks命令一样。Deleteblocks、odbx和dbtest也都提前加载。没有报告错误,只是deleteblocks从未“打开”。
 
我将此代码用于dbtest:
 
(defun c:dbtest nil
(LM:odbx’(lambda(doc)(LM:deleteblocks doc’(“Block1”“Block2”“Block3”))无)
(普林斯)
)
 
删除块是您发布的新代码。
 
如果你碰巧看到这个,你能帮我吗?

Lee Mac 发表于 2022-7-5 17:04:51

 
欢迎来到论坛
 
请注意,我的LM:deleteblocks&LM:odbx函数在处理期间或之后不会将任何消息打印到命令行,因此,在选择目录后,程序将以静默方式处理所有图形-当然,这只是一些示例代码,不是通用的完整应用程序。
 
我假设您已经修改了块名称(“Block1”“Block2”“Block3”),以适合您的应用程序?
 
PS:请编辑您的帖子,并用代码标签附上代码:
 
[突出显示][不突出]
4

danleebank 发表于 2022-7-5 17:08:07

“我假设您已经修改了块名称(“Block1”“Block2”“Block3”),以适合您的应用程序?”
 
李,就是这样!我不知道为什么,但我假设这些是deleteblocks代码中使用的变量,然后通过稍后在图形中选择块来给定值。
 
然而,在代码中输入我需要的块的名称非常有效。非常感谢,先生。我渴望有一天能在你的水平上理解Lisp。
 
p、 我似乎不知道如何编辑我已经做出的回复。这里还是很绿。
页: 1 [2]
查看完整版本: 删除多个dra中的块