Code:
;allgemeinens
; Anfang der Datei http://activex.autolisp.info/layreactor.html
; Funktion zum Setzen der Reaktoren
(defun add-cmd-reactors( / )
(vl-load-com)
(if(not *cmd-reactor-added*)
(progn
(vlr-command-reactor nil
'( (:vlr-commandWillStart . cmd-start-callback))
)
(vlr-command-reactor nil
'( (:vlr-commandEnded . cmd-end-callback))
)
(setq *cmd-reactor-added* 'T)
)
)
)
; allgemeine Cmd-Callback-Funktion
; (vor der Befehlsausführung)
(defun cmd-start-callback(reactor argslist / )
(cond
; ( (member(car argslist)'("_plot""plot"))
; (plot-start-callback reactor argslist)
; )
( (member(car argslist)'("-VPORTS""-MANSFEN""AFENSTER""-AFENSTER"))
(vport-start-callback reactor argslist)
)
( (member(car argslist)'("punkt" "_point"))
(punkt-start-callback reactor argslist)
)
( (member(car argslist)'("_mleader""MFÜHRUNG" "BEMFÜHRUNG" "FÜHRUNG" "SFÜHRUNG"))
(fuhrung-start-callback reactor argslist)
)
)
)
; allgemeine Cmd-Callback-Funktion
; (nach der Befehlsausführung)
(defun cmd-end-callback(reactor argslist / )
(cond
; ( (member(car argslist)'("_plot""plot"))
; (plot-end-callback)
; )
( (member(car argslist)'("-MANSFEN""AFENSTER"))
(vport-end-callback)
)
( (member(car argslist)'("punkt" "_point"))
(punkt-end-callback)
)
( (member(car argslist)'("_mleader""MFÜHRUNG" "BEMFÜHRUNG" "FÜHRUNG" "SFÜHRUNG"))
(fuhrung-end-callback)
)
)
)
; Macht einen Layer aktuell
(defun set-layer(name / )
(vla-put-ActiveLayer
(current-document)
(vla-item(document-layers)name)
)
)
; gibt das Vla-Object zu einem
; Layernamen zurück
(defun layer-object(name / result)
(vlax-for layer(document-layers)
(if
(=(strcase name)
(strcase(vla-get-name layer))
)
(setq result layer)
)
)
result
)
; Erzeugt einen neuen Layer
(defun create-layer(name props / newlayer)
(setq newlayer
(vla-add (document-layers) name)
)
(foreach prop props
(vlax-put-property
newlayer (car prop)(cdr prop)
)
)
newlayer
)
; Ermittelt den aktuellen Layer
(defun get-current-layer( / )
(vla-get-activelayer
(current-document)
)
)
; Gibt die Layer-Collection zurück
(defun document-layers( / )
(vla-get-layers
(current-document)
)
)
; gibt die aktuelle Zeichnung zurück
(defun current-document( / )
(vla-get-activedocument
(vlax-get-acad-object)
)
)
; Vorher-Callback für Ansichtsfenster
(defun vport-start-callback(reactor argslist / layer)
(setq layer "Defpoints")
(setq *previous-layer*(get-current-layer))
(set-layer layer)
)
; Nachher-Callback für Ansichtsfenster
(defun vport-end-callback( / )
(if *previous-layer*
(progn
(vla-put-activelayer
(current-document)
*previous-layer*
)
(setq *previous-layer* nil)
)
)
)
; Vorher-Callback für Punkt
(defun punkt-start-callback(reactor argslist / layer)
(setq layer "Defpoints")
(setq *previous-layer*(get-current-layer))
(set-layer layer)
)
; Nachher-Callback für Punkt
(defun punkt-end-callback( / )
(if *previous-layer*
(progn
(vla-put-activelayer
(current-document)
*previous-layer*
)
(setq *previous-layer* nil)
)
)
)
; Vorher-Callback für Führung
(defun fuhrung-start-callback(reactor argslist / layer)
(setq layer "fp_text")
(setq *previous-layer*(get-current-layer))
(set-layer layer)
)
; Nachher-Callback für Führung
(defun fuhrung-end-callback( / )
(if *previous-layer*
(progn
(vla-put-activelayer
(current-document)
*previous-layer*
)
(setq *previous-layer* nil)
)
)
)
; Vorher-Callback für Plot
;(defun plot-start-callback(reactor argslist / )
; (command "BlocksToLayer0")
; (vl-cmdf) ; Warten, bis der Befehl abgeschlossen ist
;)
; Vorher-Callback für Plot
;(defun plot-start-callback(reactor argslist / )
; (BlocksToLayer0) ; Direktes Aufrufen der Funktion BlocksToLayer0
;)
; Nachher-Callback für Plot
;(defun plot-end-callback( / )
;)
(princ
(strcat
"\n** ForsterReaktoren.lsp _ Version 2.1 loaded "
)
)
; Sicherstellen, dass die ActiveX-
; Funktionen geladen sind
(vl-load-com)
; Reaktoren beim Laden starten
(add-cmd-reactors)
; Ende Datei