chavlji 发表于 2022-7-6 14:55:39

反应堆文件已打开!?

以下代码应在文件打开、保存和关闭时发出警报。Save和Close可以正常工作,但beginOpen-EndOpen什么都不做。有没有在文件打开时工作的反应堆?我有Autocad 2008。
 
(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

wizman 发表于 2022-7-6 15:21:44

确保它是持久的反应器,并确保回调函数在startapp加载,但当转移到其他电脑时,你必须先加载回调函数,它才能工作。

Lee Mac 发表于 2022-7-6 15:37:58

 
Wizman,简单介绍一下——持久反应堆和瞬态反应堆之间的区别是什么?

wizman 发表于 2022-7-6 15:42:29

持久性反应堆仍在图纸中。reactor对象可以通过函数持久化(vlr pers reactor object)。一旦持久化,反应器会自动加载自身,因为它嵌入到反应器持久化字典中。因此无需再次加载。
 
瞬态电抗器是正常的默认类型的电抗器,一旦图纸关闭,它就不再起作用。
 
但是回调函数(在事件上运行的lisp)不会自动加载,除非加载到启动套件或acaddoc中。lsp。我还没有见过一个回调函数没有在starup或(load)函数中使用start就可以正常工作。但可以通过扩展数据、ldata、xrecord或注册表来嵌入回调。但仍然缺少一个阅读功能。但是,也许回叫功能也可以像dict中保存反应堆一样保存和加载。也许有人可以提供缺失的链接。

Lee Mac 发表于 2022-7-6 16:00:13

 
感谢Wizman的澄清-有趣的东西
页: [1]
查看完整版本: 反应堆文件已打开!?