AutoLISP
概要
AutoLisp は、AutoCAD や IJCAD など一部のAutoCAD互換ソフトで利用できるインタープリタ型プログラミング言語。 AutoCAD や IJCAD でコマンドやシステム変数、ダイアログ ボックスを呼び出すことができる。 AutoCAD LT においては利用できない。(AutoCAD LT で AutoLisp の機能を利用可能にするソフトウェアも存在したが、現在はなくなっている。)
IJCAD における AutoLisp は、AutoCAD の互換機能として存在し、一部の関数や外部定義関数を除けば、ほぼ同様に利用することが出来る。 (利用可能な関数などの情報については、AutoLisp関数互換表 を参照。)
一番長くサポートされている APIであり、他のAPIに比べバージョンアップに伴う影響を受けにくい API といえるかもしれない。 開発環境として AutoCAD には、Visual LISP という 対話型の開発環境が搭載されているが、IJCAD では特定の開発環境はないため、一般的なテキストエディタによる開発となる。 LISP に最適なエディタとしては括弧の補完機能や字下げ機能があると便利で、以下のようなものがある。
- Notepad ++
- xyzzy や emacs など
以下は、市販エディタ。
- 秀丸 ・・・ ファイル:Acad hilights.zip
- EmEditor
- MIFES など
AutoLisp 関数の構文
AutoLisp の構文は非常にシンプルである。以下に例を示す。
解説
上の例では、foo 関数には 1 つの必須引数 string と、1 つの省略可能な引数 number があり、引数 number は追加で指定することができる。一般に、引数の名前は予期されるデータ タイプを表している。
この foo 関数で有効な呼び出しと無効な呼び出しの例をを示す。
- 有効な呼び出し例
- (foo "catch")
- (foo "catch" 22)
- (foo "catch" 22 31)
- 無効な呼び出し例
- (foo 44 13) ; <- 引数 string が無い
- (foo "fi" "foe" 44 13) ; <-引数 number に文字が指定されている
- (foo) ; <- 引数が無い。
無効な呼び出しを行うとエラーになり、処理が中断される。
関数の機能別一覧
以下は関数を分類分けしたもの。他に、目次からのアクセスも便利です。
- 基本関数:
- ユーティリティ関数:
- 選択セット
- オブジェクト
- シンボル テーブル関数:
- 拡張データ処理
- オブジェクト処理
- 選択セット操作
- シンボル テーブル処理の各関数
- メモリ管理関数
- Visual LISP の拡張関数:(ActiveX)
- リアクタ関数
- VLX 名前空間関数
- 名前空間対話関数
- Windows レジストリ処理関数
- 画層状態関数
- ダイアログ ボックス関数
AutoLISP プログラムの作成
AutoLISP のプログラムは、以下の 3つのファイル形式のうちのいずれかで作成する。
- LSP ファイル(.lsp) ・・・ AutoLISP プログラム コードが記述された ASCII テキスト ファイル。
- FAS ファイル(.fas) ・・・ 1 つの LSP プログラム ファイルのコンパイル済みバイナリ ファイル。
- VLX ファイル(.vlx) ・・・ 1 つ以上の LSP ファイルとダイアログ コントロール言語(DCL)ファイルの両方または一方をコンパイルしたファイル。
- IJCAD では、LSPのみ対応。FASファイルとVLXファイルは利用できない。(2009年10月. IJCAD7 現在)
- IJCAD において、LISPプログラムを秘匿化したい場合は、AutoCAD に搭載されている、PROTECT.EXE か ebatch社(IntelliJAPANの前身)からでていた IJPROLSP.EXE を利用して暗号化する。
AutoCAD では、AutoCAD 2000 以降 Visual LISP (VLISP) 環境が備わりコンパイラ、デバッガ、などを備えた統合開発環境(IDE)を備えているため、その上で AutoLISP プログラムを記述していくことが出来る。
IJCAD では、IDEは備わっていないため、テキストエディタにより記述していく。
また、AutoCAD・IJCAD どちらの環境でも、短い構文は次のようにコマンドプロンプトに直接記述して実行することが出来る。
コマンド: (+ 1 2 3 4 5 ) 15 <- 実行結果
AutoLISP プログラムの使用
AutoLISP のプログラム(.lsp のファイル)は、まずそのプログラムをCADへロードする必要がある。
ロードは、コマンド プロンプトに対して load 関数を使用して AutoLISP コードを入力する。 load 関数が正常に終了すると、ファイル内の最後の式の値がコマンド プロンプト領域に表示される。これは通常そのファイルで定義されている最後の関数の名前か、新しくロードされた関数の使用説明となる。
load 関数が失敗すると、AutoLISP のエラー メッセージが表示される。 load 関数の失敗は、AutoLISPファイルのコーディング間違いや、コマンド プロンプトに対して間違ったファイル名を入力した場合に起こる。
load 関数の構文は、次のとおり。
(load filename [onfailure])
この構文は、load 関数に 2 つの引数があることを示している。 1つ目の filename は、読み込むAutoLISPファイル名(とパス)で必須。 2つ目の onfailure は省略可能で、失敗した場合のメッセージを入力する。 コマンドラインからの入力で AutoLISP ファイルをロードする場合は通常、filename 引数のみを指定する。
次の例は、AutoLisp ファイル newfile.lsp をロードしている。
コマンド: (load "newfile")
拡張子 .lsp は省略可能。この形式は、現在のライブラリ パス上のどの LSP ファイルに対しても動作する。
ライブラリ パス上にない AutoLisp ファイルをロードする場合は、filename 引数として、ファイル名を絶対パスで指定する必要がある。
コマンド: (load "d:/files/morelisp/newfile") または コマンド: (load "d:\\files\\morelisp\\newfile")
注 : フォルダ パスを指定する場合、スラッシュ(/)または 2つの円記号(¥¥)を区切り記号として使用する必要がある。通常Windowsで利用される単一の円記号(¥)での指定は、2つの円記号(¥¥)となる。これは、AutoLisp では単一の円記号(¥)には特別な意味があるため。
- 尚、AutoCADとIJCAD共に LISPファイルを CAD のウィンドウに ドラッグ&ドロップしても読み込まれる。
- 自動ロード
-
- AutoCAD では、パスの通っているフォルダにある acad.lsp があると起動時に読み込み・実行される。また、acaddoc.lsp ファイル があるとファイルを開始するたびに読み込み・実行される。
- IJCAD では、パスの通っているフォルダにある icad.lsp があると、ファイルを開始するたびに読み込み・実行される。
- 自動ロードファイルはファイルの初期化前に実行されるため、command 関数は使ってはいけない。 AutoCAD の場合は、S::STARTUP 関数に記述する事になっている。
IJCAD で自動ロードする場合の注意点
IJCAD は図面毎に名前空間が分かれていないため、自動ロードで何か初期化を行う処理がある場合、別の図面を開いたときにすでに開いている変数値などが上書きされてしまう可能性があるため、特に複数のファイルにまたがる処理をする場合は注意が必要である。
AutoLISP が使えるCADソフト
製品名 | LSP対応 | DCL対応 | FAS/VLX対応 |
---|---|---|---|
AutoCAD | ○ | ○ | ○ |
AutoCAD LT | - | - | - |
AresCAD *1 | ○ | △ | - |
BricsCAD | ○ | ○ | - |
IJCAD | ○ | ○ | - |
IntelliCAD系CAD | ○ | △*2 | - |
- *1…ファイル名8文字+拡張子だけ。パス指定フルパスのみ。
- *2…日本語の扱いが良くないものが多い。
関連書籍
- AutoCAD AutoLISP 実践ガイド 著者: T.ボスフィールド / 出版: (株)星雲社
- AutoLISP 徹底活用ガイド 著者: 落合重紀 / 出版: (株)翔泳社
- AutoLispの初歩 著者: 岡島正夫 / 出版: 東海大学出版会
- AmazonでAutoLISP書籍を見る