AutoLISP プログラミング言語を使用してカスタム ルーチンを作成することは、AutoCAD での作業を自動化し、機能を拡張する最善の方法です。
AutoLISP は、LISP (LISt Processing)プログラミング言語に基づいています。リストとは、括弧で囲まれた構造です。リスト内の要素は、次の 1 つまたは複数であることが可能です。
通常は、リストの先頭の要素は関数の名前です。後続の要素は 「引数」と呼ばれ、関数が処理する値を提供します。
次に AutoLISP 式が使用する構文を示します。
(function_name [argument1 argumentX …])
AutoCAD ヘルプ システムには、AutoLISP プログラムで使用することができる有効な関数の一覧が記載されています。各関数のトピックには、次の情報が記載されています。
ほとんどの関数のトピックには、その関数を使用するときに役立つサンプル コードも記載されています。
一見すると、プログラムの AutoLISP 式で使用されている構文に威圧されるかもしれませんが、少し時間を割いて経験を積めば使用できるようになります。AutoLISP 式は ( (左括弧)で始まるだけでなく、! 文字で始めることもできます。! (感嘆符)は、AutoCAD のコマンド プロンプトに対してのみ使用でき、AutoLISP 変数の現在値が返されます。
次に、AutoLISP 式の例を示します。
AutoLISP プログラムが複雑になるほど、作成する式も複雑になります。AutoLISP 式は、それぞれの内側にネストすることができます。式がネストされている場合、常に最も内側の式から外側の式へと評価されます。AutoLISP 式の評価プロセスは、算術式の計算順序に似ています。
次に、AutoLISP 内にネストされた算術式の例を示します。
(+ 0.01 (* 2 0.875))
この例では、最も内側の式 (* 2 0.875) が最初に評価されます。2 つの数値が乗算され、* (乗算)関数が値 1.75 を返します。次に、AutoLISP は外側の式を (+ 0.01 1.75) として評価します。その後 2 つの数値が加算され、AutoLISP は最終値 1.76 を返します。
次に、ネストされた式の他の例を示します。
(setq nDist (getreal "\nEnter a distance: "))
getreal は、実数値を入力するようユーザに求めます。入力された値は setq 関数に渡され、ユーザ定義変数 nDist に代入されます。
(alert (strcat "Welcome " "to " "AutoLISP!"))
strcat 関数は、すべての文字列を 1 つの文字列値に結合します。strcat 関数が返した値は alert 関数に渡され、メッセージ ボックスに表示されます。
コマンド プロンプトに対して、!dRadius と入力します。
AutoLISP は、ユーザ定義変数 dRadius に格納されている値を返します。変数が定義されていないか、値が格納されていない場合は、nil が返されます。
コマンド プロンプトに対して、(setq dRadius 1.25) と入力します。
AutoLISP は dRadius というユーザ定義変数を作成し、それに 1.25 を代入します。setq 関数は 1.25 を返しますが、これは変数に代入された値です。
コマンド プロンプトに対して、!dRadius と入力します。
AutoLISP は、ユーザ定義変数に格納されている値 1.25 を返します。
コマンド プロンプトに対して、(command "._circle" "0,0" dRadius) と入力します。
AutoLISP は AutoCAD の CIRCLE[円]コマンドを開始し、コマンドに 2 つの値を渡します。値 "0,0" は円の中心点の位置を定義するために使用され、dRadius は円の半径を指定するために使用されます。dRadius には 1.25 が代入されているので、円の半径は 1.25 に設定されます。
コマンド プロンプトに対して、(setq pt (getpoint "¥n円の中心点を指定: ")) と入力します。
AutoLISP は、座標値を求めるプロンプトを表示します。キーボードを使用して座標値を入力するか、作図領域でクリックすることができます。入力された座標値は、変数 pt に代入されます。
コマンド プロンプトに対して、(command "._circle" pt dRadius) と入力します。
AutoLISP は AutoCAD の CIRCLE[円]コマンドを開始し、コマンドは変数 pt および dRadius に代入されている値を使用します。