au-s 发表于 2022-7-6 15:12:10

清除Lisp

我有这个:
 
(defun c:ax:purge-layers (doc except)
(vlax-for item (vla-get-layers doc)
   (setq ln (vla-get-name item))
   (if (not (member (strcase ln) except))
   (purge-layer ln)
   )
)
)
(defun c:DeleteLayerFilters ()
(vl-Catch-All-Apply
   '(lambda ()
      (vla-Remove
(vla-GetExtensionDictionary
   (vla-Get-Layers
   (vla-Get-ActiveDocument (vlax-Get-Acad-Object))
   )
)
"ACAD_LAYERFILTERS"
      )
    )
)
(princ)
)
(defun c:DeleteLayerFilters2 ()
(vl-Catch-All-Apply
   '(lambda ()
      (vla-Remove
(vla-GetExtensionDictionary
   (vla-Get-Layers
   (vla-Get-ActiveDocument (vlax-Get-Acad-Object))
   )
)
"AcLyDictionary"
      )
    )
)
(princ)
)
(defun c:test ()
(command "_layer" "On" "0" "t" "0" "s" "0" "")
(command "_purge" "a" "*" "n")
(command "-purge" "r" "*" "n")
(C:DeleteLayerFilters)
(C:DeleteLayerFilters2)
(c:ax:purge-layers)
(if (= (getvar "tilemode") 1)
   (prompt "\nModel is purged.")
   (prompt "\nLayout is purged.")
)
(princ)
)
 
它正在工作,但没有提示,我得到的错误是:
命令:“参数太少”
 
谢谢你的帮助!

VVA 发表于 2022-7-6 15:27:34

1.c:ax:purge layers不能是命令!这是一个函数(它有2个参数)
2.在本页中,我没有找到功能清除层
试试看(稍作改动)
;;; Purge named layer
;;; Example: (ax:purge-layer (vla-get-activedocument (vlax-get-acad-object)) "testlayer")
;;; Argument: doc {document}
;;;         name {a layer name}
;;; Return values: T if successful, nil if not successful
(defun ax:purge-layer (doc name)
(if (vl-catch-all-error-p
       (vl-catch-all-apply
         'vla-delete
         (list (vl-catch-all-apply
               'vla-item
               (list (vla-get-layers doc) name)
               )
         )
       )
   )
   nil ; name cannot be purged or doesn't exist
   T ; name purged
)
)
;;; Purge all layers
;;; Example: (ax:purge-all-layers (vla-get-activedocument (vlax-get-acad-object
;;; Argument: doc {document}
(defun ax:purge-all-layers (doc)
(vlax-for item (vla-get-layers doc)
   (ax:purge-layer doc (vla-get-name item))
)
)
(defun DeleteLayerFilters ()
(vl-Catch-All-Apply
   '(lambda ()
      (vla-Remove
(vla-GetExtensionDictionary
   (vla-Get-Layers
   (vla-Get-ActiveDocument (vlax-Get-Acad-Object))
   )
)
"ACAD_LAYERFILTERS"
      )
    )
)
(princ)
)
(defun DeleteLayerFilters2 ()
(vl-Catch-All-Apply
   '(lambda ()
      (vla-Remove
(vla-GetExtensionDictionary
   (vla-Get-Layers
   (vla-Get-ActiveDocument (vlax-Get-Acad-Object))
   )
)
"AcLyDictionary"
      )
    )
)
(princ)
)
(defun c:test ()
(vl-load-com)
(command "_layer" "_On" "0" "_t" "0" "_s" "0" "")
;;;(command "_-purge" "_a" "*" "_n")
(repeat 3 (vla-purgeall (vla-get-activedocument (vlax-get-acad-object))))
(command "_-purge" "_r" "*" "_n")
(DeleteLayerFilters)
(DeleteLayerFilters2)
(ax:purge-all-layers (vla-get-activedocument (vlax-get-acad-object)))
(if (= (getvar "tilemode") 1)
   (alert "Model is purged.")
   (alert "Layout is purged.")
)
(princ)
)

Lee Mac 发表于 2022-7-6 15:41:05

函数
 


(defun c:ax:purge-layers (doc except)


 
需要两个参数,即“doc”和“except”。
 
调用函数时需要指定这些参数。
 
如果像上面这样的函数要在另一个函数中调用,而不是单独调用,为什么不将它们指定为局部函数呢
 

 
(defun ax:清除图层。。。

Lee Mac 发表于 2022-7-6 15:51:55

哦,VVA,在那里比我快几分钟

VVA 发表于 2022-7-6 16:11:09

为什么很少?只有一个:眨眼:

Lee Mac 发表于 2022-7-6 16:22:44

 
 
好吧,那么只有一个——我没有仔细看《泰晤士报》。。。我最诚挚的歉意:哎呀::哎呀::哎呀:
页: [1]
查看完整版本: 清除Lisp