AutoLISP は、 AutoCADのフルバージョンとその派生製品 ( AutoCAD Civil 3D、AutoCAD Map 3D、AutoCAD Architecture、AutoCAD Mechanicalを含む)で使用するために特別に構築されたプログラミング言語Lispの方言です。 [ 1 ] AutoLISP コードを実行するためのアプリケーション プログラミング インターフェイス(API)もインタープリタも、AutoCAD LT 製品ラインには含まれていません (リリース 2023 まで、AutoCAD LT 2024 には AutoLISP が含まれています)。[ 2 ] AutoLISP 関数のサブセットは、ブラウザー ベースの AutoCAD Web アプリに含まれています。
AutoLISP は、ガベージ コレクション、不変のリスト構造、設定可能なシンボルを備えた、小さく動的スコープ、動的型付けの Lisp 言語方言です。マクロシステム、レコード定義機能、配列、可変数の引数を持つ関数、let バインディングなどの通常の Lisp 機能は備えていません。コア言語を除けば、プリミティブ関数のほとんどは、ジオメトリ、AutoCAD の内部DWGデータベースへのアクセス、または AutoCAD 内のグラフィック エンティティの操作に使用されます。これらのグラフィック エンティティのプロパティは、定義点、半径、色、レイヤー、線種などのプロパティを示す AutoCADグループ コードと値がペアになった関連付けリストとして AutoLISP に公開されます。AutoCADは .LSP ファイルから AutoLISP コードをロードします。[ 3 ]
AutoLISP コードは、ユーザーがポイントを選択したり、画面上のオブジェクトを選択したり、数値やその他のデータを入力したりできるプリミティブ関数を使用して、AutoCAD のグラフィカル エディタを介してユーザーと対話できます。AutoLISP には、AutoCAD 内で自動レイアウトのモーダル ダイアログボックスを作成するための組み込みのグラフィカル ユーザー インターフェイス(GUI) ミニ言語またはドメイン固有言語(DSL)であるダイアログ コントロール 言語もあります。[ 3 ]
AutoLISPは、David Betzによって作成されたXLISPの初期バージョンから派生したものです。 [ 4 ]この言語は、1986年1月にAutoCADバージョン2.18で導入され、1995年2月のバージョン13まで、後続のリリースで機能強化が続けられました。その後、AutodeskはVisual Basic for Applications(VBA)、. NET Framework、ObjectARXなどのより流行の開発環境を優先し、 AutoLISPの開発を怠りました。しかし、AutoLISPはAutoCADの主要なユーザーカスタマイズ言語として残っています。
Vital-LISPは、統合開発環境(IDE)、デバッガ、コンパイラ、ActiveXサポートなどを含むAutoLISPの大幅な機能強化版で、サードパーティ開発会社Basis Softwareによって開発・販売されました。Vital LISPは既存のAutoLISP言語の上位互換であり、AutoCADオブジェクトモデルへのVBAライクなアクセス、リアクター(AutoCADオブジェクトのイベント処理)、一般的なActiveXサポート、その他の一般的なLisp関数などが追加されました。Autodeskはこのソフトウェアを買収し、Visual LISPと改名して、1997年5月にリリースされたAutoCADリリース14のアドオンとして短期間販売しました。その後、1999年3月にリリースされたAutoCAD 2000にAutoLISPの代替として組み込まれました。それ以降、AutodeskはVisual LISPの大幅な機能強化を中止し、VBA、 .NET、C++に注力するようになりました。2014年1月31日現在 オートデスクは、ユーザーによるカスタマイズのためにVBAから.NETに移行する長期プロセスの一環として、VBA 7.1より前のバージョンのサポートを終了しました。[ 5 ] [ 6 ]
AutoLISP は非常に多くの支持者を得ており、他のコンピュータ支援設計(CAD) アプリケーションベンダーも自社製品に AutoLISP を追加しています。Bricscad 、IntelliCAD 、DraftSight などは AutoLISP 機能を備えているため、AutoLISP ユーザーは AutoCAD の代替としてこれらのアプリケーションの使用を検討できます。AutoCAD 2000 以降、 AutoLISP を使用した開発のほとんどは Visual LISP で行われています。これは、元の AutoLISP エンジンが Visual LISP エンジンに置き換えられたためです。AutoLISP または Visual LISP を使用して開発されたユーティリティやアプリケーションは数千個あります (LSP、FAS、VLX ファイルとして配布されています)。[ 7 ] [ 8 ]
AutoLISPで書かれたシンプルな「Hello World」プログラムは次のようになります。
( defun hello ( )( princ "\nHello World!" )( princ ))関数定義内の最後の行に注目してください。引数なしで評価すると、このprinc関数はヌルシンボルを返しますが、これは AutoCADコマンドラインインターフェイスには表示されません。AutoCAD コマンドラインは読み込み・評価・出力ループ(REPL) として機能するため、通常はコマンドラインに「Hello World!」と表示され、その直後に 関数呼び出しの戻り値が表示されますprinc。したがって、 関数への最後の呼び出しがない場合princ、結果は次のようになります。
Hello World!"\nHello World!"このprin1関数は、同じ結果を得るためにも使用できます。
より複雑な例は次のとおりです。
( defun c:pointlabel ( / pnt )( if ( setq pnt ( getpoint "\nポイントを指定してください: " ))(予後)( entmake)(リスト);; エンティティタイプが作成されています' ( 0 . "POINT" );; 世界座標系における挿入点( cons 10 ( trans pnt 1 0 ))))( entmake)(リスト)' ( 0 . "TEXT" )( cons 10 ( trans ( cons ( + ( car pnt ) 0.6 )( cdr pnt )1 0 ));; テキストの高さ( cons 40 ( getvar 'textsize ));; テキストコンテンツ( cons 1 ( strcat "X:" ( rtos ( car pnt ))" Y:" ( rtos ( cadr pnt )))))))( princ ))上記のコードは、指定された点に AutoCAD の点オブジェクトを生成し、その横に X 座標と Y 座標を表示する 1 行のテキスト オブジェクトを作成する新しい関数c:を定義します。関数名には特別な接頭辞 が含まれており、これにより AutoCAD はコマンド プロンプトで関数名の残りの部分をpointlabel通常のコマンドとして認識します。ユーザーが AutoCAD コマンドラインで「pointlabel」と入力すると、X 座標と Y 座標を入力するか、図面内の場所をクリックして点を選択するように求められます。関数は、その点にマーカーを配置し、アクティブなユーザー座標系 (UCS) に対する点の X 座標と Y 座標を含む 1 行のテキスト オブジェクトをその横に作成します。この関数はパラメーター を必要とせず、ローカル変数('pnt') を 1 つ含んでいます。
上記の例では、関数を介して直接ポイントオブジェクトとテキストオブジェクトを作成する代わりに、AutolISPコード内から組み込みのAutoCADコマンドを使用してそれらを作成するように記述することもできますentmake。ただし、このようなアプローチは、AutoCADのリリース間でコマンドプロンプトが変更される可能性があり、その影響を受けやすいという欠点があります。