概要 - コールバック関数を定義する(AutoLISP/ActiveX)

リアクタ機能をアプリケーションに追加する前に、まず最初にリアクタ イベント時に必要なタスクを実行するコールバック関数を書く必要があります。

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

コールバック関数を定義した後は、リアクタ オブジェクトを作成することによりその関数をイベントにリンクします。コールバック関数は通常の AutoLISP 関数で、defun 関数を使用して定義できます。しかし、コールバック関数でできることには、いくつか制限があります。command 関数を使用して AutoCAD コマンドを呼び出すことはできません。また、図面オブジェクトにアクセスするには、ActiveX 関数を使用する必要があります。entget 関数や entmod 関数は、コールバック関数の中からは使用できません。

オブジェクト リアクタ以外のすべてのリアクタのコールバック関数には、2 つの引数を指定して定義する必要があります。

次の例は、ファイルのパスとサイズ情報を表示する saveDrawingInfo という名前の関数を示しています。この関数は、図面が保存されるときに実行される saveComplete リアクタを使用して DWG 編集エディタにアタッチされます。

(defun saveDrawingInfo (calling-reactor commandInfo / dwgname filesize)
  (vl-load-com)
  (setq dwgname (cadr commandInfo)
    filesize (vl-file-size dwgname)
  )
  (alert (strcat "The file size of " dwgname " is "
      (itoa filesize) " bytes."
    )
  )
 (princ)
)

この例では、calling-reactor 変数が関数を呼び出すリアクタを示しています。この関数は、commandInfo パラメータから図面名を取得してから、vl-file-size 関数を使用して図面のサイズを取得します。最後に、関数は、AutoCAD ウィンドウの警告ボックスに情報を表示します。

コールバック関数に渡されるパラメータは、関数に関連付けられているイベントのタイプによって異なります。たとえば、saveDrawingInfo は、saveComplete イベントに関連付けられます。このイベントは、SAVE[保存]コマンドが完了したことを示します。saveComplete イベントに対して、AutoCAD は、図面が保存されたファイル名を含む文字列をコールバック関数に渡します。一方、システム変数の変更(sysVarChanged イベント)に応答するコールバック関数は、システム変数の名前(文字列)と、変更が成功した場合に示されるフラグを含むパラメータ リストを取得します。製品のヘルプに、リアクタ タイプごとのイベントのリストと各イベントに関連付けられているパラメータが記載されています。イベントは、各リアクタ タイプを定義するのに使用される関数の説明箇所に示されています。

AutoCAD は、2 つの定義済みコールバック関数を提供しています。リアクタをテストするときに、これらの関数を使用できます。