Originally Posted by
sovby254640
I have a user who has a habit of purging layers out of our drawings. i don't want to discourage this because it it good to purge drawings. The problem is i need those layers to remain in the drawing. Could i write a program to redefine the purge command which would allow purging of everything except a list of layers that i want to remain in the drawing?
Try this:
Code:
;;lay-keept=list of layers to be keept
;;Usage: (purge-layer (list "layer-keep1" "layer-keep2" etc.))
(defun PURGE-LAYER (lay-keept / acobj lay-lst lay-pge pglayer)
;;Function to purge layer "name"
(defun pglayer (name)
(if (vl-catch-all-error-p
(vl-catch-all-apply (quote vla-delete)
(list (vl-catch-all-apply (quote vla-item)(list (vla-get-layers acobj) name)))
)
)
nil
(princ (strcat "\nLayer " name " purged.")) ;;For test
)
)
(vl-load-com)
(setq acobj (vla-get-activedocument (vlax-get-acad-object)))
;;lay-lst=list of all layers
(vlax-for lay (vla-get-layers acobj)
(setq lay-lst (cons (vla-get-name lay) lay-lst))
)
;;lay-pge=lay-lst "minus" lay-keept (list of layers allowed to be purged)
(foreach a lay-lst
(if (not (member a lay-keept))
(setq lay-pge (cons a lay-pge))
)
)
;;purge allowed layers
(mapcar (function (lambda (x)(pglayer x))) lay-pge)
;;release vl-object
(vlax-release-object acobj)
(princ)
)