Hi Torsten,
die Frage passt gut in die Weihnachtszeit - das ist nämlich was, wo auch keiner so richtig dran glaubt;-)
Schau dir das kleine Beispielprogramm an: Es werden ein paar charakteristische DWG-reaktoren gesetzt. :vlr-beginClose funktioniert erstmal problemlos, aber :vlr-beginDwgOpen und :vlr-endDwgOpen feuern überhaupt nicht (weder in der bisherigen noch in der neuen Zeichnung). Möglicherweise tun die nur in persistenten Reaktoren was, aber kein Mensch macht sich mehr Gedanken über persistente Reaktoren, weil sowieso nichts funktioniert. Ich werde mich jedenfalls hüten, noch einen Gedanken an persistente Reaktoren zu verschwenden.
:vlr-beginSave und :vlr-saveComplete feuern zwar, aber die Hilfe stimmt nicht. Anders als in der Online-Hilfe angegeben, ist das erste und einzige Element der Parameterliste nämlich nicht der Dateiname, sondern ein COM-Objekt - die IAcadDatabase nämlich. Das mit dem Dateinamen kann auch gar nicht stimmen, denn dazu feuert beginSave viel zu spät: In dem Augenblick, da beginSave endlich feuert, ist vom User der neue Dateiname längst vergeben. Das heisst in der Praxis: beginSave und saveComplete feuern eigentlich gleichzeitig, es ist völlig egal, welchen von beiden man verwendet. Eingreifen oder Abbrechen kann man sowieso nicht mehr.
Einziger Unterschied zwischen dem Glauben an den Weihnachtsmann und dem Glauben an die Reaktoren in AutoCAD: Der Weihnachtsmann ist nicht so ein unappetitliches Thema.
Gruß, Axel Strube-Zettler
Code:
(defun add-reactors( / )
(vlr-dwg-reactor nil '(
(:vlr-beginClose . beginCloseCallback)
(:vlr-beginDwgOpen . beginOpenCallback)
(:vlr-endDwgOpen . endOpenCallback)
(:vlr-beginSave . beginSaveCallback)
(:vlr-saveComplete . saveCompleteCallback)
)
)
)(defun beginCloseCallback(ro args / )
(princ"\n=====>Aktuelle Zeichnung wird geschlossen")
(princ "\nTaste drücken\n")
(read-char)
(princ)
)
(defun beginOpenCallback(ro args / )
(princ(strcat "\n=====>Zeichnung " (car args) " soll geöffnet werden"))
(princ)
)
(defun endOpenCallback(ro args / )
(princ(strcat "\n=====>Zeichnung " (car args) " wurde geöffnet"))
(princ)
)
(defun beginSaveCallback(ro args / )
;(princ(strcat "\n=====>Aktuelle Zeichnung soll als " (car args) " gespeichert werden"))
(princ(type(car args))) (terpri)
(princ)
)
(defun saveCompleteCallback(ro args / )
;(princ(strcat "\n=====>Aktuelle Zeichnung wurde als " (car args) " gespeichert"))
(princ(type(car args))) (terpri)
(princ "\nTaste drücken\n")
(read-char)
(princ)
)
; one shot by load
(add-reactors)
------------------
(defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat
Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP