$15 for a handful of LISP? Man, I have to start selling this stuff.
But not just yet, this 10 minute effort is for free:
(defun c:DrawingToByLayer
;;-----------------------------------------------------------------
;;
;; Copyright © 2004 Michael Puckett. All Rights Reserved
;;
;;-----------------------------------------------------------------
;;
;; Forces the entire drawing to "ByLayer" (even xrefs for
;; the lifetime of the session or until an xref reload
;; occurs).
;;
;; Forces block definition child entities to layer "0".
;;
;; Existing attributes are forced to the same layer the
;; parent block reside on.
;;
;; Nominally tested, let me know if you find anything wonky.
;;
;; * Use at your own risk. Please test on a dummy dwg *
;;
;;-----------------------------------------------------------------
( /
_UnLockAllLayers
_LockLayers
_ObjectToLayerZero
_ObjectToByLayer
_DocumentToByLayer
_Main
)
(defun _UnLockAllLayers ( document / result )
(vlax-for layer
(vlax-get-property
document
'Layers
)
(cond
( (eq :vlax-true
(vlax-get-property
layer
'Lock
)
)
(vlax-put-property
layer
'Lock
:vlax-false
)
(setq result
(cons layer
result
)
)
)
)
)
result
)
(defun _LockLayers ( layers )
(foreach layer layers
(vlax-put-property
layer
'Lock
:vlax-true
)
)
)
(defun _ObjectToLayerZero ( object )
(vlax-put-property object
'Layer
"0"
)
)
(defun _ObjectToByLayer ( obj / layer )
(foreach property '((Color . 256)(Linetype . "ByLayer"))
(vl-catch-all-apply
'vlax-put
(list
obj
(car property)
(cdr property)
)
)
)
(cond
( (and
(eq "AcDbBlockReference"
(vlax-get
obj
'ObjectName
)
)
(eq :vlax-true
(vlax-get-property
obj
'HasAttributes
)
)
)
(setq layer (vlax-get-property obj 'Layer))
(foreach child (vlax-invoke obj 'GetAttributes)
(_ObjectToByLayer child)
(vlax-put-property child 'Layer layer)
)
)
)
)
(defun _DocumentToByLayer ( document )
(vlax-for block (vlax-get-property document 'Blocks)
(if
(eq :vlax-true
(vlax-get-property block
'IsLayout
)
)
(vlax-for object block
(_ObjectToByLayer object)
)
(vlax-for object block
(_ObjectToByLayer object)
(_ObjectToLayerZero object)
)
)
)
)
(defun _Main ( / document lockedLayers )
(setq lockedLayers
(_UnlockAllLayers
(setq document
(vlax-get-property
(vlax-get-acad-object)
'ActiveDocument
)
)
)
)
(_DocumentToByLayer document)
(_LockLayers lockedLayers)
(princ)
)
(_Main)
)
Edit (1): Added force entities to layer "0", attributes to parent block's layer.
Edit (2): Modified _DocumentToByLayer function to make it faster.