概要 - AutoLISP ルーチンを自動ロードして実行する

起動時に AutoLISP ルーチンをロードし、作図セッション中に特定のタイミングでコマンドや関数を実行します。

AutoCAD ベースの製品および AutoCAD LT は、3 つのユーザ定義可能ファイルの内容を自動的にロードします。

ユーザ定義可能ファイル Windows Mac OS
AutoCAD AutoCAD LT AutoCAD AutoCAD LT
acad.lsp -- --
acaddoc.lsp -- --
acadlt.lsp -- -- --
acadltdoc.lsp -- -- --
現在のカスタマイズ ファイルに伴う MNL ファイル -- --

既定では、acad.lsp または acadlt.lsp ファイルは製品の起動時に、1 度だけロードされますが、acaddoc.lsp または acadltdoc.lsp ファイルはそれぞれのドキュメント(図面)が開かれるたびにロードされます。つまり、acad.lsp または acadlt.lsp ファイルの読み込みはアプリケーションの起動ルーチンの一部であり、acaddoc.lsp または acadltdoc.lsp ファイルの読み込みはドキュメント(図面)の初期化処理の一部であると考えることができます。これらの起動ファイルの既定の動作は、システム変数 ACADLSPASDOC の設定により変更できます。

これらのファイルのいずれかで、特殊な形式の S::STARTUP 関数を定義すると、図面が完全に初期化された直後に、このルーチンが実行されます。別の方法として、APPLOAD[アプリケーション ロード]コマンドの[スタートアップ登録]オプションを使用して、指定したアプリケーションを自動的にロードすることができます。この方法を使用すると、ファイルを編集する必要はありません。

起動ファイル acad.lsp または acadlt.lsp、および acaddoc.lsp または acadltdoc.lsp は、製品に付属しているわけではありません。これらのファイルは、ユーザが作成して管理します。

注: システム変数 SECURELOAD が 1 または 2 に設定されている場合、AutoCAD 2014 ベースの製品で開始するカスタム アプリケーションはセキュア モードで動作する必要があります。セキュア モードで動作している場合、製品はコードを含むファイルを信頼する場所からロードおよび実行するように制限されます。信頼する場所は、システム変数 TRUSTEDPATHS で指定します。

コマンドの自動ロード

AutoLISP ファイルをロードすると、コマンドを使用していなくても、ファイルのコマンド定義によってメモリが使用されます。AutoLISP の autoload 関数を使用すると、ルーチン全体をメモリにロードしなくても、コマンドを使用できるようになります。次のコードを acaddoc.lsp または acadltdoc.lsp ファイルに追加すると、CMD1、CMD2、CMD3 が cmds.lsp ファイルから自動的にロードされ、コマンド NEWCMD が newcmd.lsp ファイルから自動的にロードされます。

