TheSwamp
Code Red => AutoLISP (Vanilla / Visual) => Topic started by: AVCAD on June 29, 2007, 11:11:09 AM
-
Hi again...
I am looking for a lisp or routine that will search the currently opened drawing for all layers that are Frozen/Off or Not Printable and make sure that just those layers are:
OFF
LOCKED
NOT PRINTABLE
FROZEN
COLOR CYAN
anyone have anything like this?
-
here is something I used some time ago... hope will help you (no idea if it is complete):
;;..............................
;; (rcmd-setLayer <string> <int> <string> <t or nil>)
(defun rcmd-setLayer (layer_name lcolor ltype plot / vla_layer)
;; layer name exist?
(if (not
(vl-catch-all-error-p
(setq
vla_layer (vl-catch-all-apply
'vla-item
(list (vla-get-layers (rcmd-thisDwg))
layer_name)))))
(progn
;; thaw
(if (/= :vlax-false (vla-get-freeze vla_layer))
(vla-put-freeze vla_layer :vlax-false))
;; unlock
(if (= :vlax-true (vla-get-lock vla_layer))
(vla-put-lock vla_layer :vlax-false))
;; turn on
(if (/= :vlax-true (vla-get-layerOn vla_layer))
(vla-put-layerOn vla_layer :vlax-true))
(vla-put-color vla_layer lcolor)
;; load the linetype
(if (not
(vl-catch-all-error-p
(setq
vla_ltype
(vl-catch-all-apply
'vla-item
(list (vla-get-lineTypes (rcmd-thisDwg))
ltype)))))
(vla-put-lineType vla_layer (vla-get-name vla_ltype))
(progn (vla-load (vla-get-lineTypes (rcmd-thisDwg))
ltype
"acad.lin")
(vla-put-lineType vla_layer ltype)))
;; t = non-plottable
(if plot
(vla-put-plottable vla_layer :vlax-false))
;; set active
(vla-put-activeLayer (rcmd-thisDwg) vla_layer))
;; make the layer
(if (not
(vl-catch-all-error-p
(setq
vla_layer (vl-catch-all-apply
'vla-add
(list (vla-get-layers (rcmd-thisDwg))
layer_name)))))
(progn
(vla-put-color vla_layer lcolor)
;; load the linetype
(if (not
(vl-catch-all-error-p
(setq
vla_ltype
(vl-catch-all-apply
'vla-item
(list (vla-get-lineTypes (rcmd-thisDwg))
ltype)))))
(vla-put-lineType vla_layer (vla-get-name vla_ltype))
(progn (vla-load (vla-get-lineTypes (rcmd-thisDwg))
ltype
"acad.lin")
(vla-put-lineType vla_layer ltype)))
(if plot
(vla-put-plottable vla_layer :vlax-false))
;; set active
(vla-put-activeLayer (rcmd-thisDwg) vla_layer)))))
;;..............................
(defun rcmd-delete-layerState (lman_obj state_name)
(if (vl-catch-all-error-p
(vl-catch-all-apply
'vla-delete
(list lman_obj state_name)))
nil
T))
;;..............................
(defun rcmd-save-layerState (lman_obj state_name layer_property)
(if (vl-catch-all-error-p
(vl-catch-all-apply
'vla-save
(list lman_obj state_name layer_property)))
nil
T))
(defun rcmd-LayerGetObject (ProgId / Result)
(setq result
(vla-getinterfaceobject
(vlax-get-acad-object)
(strcat ProgId "." (substr (getvar "acadver") 1 2))))
(if (not result)
(setq result
(vla-getinterfaceobject
(vlax-get-acad-object)
progid)))
result)
;;..............................
;;; "AutoCAD.AcadLayerStateManager.16"
(defun rcmd-set-layerState (layer_state_name)
;; ajuste para A2004
;;; (setq :rcm_layer_state_manager
;;; (vla-getInterfaceObject
;;; (vlax-get-acad-object)
;;; (strcat "AutoCAD.AcadLayerStateManager"
;;; (cond
;;; ;; A2000i o' A2002
;;; ((or (eq (getvar "acadver") "15.05")
;;; (eq (getvar "acadver") "15.06"))
;;; "")
;;; ;; A2004
;;; ((eq (getvar "acadver") "16.0") ".16")))))
(setq :rcm_layer_state_manager (rcmd-LayerGetObject "AutoCAD.AcadLayerStateManager"))
(vla-setDataBase
:rcm_layer_state_manager
(vla-get-dataBase (rcmd-thisDwg)))
(rcmd-delete-layerState
:rcm_layer_state_manager
layer_state_name)
(rcmd-save-layerState
:rcm_layer_state_manager
layer_state_name
aclsall))
;;..............................
(defun rcmd-get-state-names (/ names dict obj)
(setq dict (vla-getExtensionDictionary
(vla-get-layers (rcmd-thisDwg))))
(if (not
(vl-catch-all-error-p
(setq obj
(vl-catch-all-apply
(function (lambda () (vla-item dict "ACAD_LAYERSTATES")))))))
(vlax-for n obj
(setq names (cons (strcase (vla-get-name n)) names))))
(if names
(acad_strLsort names)))
;;..............................
(defun rcmd-restore-layerState (layer_state_name)
(if (and :rcm_layer_state_manager
(vl-position
(strcase layer_state_name)
(rcmd-get-state-names)))
(progn (vla-restore :rcm_layer_state_manager layer_state_name)
(rcmd-delete-layerState
:rcm_layer_state_manager
layer_state_name)
(vlax-release-object :rcm_layer_state_manager)
(setq :rcm_layer_state_manager nil))))
-
some more...
;;..............................
(defun rcmd-thaw-unLock-turnOn (layer_name / vla_layer)
(if (not
(vl-catch-all-error-p
(setq
vla_layer (vl-catch-all-apply
'vla-item
(list (vla-get-layers (rcmd-thisDwg))
layer_name)))))
(progn
;; thaw
(if (/= :vlax-false (vla-get-freeze vla_layer))
(vla-put-freeze vla_layer :vlax-false))
;; unlock
(if (= :vlax-true (vla-get-lock vla_layer))
(vla-put-lock vla_layer :vlax-false))
;; turn on
(if (/= :vlax-true (vla-get-layerOn vla_layer))
(vla-put-layerOn vla_layer :vlax-true)))))
;;..............................
(defun rcmd-thaw-unLock-turnOn-all ()
(vlax-for vlaLayer (vla-get-layers (rcmd-thisDwg))
;; thaw
(if (/= :vlax-false (vla-get-freeze vlaLayer))
(vla-put-freeze vlaLayer :vlax-false))
;; unlock
(if (= :vlax-true (vla-get-lock vlaLayer))
(vla-put-lock vlaLayer :vlax-false))
;; turn on
(if (/= :vlax-true (vla-get-layerOn vlaLayer))
(vla-put-layerOn vlaLayer :vlax-true))))
;;..............................
(defun rcmd-unLock-all ()
(vlax-for vlaLayer (vla-get-layers (rcmd-thisDwg))
;; unlock
(if (= :vlax-true (vla-get-lock vlaLayer))
(vla-put-lock vlaLayer :vlax-false))))
;;..............................
(defun rcmd-thaw-all ()
(vlax-for vlaLayer (vla-get-layers (rcmd-thisDwg))
;; thaw
(if (/= :vlax-false (vla-get-freeze vlaLayer))
(vla-put-freeze vlaLayer :vlax-false))))
;;..............................
(defun rcmd-turnOn-all ()
(vlax-for vlaLayer (vla-get-layers (rcmd-thisDwg))
;; turn on
(if (/= :vlax-true (vla-get-layerOn vlaLayer))
(vla-put-layerOn vlaLayer :vlax-true))))
-
sorry i don't understand...are these multiple programs or are they all 1 big program?
-
Those are functions that you can use and adapt them for your needs, if I have time, I will try to provide an skeleton....
-
Give this a whirl:
(defun c:layerschtuff (/)
(vlax-map-collection
(vla-get-layers
(vla-get-activedocument (vlax-get-acad-object))
)
'(lambda (x)
(if (or (= (vla-get-layeron x) :vlax-false)
(= (vla-get-freeze x) :vlax-true)
(= (vla-get-plottable x) :vlax-false)
)
(progn
(vl-catch-all-error-p
(vl-catch-all-apply 'vla-put-freeze (list x :vlax-true))
)
(vla-put-layeron x :vlax-false)
(vla-put-lock x :vlax-true)
(vla-put-plottable x :vlax-false)
(vla-put-color x 4)
)
)
)
)
(princ)
)
-
works perfectly, thanks
-
ronjonp, can i ask why you change the layer name case?
-
Oops :oops: I pulled that from one of my routines....I guess the answer would be attributed to a small amount of OCD. :-D I took that portion out.
Ron