AutoLISP

提供:GizmoLabs - だいたい CAD LISP なサイト
2009年12月28日 (月) 12:45時点におけるGizmon (トーク | 投稿記録)による版 (→‎ダイアログボックスの一般的な使用手順)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

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 など

以下は、市販エディタ。


AutoLisp 関数の構文

AutoLisp の構文は非常にシンプルである。以下に例を示す。

Function const.png

解説
上の例では、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)  ; <- 引数が無い。

無効な呼び出しを行うとエラーになり、処理が中断される。


関数の機能別一覧

以下は関数を分類分けしたもの。他に、目次からのアクセスも便利です。

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 は図面毎に名前空間が分かれていないため、自動ロードで何か初期化を行う処理がある場合、別の図面を開いたときにすでに開いている変数値などが上書きされてしまう可能性があるため、特に複数の図面を同時に開いて処理する場合は注意が必要である。