(autoload "CMDS" '("CMD1" "CMD2" "CMD3")) 
(autoload "NEWCMD" '("NEWCMD"))

自動的にロードされるコマンドを、コマンド プロンプトに最初に入力した時点で、コマンド定義全体が関連ファイルからロードされます。AutoLISP は ObjectARX アプリケーション用に autoarxload 関数も提供しています。

注: 名前が同じ AutoLISP アプリケーションのファイルは、ファイルの「更新日時」に基づいてロードされます。完全なファイル名(ファイル拡張子を含めて)を指定しない場合は、最新の更新日時を持つ LSP ファイルがロードされます。

ACAD.LSP または ACADLT.LSP ファイル

特定の AutoLISP ルーチンを常に使用する場合は、acad.lsp または acadlt.lsp ファイルを作成すると便利です。AutoCAD を起動すると、サポート ファイル検索パスを使用して acad.lsp または acadlt.lsp ファイルが検索されます。acad.lsp または acadlt.lsp ファイルが見つかった場合、それがメモリにロードされます。

acad.lsp または acadlt.lsp ファイルは、アプリケーション固有の起動ルーチン用に使用することを目的としているため、acad.lsp または acadlt.lsp ファイル内で定義されているすべての関数と変数は、最初の図面でのみ有効です。すべての図面で使用できるようにするには、そのルーチンを acad.lsp または acadlt.lsp ファイルから acaddoc.lsp または acadltdoc.lsp ファイルに移動します。

acad.lsp または acadlt.lsp、および acaddoc.lsp または acadltdoc.lsp の推奨機能は、システム変数 ACADLSPASDOC で変更できます。システム変数 ACADLSPASDOC を 0(既定)に設定すると、acad.lsp または acadlt.lsp ファイルがアプリケーション起動時に 1 度だけロードされます。1 に設定すると、acad.lsp または acadlt.lsp ファイルは新しい図面を作成したとき、または既存の図面ファイルを開いたときに再ロードされます。

acad.lsp または acadlt.lsp ファイルには、1 つまたは複数のルーチンの AutoLISP コードを格納できます。一連の load 関数呼び出しだけを格納することもできます。後者の方法の方が、修正が簡単なため適切です。次のコードを acad.lsp または acadlt.lsp ファイルに保存すると、製品を起動するたびに、ファイル mysessionapp1.lspdatabasesynch.lspdrawingmanager.lsp がロードされます。

(load "mysessionapp1")
(load "databasesynch")
(load "drawingmanager")
注: 予約済みの acad<リリース>.lsp または acadlt<リリース>.lsp ファイルは変更しないでください。オートデスクが提供する acad<リリース>.lsp または acadlt<リリース>.lsp ファイルには、リリースに特有の必要不可欠な AutoLISP 定義関数が含まれています。このファイルは、acad.lsp または acadlt.lsp ファイルがロードされる直前にメモリにロードされます。<リリース> は、製品のリリース番号を表します。たとえば、acad2024.lsp は AutoCAD および AutoCAD 2024 ベースの製品によってロードされるファイルで、acadlt2024.lsp は AutoCAD LT 2024 によってロードされるファイルです。

ACADDOC.LSP または ACADLTDOC.LSP ファイル

acaddoc.lsp または acadltdoc.lsp ファイルは、各ドキュメント(図面)の初期化に使用することを目的としています。このファイルは、新しい図面を開始するたびに(または、既存の図面を開くたびに)使用できる AutoLISP ルーチンのライブラリをロードしたいときに役に立ちます。

図面を開くたびに、ライブラリ パスで acaddoc.lsp または acadltdoc.lsp ファイルが検索されます。このファイルが見つかると、メモリにロードされます。acaddoc.lsp または acadltdoc.lsp ファイルは、システム変数 ACADLSPASDOC の設定に関係なく、常に各図面に対してロードされます。

ほとんどのユーザは、すべてのドキュメント ベースの AutoLISP ルーチンに対して 1 つの acaddoc.lsp または acadltdoc.lsp ファイルを持つことになります。製品は、ライブラリ パスで定義されている順序で acaddoc.lsp または acadltdoc.lsp ファイルを検索します。したがって、この機能を使用すると、各図面フォルダ内に異なる acaddoc.lsp または acadltdoc.lsp ファイルを格納でき、特定の種類の図面や特定の作業用に特定の AutoLISP ルーチンをロードすることができます。

acaddoc.lsp または acadltdoc.lsp ファイルには、1 つまたは複数のルーチンの AutoLISP コードを格納できます。一連の load 関数呼び出しだけを格納することもできます。後者の方法の方が、修正が簡単なため適切です。次のコードを acaddoc.lsp または acadltdoc.lsp ファイルに保存すると、ファイル mydocumentapp1.lspbuild.lspcounter.lsp が、新しいドキュメントを開くたびにロードされます。

(load "mydocumentapp1")
(load "build")
(load "counter")
注: 予約済みの acad<リリース>doc.lsp または acadlt<リリース>doc.lsp ファイルは変更しないでください。オートデスクが提供する acad<リリース>doc.lsp または acadlt<リリース>doc.lsp ファイルには、リリースに特有の必要不可欠な AutoLISP 定義関数が含まれています。このファイルは、acaddoc.lsp または acadltdoc.lsp ファイルがロードされる直前にメモリにロードされます。<リリース> は、製品のリリース番号を表します。たとえば、acad2024doc.lsp は AutoCAD および AutoCAD 2024 ベースの製品によってロードされるファイルで、acadlt2024doc.lsp は AutoCAD LT 2024 によってロードされるファイルです。

MNL ファイルと AutoLISP メニューのカスタマイズ

カスタマイズ(CUI/CUIx)ファイルがロードされるときに、同じファイル名の MNL ファイルが検索されます。このファイルが見つかると、メモリにロードされます。この機能を使用すると、ユーザ インタフェース要素の正しい動作に必要な AutoLISP 関数を確実にロードすることができます。

注: AutoCAD LT では MNL ファイルの自動ロードはサポートされていませんが、別の LISP ファイルから AutoLISP の LOAD 関数を使用してロードすることができます。

たとえば、製品に custom.cuix という名前のカスタマイズ ファイルがロードされると、custom.mnl という名前のファイルが検索されます。このファイルには、カスタマイズ ファイル内のユーザ インタフェース要素が使用する多数の AutoLISP 関数が定義されている可能性があります。MNL ファイルは、acaddoc.lsp ファイルの後にロードされます。

注: AutoLISP の command 関数を使用して、(command "menu" "newmenu") のような構文でカスタマイズ ファイルをロードすると、関連する MNL ファイルは、AutoLISP ルーチンが実行し終わるまでロードされません。
(command "menu" "newmenu")

(princ "Newmenu utilities… Loaded.")
(Princ)

この例のように、princ 関数の呼び出しを使用してステータス メッセージを表示することができます。最初の princ が実行されると、コマンド プロンプト領域に次のメッセージが表示されます。

Newmenu のユーティリティ… がロードされました

2 番目の princ で AutoLISP 関数が終了します。2 番目の princ 関数を呼び出さないと、上記のメッセージが 2 回表示されます。安全を期すために、load 関数の呼び出しで、前述の onfailure 引数を指定することもできます。

S::STARTUP 関数: 初期化の実行

S::STARTUP 関数を定義すると、図面が初期化された後の必要なセットアップ操作を行うことができます。

起動 LISP ファイル(acad.lsp または acadlt.lsp、および acaddoc.lsp またはacadltdoc.lsp)はすべて、図面が完全に初期化される前に自動的にロードされる MNL ファイルと一緒にメモリにロードされます。通常は、command 関数を使用しない限り問題は発生しません。command 関数を使用すると、図面が初期化された後の動作は保証されません。

注: AutoCAD LT では MNL ファイルの自動ロードはサポートされていませんが、別の LISP ファイルから AutoLISP の LOAD 関数を使用してロードすることができます。

ユーザ定義関数 S::STARTUPacad.lsp または acadlt.lspacaddoc.lsp または acadltdoc.lsp、または MNL ファイルに含めると、新しい図面を開始したときや既存の図面を開いたときに呼び出されます。このため、AutoLISP 起動ファイルに S::STARTUP の定義を含めると、セットアップ操作を実行できます。

たとえば、標準の HATCH[ハッチング]コマンドを、メッセージを表示した後に BHATCH[境界ハッチング]コマンドに切り替えるように変更したいときは、次のコードを含む acaddoc.lsp または acadltdoc.lsp ファイルを使用します。

(defun C:HATCH ( ) 
  (alert "Using the BHATCH command!")
  (princ "\nEnter OLDHATCH to get to real HATCH command.\n")
  (command "BHATCH")
  (princ)
) 
(defun C:OLDHATCH ( ) 
  (command ".HATCH")
  (princ)
) 
(defun-q S::STARTUP ( ) 
  (command "undefine" "hatch") 
  (princ "\nRedefined HATCH to BHATCH!\n")
)

図面が初期化される前に、HATCH と OLDHATCH の新しい定義が defun 関数で定義されます。図面が初期化されると、S::STARTUP 関数が呼び出され、標準の HATCH の定義が再定義されます。

注: S::STARTUP 関数を追加するには、defun ではなく defun-q 関数を使用して定義する必要があります。

S::STARTUP 関数はいろいろな場所(acad.lsp または acadlt.lspacaddoc.lsp または acadltdoc.lsp、または MNL ファイル、またはこれらのファイルからロードされるその他の AutoLISP ファイル)で定義できるため、以前に定義した S::STARTUP 関数が上書きされる可能性があります。

次の例に、起動関数が他の関数と一緒に確実に動作する 1 つの方法を示します。

(defun-q MYSTARTUP ( )

...独自の起動関数 ...

)
(setq S::STARTUP (append S::STARTUP MYSTARTUP))

上記のコードは、独自の起動関数を既存の S::STARTUP 関数のコードに追加し、次に S::STARTUP 関数を再定義することによって、独自の起動コードを追加しています。これにより、前から存在していた S::STARTUP 関数に関係なく正しく動作します。