Originally Posted by
Wish List System
Summary: Be able to use a SETVAR to preset a Layer for XREFs
Description: Be able to use a SETVAR to preset a Layer for XREFs (Like layer Xref).
[] would use the current layer, but if a layer name was supplied, they would go to a default layer. you could still manually change them to any layer you wish, but it would help keep things organized - especially in a larger organization. If it was a SETVAR it could work in the Project Navigator, as well as vanilla AutoCAD.
Product and Feature: AutoCAD Architecture - Project Navigator
Submitted By: Mark Bauer on 02/16/2015
Just use a Command reactor to store the current layer, set the desired layer current (i.e., "XREF"), and then restore original layer when done:
Code:
(vl-load-com)
(defun XrefReactorSample ()
(or
*XrefReactor*
(setq *XrefReactor*
(vlr-command-reactor
"My Xref Reactor"
'(
(:vlr-commandcancelled . XrefCallback:CommandEnded)
(:vlr-commandended . XrefCallback:CommandEnded)
(:vlr-commandfailed . XrefCallback:CommandEnded)
(:vlr-commandwillstart . XrefCallback:CommandWillStart)
)
)
)
)
(prompt "\nXREF reactor loaded. ")
(princ)
)
(defun XrefCallback:CommandEnded (rea cmd)
(if (and (wcmatch (strcase (car cmd)) "*XATTACH,*XCLIP,*XREF")
*XrefLayer*
)
(setvar 'clayer *XrefLayer*)
)
)
(defun XrefCallback:CommandWillStart (rea cmd)
(if (wcmatch (strcase (car cmd)) "*XATTACH,*XCLIP,*XREF")
(progn
(setq *XrefLayer* (getvar 'clayer))
(vla-add
(vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
"XREF"
)
;;<-- set other layer properties here
(setvar 'clayer "XREF")
)
)
)
(defun c:StopXrefReactor ()
(if *XrefReactor*
(progn
(vlr-remove *XrefReactor*)
(setq *XrefReactor* nil)
)
)
(prompt "\n** XREF reactor stopped ** ")
(princ)
)
(XrefReactorSample)
(prompt "\nInvoke \"STOPXREFREACTOR\" command to stop. ")