Z1000 发表于 2022-7-6 09:16:51

审核/清除/快速LSP

大家好,
 
这里是LSP新手,长期使用AutoCAD。
 
与各种顾问合作,不得不将他们的图纸整合到我们的图纸(室内设计)中,我们的图纸变得堆满了废话。。
 
有没有人有一个LSP例程,它会在“打开”文件时自动运行以审核/清除所有/快速保存?
 
我需要一个步骤,在哪里保存它,如何让它工作也请!!
 
 
非常感谢您的帮助!
 
谢谢

Ahankhah 发表于 2022-7-6 09:32:25

1-使用所需的名称(我提供APQC.LSP)将以下代码保存在AutoCAD support文件夹中。
;;; APQC.LSP, Audit-->Purge-->Qsave-->Close
;;; Mehre Taban Co., Mehrdad Ahankhah, www.irancad.com, ahankhah@irancad.com
(vl-load-com)
(defun C:APQC ()
   (MT:Do:Audit)
   (MT:Do:PurgeAllNested)
   (if (MT:Do:Qsave)
       (MT:Do:CloseDwg)
   )
)
(defun MT:Do:Audit () (command "_.Audit" "y" ""))
(defun MT:Do:PurgeAllNested (/ Cont)
   (princ "\nPurging unused objects...\n")
   (setq Cont T)
   (while Cont
       (MT:Do:PurgeALL)
       (if (zerop (boole 1 1 (getvar 'Dbmod)))
         (progn (acad-pop-dbmod) (setq Cont nil))
         (progn (acad-pop-dbmod)
                  (if (not (zerop (getvar 'Dbmod)))
                      (progn (MT:Do:Qsave) (acad-pop-dbmod))
                  )
                  (princ "\n\tPurging unused nested objects...")
         )                                     ; if false
       )                                       ; if
   )                                             ; while
   (princ "\nPurging unused objects done.\n")
)
(defun MT:Do:PurgeALL ()
   (vla-PurgeAll
       (vla-get-ActiveDocument
         (vlax-get-acad-object)
         )
   ); Visual Lisp version
   ;;(command "_.PURGE" "_All" "*" "_No"); AutoLISP version
)
(defun MT:Do:Qsave (/ ret)
   (if (zerop (getvar "Dwgtitled"))
       (progn (alert "Drawing has no name, QSAVEing is not probable.")
            (setq ret nil)
       )
       (progn (command "_.QSAVE") (setq ret T))
   )
   ret
)
(defun MT:Do:CloseDwg ()
   (command "_.CLOSE")
   (and (= 1 (getvar 'cmdactive)) (command "_Yes"))
)

(C:APQC)

2-打开AutoCAD。
3-发布APPLOAD。
4-在对话框中,选择“启动套件”区域中的内容按钮。
5-选择“APQC.LSP”将其添加到列表中。
6-关闭APPLOAD对话框。
7-将图形拖动到AutoCAD GUI中除“绘图区域”之外的任何点。
8-等待,看看所有的图纸是如何处理一个接一个。
9-完成任务后,转至步骤3。现在,您必须从启动套件的内容列表中删除“APQC.LSP”。

David Bethel 发表于 2022-7-6 09:36:55

另请参阅本页最后一个回复下方的“类似线程”部分。这也应该有帮助-大卫

Z1000 发表于 2022-7-6 09:46:54

你好
 
感谢您的回复,
 
您的代码运行良好,但在审核和清除后关闭了图形,
我希望图纸保持开放,这样我可以继续工作。
 
我试图删除最后几行代码,但这不可原谅地在循环中造成了问题,因此它不再工作,
 
有没有办法删除代码中的“关闭绘图”部分,然后让其余部分继续工作?
 
干杯

Lee Mac 发表于 2022-7-6 10:01:15

快速修改,我希望Mehrdad不会介意:
 

;;; APQC.LSP, Audit-->Purge-->Qsave-->Close
;;; Mehre Taban Co., Mehrdad Ahankhah, www.irancad.com, ahankhah@irancad.com
;;; Modified by Lee Mac - 20.06.11 in places marked 'LM'
(vl-load-com)
(defun C:APQC nil
   (MT:Do:Audit)
   (MT:Do:PurgeAllNested)
;;;    (if
       (MT:Do:Qsave)
;;;      (MT:Do:CloseDwg)
;;;    )
)
(defun MT:Do:Audit nil (command "_.Audit" "y" ""))
(defun MT:Do:PurgeAllNested (/ Cont)
   (princ "\nPurging unused objects...\n")
   (setq Cont T)
   (while Cont
       (MT:Do:PurgeALL)
       (if (zerop (boole 1 1 (getvar 'Dbmod)))
         (progn (acad-pop-dbmod) (setq Cont nil))
         (progn (acad-pop-dbmod)
                  (if (not (zerop (getvar 'Dbmod)))
                      (progn (MT:Do:Qsave) (acad-pop-dbmod))
                  )
                  (princ "\n\tPurging unused nested objects...")
         )                                     ; if false
       )                                       ; if
   )                                             ; while
   (princ "\nPurging unused objects done.\n")
)
(defun MT:Do:PurgeALL nil
   (or *acdoc (setq *acdoc (vla-get-activedocument (vlax-get-acad-object))));; LM
   (vla-PurgeAll *acdoc) ;; LM
)
(defun MT:Do:Qsave (/ ret)
   (if (zerop (getvar "Dwgtitled"))
       (progn (alert "Drawing has no name, QSAVEing is not probable.")
            (setq ret nil)
       )
       (progn (command "_.QSAVE") (setq ret T))
   )
   ret
)
;;;(defun MT:Do:CloseDwg nil
;;;    (command "_.CLOSE")
;;;    (and (= 1 (getvar 'cmdactive)) (command "_Yes"))
;;

(C:APQC)

Z1000 发表于 2022-7-6 10:07:49

李,太棒了,非常感谢

Ahankhah 发表于 2022-7-6 10:26:39

李,非常感谢你所做的漂亮而有用的修改。
页: [1]
查看完整版本: 审核/清除/快速LSP