Jump to content

Turn layers in filters on/off with button


OMEGA-ThundeR

Recommended Posts

Hi,

 

Anyone know the command how to turn on/off the layers in a filter?

 

In our company we use standard layerfilters, so they should be the same name in every drawing (else its gonna be a good idea to do so).

 

If i know the command on how to turn off of on layers who are set in a filter i can make a macro to do it for me, but i dunno if there is an way to turn of those layers with an command.

 

Anyone?

Link to comment
Share on other sites

Hi,

 

Anyone know the command how to turn on/off the layers in a filter?

 

In our company we use standard layerfilters, so they should be the same name in every drawing (else its gonna be a good idea to do so).

 

If i know the command on how to turn off of on layers who are set in a filter i can make a macro to do it for me, but i dunno if there is an way to turn of those layers with an command.

 

Anyone?

 

This can be accomplished from the Layer Manager. Right-click on a filter and you have all the on/off/freeze/thaw/isolate options.

Link to comment
Share on other sites

Insomnia is killing me!

 

Give this a try:

;;; Layer Filter On/Off Toggle
;;; Turn on/off layers of specified Layer Filter
;;; Required Subroutines: AT:LayerFilterList AT:ListSelect
;;; Alan J. Thompson, 09.14.09
(defun c:LFT (/ #FilterList #FilterName #Choice #Filter #LayerList)
 (vl-load-com)
 (or *Acad* (setq *Acad* (vlax-get-acad-object)))
 (or *AcadDoc*
     (setq *AcadDoc* (vla-get-activedocument *Acad*))
 ) ;_ or
 (if (setq #FilterList (AT:LayerFilterList))
   (and
     (setq #FilterName
            (car (AT:ListSelect
                   "LayerFilter On/Off"
                   "Select layer filter:"
                   "10"
                   "10"
                   "false"
                   (vl-sort (mapcar 'car #FilterList) '<)
                 ) ;_ AT:ListSelect
            ) ;_ car
     ) ;_ setq
     (not (initget 0 "oFf oN"))
     (or (setq #Choice
                (getkword
                  "\nTurn layers in selected Layer Filter oFf or oN [oFf oN] <oFf>: "
                ) ;_ getkword
         ) ;_ setq
         (setq #Choice "oFf")
     ) ;_ or
     (setq
       #Filter (cdr (car (vl-remove-if-not
                           '(lambda (x) (eq #FilterName (car x)))
                           #FilterList
                         ) ;_ vl-remove-if-not
                    ) ;_ car
               ) ;_ cdr
     ) ;_ setq
     (cond
       ((eq #Choice "oFf")
        (vlax-for x (vla-get-layers *AcadDoc*)
          (and
            (wcmatch (strcase (vla-get-name x)) (strcase #Filter))
            (setq #LayerList (cons (vla-get-name x) #LayerList))
            (vl-catch-all-apply 'vla-put-layeron (list x :vlax-false))
          ) ;_ and
        ) ;_ vlax-for
        (print (vl-sort #LayerList '<))
        (princ (strcat "\nAll "
                       (itoa (length #LayerList))
                       " layers in filter \""
                       #FilterName
                       "\" have been turned off!"
               ) ;_ strcat
        ) ;_ princ
       )
       ((eq #Choice "oN")
        (vlax-for x (vla-get-layers *AcadDoc*)
          (and
            (wcmatch (strcase (vla-get-name x)) (strcase #Filter))
            (setq #LayerList (cons (vla-get-name x) #LayerList))
            (vl-catch-all-apply 'vla-put-layeron (list x :vlax-true))
          ) ;_ and
        ) ;_ vlax-for
        (print (vl-sort #LayerList '<))
        (princ (strcat "\nAll "
                       (itoa (length #LayerList))
                       " layers in filter \""
                       #FilterName
                       "\" have been turned on!"
               ) ;_ strcat
        ) ;_ princ
       )
     ) ;_ cond
   ) ;_ and
   (princ "\nNo Layer Filters Exist in Drawing!")
 ) ;_ if
 (princ)
) ;_ defun

 

You will need these subroutines:

;;; Get list of Layer Filters (Name & Actual Filter Codes)
;;; Return: List of dotted pairs (("Name" . "*Filter*"))
;;; Alan J. Thompson, 09.14.09
(defun AT:LayerFilterList (/ #Filters #List)
 (or *Acad* (setq *Acad* (vlax-get-acad-object)))
 (or *AcadDoc*
     (setq *AcadDoc* (vla-get-activedocument *Acad*))
 ) ;_ or
 (foreach x (entget
              (setq #Filters
                     (vlax-vla-object->ename
                       (vla-item
                         (vla-getextensiondictionary
                           (vla-get-layers
                             *AcadDoc*
                           ) ;_ vla-get-layers
                         ) ;_ vla-getextensiondictionary
                         "ACAD_LAYERFILTERS"
                       ) ;_ vla-item
                     ) ;_ vlax-vla-object->ename
              ) ;_ setq
            ) ;_ entget
   (if (eq 3 (car x))
     (setq #List
            (cons (cons (cdr x)
                        (cdr (nth 10 (dictsearch #Filters (cdr x))))
                  ) ;_ cons
                  #List
            ) ;_ cons
     ) ;_ setq
   ) ;_ if
 ) ;_ foreach
 #List
) ;_ defun

 

and

;list select dialog
;create a temp DCL multi-select list dialog from provided list
;value is returned in list form, DCL file is deleted when finished
;example: (setq the_list (AT:listselect "This is my list title" "Select items to make a list" "25" "30" "true" (list "object 1" "object 2" "object 3"))
;if mytitle is longer than defined width, the width will be ignored and it will fit to title string
;if mylabel is longer than defined width, mylabel will be truncated
;myheight and mywidth must be strings, not numbers
;mymultiselect must either be "true" or "false" (true for multi, false for single)
;created by: alan thompson, 9.23.08
;some coding borrowed from http://www.jefferypsanders.com (thanks for the DCL examples)

(defun AT:ListSelect  ( mytitle       ;title for dialog box
           mylabel       ;label right above list box
           myheight      ;height of dialog box !!*MUST BE STRING*!!
           mywidth       ;width of dialog box !!*MUST BE STRING*!!
           mymultiselect ;"true" for multiselect, "false" for single select
           mylist        ;list to display in list box
           / retlist readlist count item savevars fn fo valuestr dcl_id )
(defun saveVars(/ readlist count item)
 (setq retList(list))
 (setq readlist(get_tile "mylist"))
 (setq count 1)
 (while (setq item (read readlist))
   (setq retlist(append retList (list (nth item myList))))
   (while
     (and
       (/= " " (substr readlist count 1))
       (/= ""   (substr readlist count 1))
     )
     (setq count (1+ count))
   )
   (setq readlist (substr readlist count))
 )
);defun
(setq fn (vl-filename-mktemp "" "" ".dcl"))
(setq fo (open fn "w"))
(setq valuestr (strcat "value = \"" mytitle "\";"))
(write-line (strcat "list_select : dialog {
           label = \"" mytitle "\";") fo)
(write-line 
(strcat "          : column {
           : row {
             : boxed_column {
              : list_box {
                 label =\"" mylabel "\";
                 key = \"mylist\";
                 allow_accept = true;
                 height = " myheight ";
                 width = " mywidth ";
                 multiple_select = " mymultiselect ";
                 fixed_width_font = false;
                 value = \"0\";
               }
             }
           }
           : row {
             : boxed_row {
               : button {
                 key = \"accept\";
                 label = \" Okay \";
                 is_default = true;
               }
               : button {
                 key = \"cancel\";
                 label = \" Cancel \";
                 is_default = false;
                 is_cancel = true;
               }
             }
           }
         }
}") fo)
(close fo)
(setq dcl_id (load_dialog fn))
(new_dialog "list_select" dcl_id)
 (start_list "mylist" 3)
 (mapcar 'add_list myList)
 (end_list)
 (action_tile "cancel" "(setq ddiag 1)(done_dialog)")
 (action_tile "accept" "(setq ddiag 2)(saveVars)(done_dialog)")
 (start_dialog)
 (if (= ddiag 1)
    (setq retlist nil)
 )
(unload_dialog dcl_id)
(vl-file-delete fn)
retlist
);defun

  • Thanks 1
Link to comment
Share on other sites

hmmm, ok. And how do i make that work?

 

 

It doesn't look like an macro.

 

I am lazy i don't want to use manual input (like typing in which filter i want to turn on/off layers) but just with an button.

 

Isn't there an command to do that or has it to be done in the layermanager only ?

Link to comment
Share on other sites

......

hmmm, ok. And how do i make that work?

 

 

It doesn't look like an macro.

 

I am lazy i don't want to use manual input (like typing in which filter i want to turn on/off layers) but just with an button.

 

Isn't there an command to do that or has it to be done in the layermanager only ?

WOW

Link to comment
Share on other sites

  • 2 years later...
  • 9 years later...

I know this is an old topic, but just in case someone else comes across it looking for answers here are the commands to add for freeze/thaw.

 

Find this line and add after it;

            (vl-catch-all-apply 'vla-put-layeron (list x :vlax-false))
;;;====================================================================
(vl-catch-all-apply 'vla-put-FREEZE (list x :vlax-TRUE))
;;;====================================================================

 

 

Find this line and add after it;

            (vl-catch-all-apply 'vla-put-layeron (list x :vlax-true))
;;;====================================================================
(vl-catch-all-apply 'vla-put-FREEZE (list x :vlax-FALSE))
;;;====================================================================

Link to comment
Share on other sites

  • 2 years later...

Came across this lisp routine and I'm trying to invoke it but getting errors. Appreciate the original post was a long time ago.......can anyone offer me some assistance.
I've created the lisp routines from the code above. 3 seperate routines. Typing "LFT" gives me an error.

 

Thanks in advance.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...