Hi Rogerio,
The reason you get an error message when asking for the ActiveLayer
proprerty of an OBDX document is because there's no such thing as "Active".
An OBDX file resides in memory only. Nothing is "Active". You can only
modify the database of objects available.
wrote in message news:6379755@discussion.autodesk.com...
This may be possible with OjectDBX + autolisp.
However, we must examine how.
Changing text, for example, is possible but it's complicated, at least for
me.
I'll try to find something.
:)
Rogerio
Later...
Below a simple code to do this using "Ps_Bolt" layer name as example:
{code}
;Code base extracted from here:
;;http://discussion.autodesk.com/forums/thread.jspa?messageID=5544265
;;and here:
;;http://discussion.autodesk.com/forums/thread.jspa?messageID=1193220
;; Thanks for share the code
(defun c:fl (/ file1 odbx);Freeze Layer
(vl-load-com)
;------------------------------------------------
(setq file1 (getfiled "Select a drawing" "" "dwg" 0))
(setq odbx (vla-GetInterfaceObject (vlax-get-ACAD-Object)
(strcat "ObjectDBX.AxDbDocument." (substr (getvar "acadver") 1 2))));;set
Objectdbx version
(setq layer_name "Ps_Bolt")
(vlax-invoke-method odbx (quote Open) file1)
(vlax-for layerx (vla-get-Layers odbx)
(if (= layer_name (vla-get-name layerx))
(vla-put-freeze layerx :vlax-true)))
(vlax-invoke-method odbx (quote SaveAs) file1)
(vlax-release-object odbx)
(princ))
{code}
and more sophisticated, but gives an error that I could not fix (I try to
fix it later, but I accept corrections - thanks):
; Error: ActiveX Server returned the following error message: unknown name:
ActiveLayer
{code}
(defun c:fl1 (/ file1 odbx layer_name);Freeze Layer
(vl-load-com)
;------------------------------------------------
(setq file1 (getfiled "Select a drawing" "" "dwg" 0))
(setq odbx (vla-GetInterfaceObject (vlax-get-ACAD-Object)
(strcat "ObjectDBX.AxDbDocument." (substr (getvar "acadver") 1 2))));;set
Objectdbx version
(setq layer_name "Ps_Bolt")
(vlax-invoke-method odbx (quote Open) file1)
; by Luiz Esquivel below
(vlax-for layer (setq layers (vla-get-layers odbx))
(if (and (not (vl-catch-all-error-p
;; get the layer as vla-object
(setq vla_layer (vl-catch-all-apply
'vla-item
(list layers layer_name)))))
;; not the active layer
(not (equal (vla-get-activelayer odbx) vla_layer)))
(if ;; if layer thaw?
(eq (vla-get-freeze vla_layer) :vlax-false)
;; freeze
(vla-put-freeze vla_layer :vlax-true)
; by Luiz Esquivel above
)
)
)
;------------------------------------------------
(vlax-invoke-method odbx (quote SaveAs) file1)
(vlax-release-object odbx)
(princ))
{code}
:)
Rogerio
Edited by: Rogerio_Brazil on Apr 24, 2010 10:18 AM