AutoLISP 确实为在非活动文档中执行的 reactor 回调函数提供了有限的支持。 注意:AutoLISP 中的 ActiveX 支持仅限于 Windows。
AutoLISP 一次只能在单个图形文档中工作,而某些 AutoCAD API(如 ObjectARX 和 VBA)确实支持应用程序在多个文档中同时工作的功能。因此,应用程序可以修改当前未处于活动状态的打开图形。 虽然 AutoLISP 应用程序不能在活动文档之外运行,但它们可以在与从中加载的文档不同的命名空间中运行,但它仍然与该文档相关联,并且不能操作另一个文档中的对象。 默认情况下,仅当定义 reactor 回调函数的文档是活动文档时发生通知事件时,才会执行该函数。您可以使用该函数更改此行为。vlr-set-notification 如果希望 reactor 执行其回调函数,即使文档处于非活动状态(例如,如果另一个命名空间中的应用程序触发事件),请使用以下函数调用: (vlr-set-notification reactor-object 'all-documents) 如果希望反应器仅在定义它的文档处于活动状态时发生事件时执行其回调函数,请使用以下函数调用: (vlr-set-notification reactor-object 'active-document-only) 该函数返回指定的 reactor 对象。vlr-set-notification 例如,以下语句定义一个反应器,并设置它以响应事件,无论其关联的文档是否处于活动状态: (setq circleReactor (vlr-object-reactor (list myCircle) "Circle Reactor" '((:vlr-modified . print-radius)))) #<VLR-Object-Reactor> (vlr-set-notification circleReactor 'all-documents) #<VLR-Object-Reactor> 反应器的通知设置可以通过该功能确定。例如:vlr-notification (vlr-notification circleReactor) all-documents 该函数仅影响指定的反应器。创建所有反应器时,默认通知设置为 。vlr-set-notificationactive-document-only 谨慎:如果选择将反应器设置为执行其回调函数,即使在其文档未处于活动状态时触发也是如此,则回调函数除了设置和读取 AutoLISP 变量外,不应执行任何操作。任何其他操作都可能导致系统变得不稳定。
相关概念 |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2024-12-15 14:56
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.