kennyutk 发表于 2022-7-5 22:21:39

LISP初学者-清除Blo

你好我希望你们能帮我解决Lisp程序的问题。我是新手,所以请原谅我I 听起来太基本了。
 
突然出现了一个问题,以前它还在工作。现在,当我打开dwg时,它会在acad文件的这一部分暂停。这就是我如何把它缩小到这个特殊的Lisp程序。
 
我可以看到我的地图,但它们被搁置了。大约1分钟后,它说有一个“致命错误-内存不足”。
 
你们知道该怎么办吗?
 
如果我去掉这一行上的“N”部分(命令“purge”“block”“*”“N”),它似乎可以工作,但我必须单击命令行中的几个选项才能在地图上执行任何操作。
 
(定义:PURGEBLOCK()
(如果(和(/=(getvar“dwgname”)“未命名”)(/=(substr(getvar“dwgname”)1 7)“图纸”))
(程序
(setq wts(getvar“writestat”))
(如果(/=wts 0)
(程序
(命令“purge”“block”“*”“N”)
(setq chg(getvar“dbmod”))
(如果(/=chg 0)
(程序
(setvar“cmdecho”0)
(princ“\n保存清除的图形”)
(setvar“专家”3)
(命令“保存”)
(setvar“expert”0)
;                (snd)
);结束程序
);如果结束
);结束程序
);如果结束
);结束程序
);如果结束
(setvar“cmdecho”0)
(普林斯)
)

BIGAL 发表于 2022-7-5 22:33:40

试试这个-清除

kennyutk 发表于 2022-7-5 22:36:45

你好对不起,我该在Lisp程序的地方试一试?

Lee Mac 发表于 2022-7-5 22:45:29

请尝试以下(未测试)代码:
(defun purgeblock ( / val var )
   (if (= 1 (getvar 'dwgtitled) (getvar 'writestat))
       (progn
         (setq var '(cmdecho expert)
               val(mapcar 'getvar var)
         )
         (mapcar 'setvar var '(0 2))
         (command "_.-purge" "_b" "*" "_n")
         (if (< 0 (getvar 'dbmod))
               (progn
                   (command "_.save" "")
                   (princ "\nPurged drawing saved.")
               )
               (princ "\nNothing to purge, drawing not saved.")
         )
         (mapcar 'setvar var val)
       )
       (princ "\nDrawing unsaved or read-only.")
   )
   (princ)
)

kennyutk 发表于 2022-7-5 22:47:29

非常感谢。我要试试这个!
 
 
 
 

kennyutk 发表于 2022-7-5 22:53:38

这两种代码都有相同的错误。这似乎只发生在我的大地图上。这是截图,但我不确定这是否会有帮助。。。
 
 
 
 
它会在这一点上卡住,最终锁定。
 
 
这可能是另一个问题吗?
 
 

kennyutk 发表于 2022-7-5 22:59:23

我应该提到,如果我更改
 
 
(命令“-purge”“\u b”“*”“\u n”)到
 
 
(命令“_.-purge”“\u b”“*”“\u y”)
 
 
这似乎奏效了。
 
 
有什么理由我应该使用n或y吗?似乎只是验证要清除的名称?
 
 

kennyutk 发表于 2022-7-5 23:07:47

对不起,这是我看到信息的链接。
 
 
http://help.autodesk.com/view/ACD/2015/ENU/?guid=GUID-C3876E92-3478-449C-8FAB-DA760B2EDD09
 
 
 
 

SLW210 发表于 2022-7-5 23:09:46

请阅读代码发布指南并编辑您的帖子,将代码包含在代码标签中。

kennyutk 发表于 2022-7-5 23:21:12

让我再试一次
 
 
(defun T:PURGEBLOCK ()
   (if (and (/= (getvar "dwgname") "unnamed")(/= (substr (getvar "dwgname") 1 7) "Drawing"))
   (progn
      (setq wts (getvar "writestat"))
       (if (/= wts 0)
          (progn
         (command "purge" "block" "*" "N")
         (setq chg (getvar "dbmod"))
             (if (/= chg 0)
            (progn
               (setvar "cmdecho" 0)
               (princ "\nSaving purged drawing \n")
               (setvar "expert" 3)
               (command "save" "")
               (setvar "expert" 0)
;                (snd)
            );end progn
             );end if
          );end progn
);end if
   );end progn
   );end if
(setvar "cmdecho" 0)
(princ)
)
页: [1] 2
查看完整版本: LISP初学者-清除Blo