;; LAYER.LSP Copyright 1995-97 Tony Tanzillo All Rights Reserved ;; ;; Saves/restores state of layers, and creates ;; new layers from saved layers that do not exist ;; in the current drawing. ;; ;; Functions: ;; ;; (SaveLayers ) ;; ;; Saves layer settings to the file ;; ;; (RestoreLayers ) ;; ;; Reinstates saved layer settings stored in . ;; If is nil, all layer settings are restored. ;; If is a wcmatch-style wildcard string, then ;; only layers whose names match are restored. ;; ;; (LoadLayers ) ;; ;; Returns list of saved layer settings in . ;; This function is called by (RestoreLayers). ;; ;; Notes: ;; ;; These functions do not save/restore viewport-specific ;; and xref layer settings. (defun SaveLayers (file / layer fd) (cond ( (not (setq fd (open file "w"))) nil) (t (while (setq layer (tblnext "layer" (not layer))) (prin1 (cdr layer) fd) (write-line "" fd) ) (close fd) t ) ) ) (defun LoadLayers (file / rslt line fd) (cond ( (not (and (setq file (findfile file)) (setq fd (open file "r")))) nil ) (t (while (setq line (read-line fd)) (if (setq line (read line)) (setq rslt (cons line rslt)) ) ) (reverse rslt) ) ) ) (defun RestoreLayers (file pattern / layers clayer expert) (setq expert (getvar "EXPERT")) ( (lambda (*error* old-error) (setq clayer (getvar "CLAYER")) (setvar "CMDECHO" (if *debug* 1 0)) (setvar "EXPERT" 5) (cond ( (not (setq layers (LoadLayers file))) nil) (t (command "._LAYER") (foreach layer layers (if (or (not pattern) (wcmatch (cdr (assoc 2 layer)) pattern) ) (restore-layer layer) ) ) (command "") ) ) (setvar "EXPERT" expert) ) restore-layer-error *error* ) ) (defun restore-layer-error (s) (setvar "EXPERT" expert) (setq *error* old-error) (princ (strcat "\nError: " s)) (if (and *debug* vl-bt) (vl-bt)) (princ) ) (defun restore-layer (layer / ob name xref?) (setq name (cdr (assoc 2 layer)) color (cdr (assoc 62 layer)) ltype (cdr (assoc 6 layer)) freeze? (eq 1 (logand 1 (cdr (assoc 70 layer)))) xref? (not (zerop (logand 48 (cdr (assoc 70 layer))))) ) (if (and (not (tblsearch "layer" name)) (not xref?)) (command "_New" name) ) (if (not xref?) (command "_Co" color name "_Lt" ltype name (if (and freeze? (/= name clayer)) "_Freeze" "_Thaw" ) name (if (minusp color) "_OFF" "_ON") name (if (and lock? (/= name clayer)) "_Lock" "_Unlock" ) name ) ) ) (defun except (fcn) (if (and *error* (listp *error*)) (list '(msg) (list fcn 'msg) (list (cons 'lambda *error*) 'msg) ) fcn ) ) (defun C:SAVELAYER ( / fname) (setq fname (getfiled "Save Layers" "" "LYR" 1)) (if fname (savelayers fname) ) (princ) ) (defun C:LOADLAYER ( / fname) (setq fname (getfiled "Load Layers" "" "LYR" 0)) (if fname (progn (setq pattern (getstring "\nFilter pattern <*>: ")) (if (eq pattern "") (setq pattern nil) ) (restorelayers fname pattern) ) ) (princ) ) (princ (strcat "\nLAYER.LSP Loaded," "\nUse SAVELAYER command to save layers to file," "\nUse LOADLAYER command to restore layers from file." ) ) (princ) ;; ==================== LAYER.LSP ========================