AutoLISP 确实为在非活动文档中执行的响应器回调函数提供了有限的支持。 注意:AutoLISP 中的 ActiveX 支持仅限于 Windows。
AutoLISP 一次在单个图形文档中工作,而某些 AutoCAD API(如 ObjectARX 和 VBA)确实支持应用程序在多个文档中同时工作的功能。因此,应用程序可能会修改当前未处于活动状态的打开图形。 虽然 AutoLISP 应用程序不能在活动文档外部运行,但它们可以在与从中装入它的文档不同的命名空间中运行,但它仍与该文档相关联,并且不能操作另一个文档中的对象。 默认情况下,仅当在其中定义的文档是活动文档时发生通知事件时,才会执行反应器回调函数。您可以使用函数更改此行为。vlr-set-notification 如果希望反应器执行其回调函数,即使文档未处于活动状态(例如,如果另一个命名空间中的应用程序触发事件),请使用以下函数调用: (vlr-set-notification reactor-object 'all-documents) 如果希望反应器仅在定义它的文档处于活动状态时发生事件时才执行其回调函数,请使用以下函数调用: (vlr-set-notification reactor-object 'active-document-only) 该函数返回指定的反应器对象。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 )
GMT+8, 2024-6-10 20:22
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.