ksperopoulos 发表于 2022-7-6 10:58:47

交叉检查

就像我在这里的最后几篇帖子中提到的,我对整个lisp都是新手。我仍在努力弄清楚它在做什么和/或意味着什么。所以我想知道是否有人可以看一下我拼凑的Lisp程序程序。这绝对不是我一个人写的。此lisp是我们从其他承包商处收到的图纸的清理程序。这似乎是正确的工作,但你们可能会有一些好的建议,像我这样的新手。
 

(defun c:scrubdwg (/ *error* uFlag)
    (vl-load-com)

    (defun *error* (msg)
    (and uFlag (vla-EndUndoMark *doc))
    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
    (princ (strcat "\n** Error: " msg " **")))
    (princ))
    (setq *doc (cond (*doc)((vla-get-ActiveDocument
    (vlax-get-acad-object)))))
;;; Set UCS to world
    (command "setvar" "cmdecho" 0)(command "ucsfollow" "1")
    (command "setvar" "cmdecho" 0)(command "ucs" "w")
    (command "setvar" "cmdecho" 0)(command "ucsfollow" "0")
;;; Detach all xrefs
    (command "setvar" "cmdecho" 0)(command "-xref" "D" "*")
;;; Delete all layout tabs
    (vlax-for lay(vla-get-layouts *doc)
    (if (not (eq "MODEL" (strcase (vla-get-Name lay))))
    (vla-delete lay)))
;;; Changes all layers to thaw, on, unlock, and .25mm lineweight. Set current layer to 0.
    (command "setvar" "cmdecho" 0)(command "-layer" "t" "*" "on" "*" "u" "*" "s" "0" "lw" "0.25" "*" "")
;;; Delete all layer filters
    (vl-catch-all-apply
    '(lambda ()
    (vla-remove
    (vla-getextensiondictionary
    (vla-get-layers
    (vla-get-activedocument (vlax-get-acad-object))
   ) ;_ end of vla-Get-Layers
   ) ;_ end of vla-GetExtensionDictionary
    "AcLyDictionary"
   ) ;_ end of vla-Remove
   ) ;_ end of lambda
   ) ;_ end of vl-Catch-All-Apply
;;; Delete all layer states
    (if (setq states (layerstate-getnames t t))
    (mapcar (function layerstate-delete) states))
;;; Delete all named views
    (command "setvar" "cmdecho" 0)(command "-view" "s" "junk")(command "-view" "d" "*")
;;; Set insertion basepoint to 0,0,0
    (command "setvar" "cmdecho" 0)(command "insbase" "0,0,0")
;;; Set overall, modelspace, and paperspace linetype scales to 1
    (command "setvar" "cmdecho" 0)(command "ltscale" 1)(command "msltscale" 1)(command "psltscale" 1)
;;; Set annotation scale to 1/4" = 1'-0"
    (command "setvar" "cmdecho" 0)(command "_CANNOSCALE" "1/4\042 = 1'-0\042")
;;; Delete unused scales
    (command "setvar" "cmdecho" 0)(command "-SCALELISTEDIT" "d" "*" "e")
;;; Erase x data
    (command "setvar" "cmdecho" 0)(command "erase" (ssget"x") "r")(princ))
;---------------------------------------------------------------------------------------------------------
(defun c:scrubdwg2 ()
;;; Set all object colors to bylayer
    (command "setvar" "cmdecho" 0)(command "setbylayermode" "1")
    (command "setvar" "cmdecho" 0)(command "setbylayer" "all" "" "y" "y")
;;; Delete all regapps
    (command "setvar" "cmdecho" 0)(command "-purge" "r" "" "n")
;;; Run an audit on the drawing file
    (command "setvar" "cmdecho" 0)(command "audit" "y")
;;; Purge all unused items
    (command "setvar" "cmdecho" 0)(command "-purge" "a" "*" "n")
;;; Zoom extents
    (command "setvar" "cmdecho" 0)(command "zoom" "e")(princ))

ksperopoulos 发表于 2022-7-6 11:06:44

有人愿意把我的Lisp程序扫过去吗?

alanjt 发表于 2022-7-6 11:12:55

首先,只需将cmdecho变量设置为0一次。

ksperopoulos 发表于 2022-7-6 11:21:33

这是对整个lisp执行一次还是对每个命令执行一次?

alanjt 发表于 2022-7-6 11:31:10

整个LISP

ksperopoulos 发表于 2022-7-6 11:35:10

谢谢你的建议。我假设因为在这个lisp中我有两个函数,所以我必须为每个函数(不是命令)正确设置一次。

alanjt 发表于 2022-7-6 11:42:26

如。
 
(defun c:Test (/ p1 p2 cmd)
(if (and (setq p1 (getpoint "\nSpecify first point: "))
          (setq p2 (getpoint p1 "\nSpecify end point: "))
   )
   (progn
   (setq cmd (getvar 'cmdecho))
   (setvar 'cmdecho 0)
   (command "_.line" "_non" p1 "_non" p2 "")
   (setvar 'cmdecho cmd)
   )
)
(princ)
)

alanjt 发表于 2022-7-6 11:49:30

开始时设置,结束时重置。。。
 
例(2)。。。
 
(defun c:Test (/ _fnc p1 p2 cmd)
(defun _fnc (/) (alert "Hey look, I'm a separate function!"))
(if (and (setq p1 (getpoint "\nSpecify first point: "))
          (setq p2 (getpoint p1 "\nSpecify end point: "))
   )
   (progn
   (setq cmd (getvar 'cmdecho))
   (setvar 'cmdecho 0)
   (_fnc)
   (command "_.line" "_non" p1 "_non" p2 "")
   (_fnc)
   (setvar 'cmdecho cmd)
   )
)
(princ)
)

ksperopoulos 发表于 2022-7-6 11:58:16

我会的。再次感谢。

alanjt 发表于 2022-7-6 12:01:59

不客气。
页: [1]
查看完整版本: 交叉检查