More Free AutoLISP and Visual LISP code snippets for AutoCAD See also our app to batch purge and script JTB SmartBatch.
;;; PURGER.LSP ;;; ;;; Various purge functions with no command line echo ;;; ;;; By Jimmy Bergmark ;;; Copyright (C) 1997-2018 JTB World, All Rights Reserved ;;; Website: https://jtbworld.com ;;; E-mail: info@jtbworld.com ;;; 2000-02-12 - First release ;;; 2003-01-09 - More added ;;; 2004-05-23 - Added support to delete filters in 2005 ;;; 2018-03-21 - Bug fix ;;; Written for AutoCAD 2000 and newer ;;; ;;; Purge named block ;;; Example: (ax:purge-block (vla-get-activedocument (vlax-get-acad-object)) "testblock") ;;; Argument: doc {document} ;;; name {a block name} ;;; Return values: T if successful, nil if not successful (defun ax:purge-block (doc name) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-delete (list (vl-catch-all-apply 'vla-item (list (vla-get-blocks doc) name) ) ) ) ) nil ; name cannot be purged or doesn't exist T ; name purged ) ) ;;; 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)) ) ) ;;; Purge all layers except those in list ;;; Example: (ax:purge-layers (vla-get-activedocument (vlax-get-acad-object)) '("DIM" "LAYER1")) ;;; Argument: doc {document} ;;; name {a layer name list} (defun ax:purge-layers (doc except) (vlax-for item (vla-get-layers doc) (setq ln (vla-get-name item)) (if (not (member (strcase ln) except)) (ax:purge-layer doc ln) ) ) ) ;;; Purge all with no echo to command window ;;; Example: (ax:purge-no-echo (vla-get-activedocument (vlax-get-acad-object))) ;;; Argument: doc {document} (defun ax:purge-no-echo (doc) ;;; Returns a list of keynames from the specified dictionary (defun getkeys (dictName / tmp) (if (setq tmp (dictsearch (namedobjdict) dictName)) (massoc 3 tmp) ) ) ;;; Retrieves the entity name of the specified dictionary (defun getdictname (dictName) (if (setq tmp (dictsearch (namedobjdict) dictName)) (cdr (assoc -1 tmp)) ) ) ;;; Utility function to get multiple group code CDRs (defun massoc (key alist / x nlist) (foreach x alist (if (eq key (car x)) (setq nlist (cons (cdr x) nlist)) ) ) (reverse nlist) ) (vlax-for item (vla-get-blocks doc) (vl-catch-all-apply 'vla-delete (list item)) ) (vlax-for item (vla-get-dimstyles doc) (vl-catch-all-apply 'vla-delete (list item)) ) (vlax-for item (vla-get-linetypes doc) (vl-catch-all-apply 'vla-delete (list item)) ) (vlax-for item (vla-get-plotconfigurations doc) (vl-catch-all-apply 'vla-delete (list item)) ) ; textstyles (vlax-for item (vla-get-textstyles doc) (if (= (cdr (assoc 70 (entget (vlax-vla-object->ename item)))) 0) (vl-catch-all-apply 'vla-delete (list item)) ) ) ; shapes (vlax-for item (vla-get-textstyles doc) (if (= (cdr (assoc 70 (entget (vlax-vla-object->ename item)))) 1) (vl-catch-all-apply 'vla-delete (list item)) ) ) (setq li (getkeys "ACAD_MLINESTYLE")) (setq len (length li)) ; one style has to be left (foreach na (cdr li) (delrecord "ACAD_MLINESTYLE" na) ) (setq li (getkeys "ACAD_MLINESTYLE")) (setq len (length li)) (if (> len 1) (delrecord "ACAD_MLINESTYLE" (car li)) ) (vlax-for item (vla-get-layers doc) (vl-catch-all-apply 'vla-delete 'item) ) nil ) ;;; Purge/delete all layer filter or filters ;;; Example: (DeleteLayerFilters) (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 delrecord (dictName key) (dictremove (getdictname dictName) key) ) ;;; Retrieves the entity name of the specified dictionary (defun getdictname (dictName) (if (setq tmp (dictsearch (namedobjdict) dictName)) (cdr (assoc -1 tmp)) ) ) (princ) ;;; Purge/delete all layer filter or filters compatible with 2005 or later ;;; Example: (DeleteLayerFilters2) (defun DeleteLayerFilters2 () (vl-Catch-All-Apply '(lambda () (vla-Remove (vla-GetExtensionDictionary (vla-Get-Layers (vla-Get-ActiveDocument (vlax-Get-Acad-Object)) ) ) "AcLyDictionary" ) ) ) (princ) ) ;;; How many layer states are there in my drawing? ;;; This command will show the number of them. ;;; Command: count-layer-states ;;; Example of output ;;; Layer states found: 15191 (defun c:count-layer-states (/ ed cnt lso) (setq ed (vla-GetExtensionDictionary (vla-Get-Layers (vla-Get-ActiveDocument (vlax-Get-Acad-Object) ) ) ) ) (setq cnt 0) (if (> (vla-get-count ed) 0) (vlax-for lso (vla-item ed "ACAD_LAYERSTATES") (setq cnt (1+ cnt)) ) ) (princ "\nLayer states found: ") (princ cnt) (princ) ) ;;; Purge/delete all layer states ;;; Example: (DeleteLayerStates) (defun DeleteLayerStates () (vl-Catch-All-Apply '(lambda () (vla-Remove (vla-GetExtensionDictionary (vla-Get-Layers (vla-Get-ActiveDocument (vlax-Get-Acad-Object)))) "ACAD_LAYERSTATES"))) (princ) ) ;;; Purge/delete all Express Tool layer states ;;; Example: (LmanKill) (defun LmanKill (/ lyr ent cnt) (setq cnt 0) (while (setq lyr (tblnext "layer" (not lyr))) (setq ent (entget (tblobjname "layer" (cdr (assoc 2 lyr)))'("RAK"))) (if (and ent (assoc -3 ent)) (progn (setq ent (subst '(-3 ("RAK")) (assoc -3 ent) ent)) (entmod ent) (setq cnt (1+ cnt)) ) ) ) (princ) ) ;;; (deleteAllPageSetups) (defun deleteAllPageSetups (/ pc) (vlax-for pc (vla-get-plotconfigurations (vla-get-activedocument (vlax-get-acad-object))) (vla-delete pc) ) ) (defun PurgeAnonymGroups (/ grpList index grp) (setq grpList (dictsearch (namedobjdict) "ACAD_GROUP")) (setq index 1) (while (setq grp (nth index grplist)) (if (= (car grp) 3) (progn (if (= (chr 42) (substr (cdr grp) 1 1)) (entdel (cdr (nth (+ index 1) grplist))) ) ) ) (setq index (+ 1 index)) ) (princ) ) (defun PurgeAllGroups (/ grpList index grp) (setq grpList (dictsearch (namedobjdict) "ACAD_GROUP")) (setq index 1) (while (setq grp (nth index grplist)) (if (= (car grp) 3) (entdel (cdr (nth (+ index 1) grplist))) ) (setq index (+ 1 index)) ) (princ) ) (defun DelACAD_VBA () (dictremove (namedobjdict) "ACAD_VBA") (princ) ) ; Purges all RegApp or RegApps. (defun PurgeAPPID (/ appid) (vl-load-com) (vlax-for appid (vla-get-registeredapplications (vla-get-activedocument (vlax-get-acad-object) ) ) (vl-catch-all-apply 'vla-delete (list appid)) ) (princ) ) |