Layer Control ~ Lisp

I’m sure everyone has had an occasion where a layer was off/frozen/locked that you needed to re-activate, I know I sure have. Sometimes its takes you a minute to find the layer in the drop down or layer manager. Dont you wish you could speed up that process, and only show which layers are off/frozen/locked?

Then your in luck, because I have the perfect lisp for you!

This lisp was created by Phanaem found HERE on the AutoDesk community!
I only made a few minor edits to my liking.

This lisp will display a DCL that will allow you to select off/frozen/locked and turn them back on.



; Turn ON, Thaw ar Unlock layers
; Stefan M. - 04.06.2013
; Edited by Jonathan Norton

(defun C:LCON ( / *error* acDoc filen filew id l layers r c l_frz l_off l_lck selected_layers prop val)
  (setq acDoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark acDoc)

  (defun *error* (m)
      (not (wcmatch (strcase m) "*CANCEL*,*QUIT*"))
      (princ (strcat "\nError: " m))
    (vla-endundomark acDoc)
  (defun prompt_list ()
    (start_list "a_list")
      (setq l (cond
                ((= "1" *tog1*) l_off)
                ((= "1" *tog2*) l_frz)
                ((= "1" *tog3*) l_lck)

  (vlax-for la (setq layers (vla-get-layers acDoc))
    (if (eq (vla-get-LayerOn la) :vlax-false)
      (setq l_off (cons (vla-get-Name la) l_off))
    (if (eq (vla-get-Freeze la) :vlax-true)
      (setq l_frz (cons (vla-get-Name la) l_frz))
    (if (eq (vla-get-Lock la) :vlax-true)
      (setq l_lck (cons (vla-get-Name la) l_lck))
  (setq l_off (acad_strlsort l_off)
        l_frz (acad_strlsort l_frz)
        l_lck (acad_strlsort l_lck)
  (if (or l_off l_frz l_lck) 
      (setq filew (open (setq filen (strcat (getvar 'dwgprefix) "temp_layer_dialog.dcl")) "w"))
        "layer_on_dialog : dialog {
       label = \"Layer Control\";
       : column {
       : list_box { label = \"Select Layer:\"; key = \"a_list\"; width = 40; height = 15; multiple_select = true; allow_accept = true;}
       : radio_column {
       : radio_button { label = \"Off Layers\";    key = \"tog1\"; }
       : radio_button { label = \"Frozen Layers\"; key = \"tog2\"; }
       : radio_button { label = \"Locked Layers\"; key = \"tog3\"; }}
       ok_cancel;}}" filew)
      (close filew)
        (>= (setq id (load_dialog filen)) 0)
           (new_dialog "layer_on_dialog" id)
              (or *tog1* (setq *tog1* "1"))
              (or *tog2* (setq *tog2* "0"))
              (or *tog3* (setq *tog3* "0"))
              (action_tile "a_list" "(setq selected_layers $value)")
              (action_tile "tog1"   "(setq *tog1* \"1\" *tog2* \"0\" *tog3* \"0\" selected_layers nil) (prompt_list)")
              (action_tile "tog2"   "(setq *tog1* \"0\" *tog2* \"1\" *tog3* \"0\" selected_layers nil) (prompt_list)")
              (action_tile "tog3"   "(setq *tog1* \"0\" *tog2* \"0\" *tog3* \"1\" selected_layers nil) (prompt_list)")
              (set_tile "tog1" *tog1*)
              (set_tile "tog2" *tog2*)
              (set_tile "tog3" *tog3*)
              (mode_tile "tog1" (if l_off 0 1))
              (mode_tile "tog2" (if l_frz 0 1))
              (mode_tile "tog3" (if l_lck 0 1))
              (setq r (start_dialog))
              (unload_dialog id)
            (princ "\nWrong dialog definition")
         (princ "\nDCL file not found")
      (if (findfile filen) (vl-file-delete filen))
        (and (= r 1) selected_layers)
           (setq prop (cond
                        ((= "1" *tog1*) 'LayerON)
                        ((= "1" *tog2*) 'Freeze)
                        ((= "1" *tog3*) 'Lock)
                 val  (cond
                        ((= "1" *tog1*) -1)
                        ((= "1" *tog2*) 0)
                        ((= "1" *tog3*) 0)
           (foreach x (read (strcat "(" selected_layers ")"))
             (vlax-put (vla-item layers (nth x l)) prop val)
      (vla-regen acDoc acActiveViewport)
    (Alert "All Layers On/Active")
  (*error* nil)

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s