Command: LAYFREEZEMULTIPLE
This function freezes layers of selected multiple objects. Objects can be preselected. Function can work in style of standard MATCHPROP command.
Command: LAYOFFMULTIPLE
As above but turns layers off
;;; ================================================
;;; LAYFREEZE_LAYOFF_MULTIPLE_v2.LSP
;;;
;;; Written by Andrzej Kalinowski, www.autolisps.blogspot.com
;;; v1.00- 07.07.2018 - first release
;;; v2- 23.04.2022 - LAYOFFMULTIPLE command added, corrected exiting objects selection loop
;;;
;;; Command LAYFREEZEMULTIPLE
;;; This function freezes layers of selected multiple objects. Objects can be preselected. Function can work in style of standard MATCHPROP command.
;;; Command LAYOFFMULTIPLE
;;; As above but turns layers off
;;;
;;; =======================================================
(vl-load-com)
(defun C:LAYFREEZEMULTIPLE (/ sset1 obj1 i1 CurObj Lay1 LayLst IsClay gr1)
(setq sset1 nil)
(setq gr1 1)
(while (/= gr1 52)
(setvar "ERRNO" 0);reset ERRNO to 0
(setq sset1 (ssget "_:S" ) )
(setq gr1 (getvar "ERRNO") )
(if (= (getvar "ERRNO") 52) (exit))
(if (= sset1 nil)
(princ "\nWrong object");then
(progn ;then
(repeat (setq i1 (sslength sset1) );else
(setq
CurObj (ssname sset1 (setq i1 (1- i1) ) )
Lay1 (cdr (assoc 8 (entget CurObj) ) )
);setq
(if (= Lay1 (getvar "clayer"))
(setq IsClay 1)
(if (= nil (member Lay1 LayLst) );EN: if already exist -it doesnt add it to the list
(setq LayLst (cons Lay1 LayLst) )
);if
);end if
);repeat
);progn
);if
(setq i1 0)
(repeat (length LayLst)
(setq CurObj (nth i1 LayLst) )
(princ CurObj) (terpri)
(setq i1 (1+ i1))
(vla-put-freeze (vlax-ename->vla-object (tblobjname "LAYER" CurObj)) :vlax-true)
);repeat
(setq LayLst nil)
(if (= IsClay 1)
(princ "\nOne of selected layers is a current layer\n")
);if
);while
);defun
(defun C:LAYOFFMULTIPLE (/ sset1 obj1 i1 CurObj Lay1 LayLst IsClay kwrt1 gr1)
(setq doc1 (vla-get-activedocument (vlax-get-acad-object)))
(vla-startundomark doc1)
;-----------------------------------------
; error section
;-----------------------------------------
(defun *error* (msg) (princ "error: ") (princ msg) (princ) )
(defun errtrap1 (errormsg1 / )
(setq *error* temperr)
(setvar "DYNMODE" old_dynmode)
(setvar "DYNPROMPT" old_dynprompt)
(vla-endundomark doc1)
(setq old_dynprompt nil old_dynmode nil doc1 nil temperr nil)
(if (and errormsg1 (not (wcmatch (strcase errormsg1) "*BREAK*,*CANCEL*,*QUIT*") ) )
(prompt (strcat "\n-------------------------\nError: " errormsg1) );then
);if
(princ)
);defun err
;-----------------------------------------
;setting system variables
;-----------------------------------------
(setq
temperr *error* ;saving error
*error* errtrap1 ; assigning errtrap1 function to *error* variable
old_dynmode (getvar "DYNMODE")
old_dynprompt (getvar "DYNPROMPT")
);setq
(setvar "DYNMODE" 3)
(setvar "DYNPROMPT" 1)
;-----------------------------------------
(setq obj1 1);setq
(setq gr1 1)
(while (/= gr1 52);infinite loop
(setvar "ERRNO" 0);reset ERRNO to 0
(setq sset1 (ssget "_:S" ) )
(setq gr1 (getvar "ERRNO") )
(if (= (getvar "ERRNO") 52) (exit))
(if (= sset1 nil)
(princ "\nWrong object");then
(progn ;then
(repeat (setq i1 (sslength sset1) );else
(setq
CurObj (ssname sset1 (setq i1 (1- i1) ) )
Lay1 (cdr (assoc 8 (entget CurObj) ) )
);setq
(if (= nil (member Lay1 LayLst) );if already exist -it doesnt add it to the list
(setq LayLst (cons Lay1 LayLst) )
);if
);repeat
);progn
);if
(setq i1 0)
(repeat (length LayLst)
(setq CurObj (nth i1 LayLst) )
(princ CurObj) (terpri)
(setq i1 (1+ i1))
(if (/= CurObj (getvar "clayer"))
(vla-put-layeron (vla-item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object) ) ) CurObj ) :vlax-false)
(progn
(initget "Yes No")
(setq kwrt1 (getkword "\nDo you want to turn the current layer off? /N:"))
(if (or (= kwrt1 nil) (= kwrt1 "Yes") )
(vla-put-layeron (vla-item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object) ) ) CurObj ) :vlax-false)
);if
);progn
);if
);repeat
(setq LayLst nil)
);while
);defun
Example:
Version history:
v1.00- 07.07.2018 - first release
v2- 23.04.2022 - LAYOFFMULTIPLE command added, corrected exiting objects selection loop
File format:
.FAS
Compatibility:
-All Autocad versions
Remarks:
-The
application comes with the long command names listed above. To create
your own short aliases for these commands, go to ACAD.PGP file or Menu
Manage->Customization->Edit aliases->Edit Aliases.
Download file: LAYFREEZE_LAYOFF_MULTIPLE_v2.FAS
No comments:
Post a Comment