概要 - 複数の名前空間でリアクタを使用する(AutoLISP/ActiveX)

AutoLISP は、アクティブでないドキュメントで実行するリアクタ コールバック関数を制限付きでサポートしています。

注: AutoLISP での ActiveX のサポートは Windows のみに制限されています。

AutoLISP は同時に 1 つの図面ドキュメントで動作しますが、ObjectARX や VBA などの AutoCAD API の中には、複数のドキュメントで同時にアプリケーションが動作できるものもあります。つまり、アプリケーションは現在アクティブでない開いている図面を変更できます。

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-notification 関数は、指定されたリアクタにのみ影響します。すべてのリアクタは、既定の通知を active‑document‑only に設定して作成されます。

注意: ドキュメントがアクティブでないときに発生してもコールバック関数を実行するようリアクタを設定すると、コールバック関数は AutoLISP の変数を設定して読み込む以外は何も行いません。他のアクションはいずれも、システムが不安定になる可能性があります。