AutoLisp を始めるなら、このチュートリアルと AutoCAD Programmers Reference Guide の併読がおすすめです。実際にコードを書きながら基本を押さえることで、より深く理解できます。さっそく Lisp ファイルを準備して、今日から Lisping を楽しみましょう!
1. プログラミングの基本原則
AutoLisp では、プログラムファイルの拡張子を .lsp
にしないと AutoCAD が読み込みません。
シンプルなテキストエディタ(Notepad など)でコードを書き、次の3つの流れを意識すると整理しやすくなります。
- OPERATOR:ユーザーからの入力を受け取る
- ARGUMENT:受け取った入力を加工・計算する
- COMMAND:加工した結果を使って AutoCAD コマンドを実行
さらに、プログラムを書く前に「英語で一連の動作を紙に書き出す(チャーティング)」と、後で振り返るときに大きな助けになります。
2. 変数とデータ型
AutoLisp の変数は英文字で始まれば自由な名前を付けられ、1つの変数に複数の値(リスト)を格納できます。
- 整数(integer):小数点なし、例
123
- 実数(real):小数点あり、例
12.34
- 文字列(string):最大 100 文字
- リスト(list):
(x y)
のように複数要素 - アトム(atom):要素数 1 のリストと同等
値の型は (type var)
で調べられます。
3. 入出力コマンド
ユーザーから値を取得する代表的なコマンドと簡単な使い方です。
getpoint
:画面上で点を取得getint
:整数を入力getreal
:実数を入力getstring
:文字列を入力getdist
:点間距離を取得getangle
:角度を取得(ラジアン)getkword
:キーワード入力getvar
:AutoCAD システム変数の値を取得
たとえば、ユーザーに点を選んでもらうにはこんなコードを使います:
(setq pt (getpoint "\nポイントを選択してください: "))
4. 代入と出力
AutoLisp での代入は (setq)
が基本です。=
は比較演算子なので注意しましょう。
- setq:変数に値をセット
- prompt:コマンドラインにメッセージ表示
- terpri:改行
- princ/print:式の評価結果を表示
例:ユーザーに入力を促してそのまま出力する
(setq age (getint "\n年齢を入力してください: "))
(princ (strcat "あなたの年齢は " (itoa age) " 歳です。"))
5. リスト操作と関数
リストを分解・再構築する主な関数です。
car
:リストの最初の要素cdr
:リストの 2 枚目以降の要素cadr
:2 番目の要素cons
:要素を先頭に付けて新リスト生成append
:複数リストを結合length
:要素数member
:要素検索assoc
:アソシアティブリスト検索
角度の変換や文字列操作関数も豊富に用意されています。
6. エンティティ操作
AutoCAD の図形は「エンティティ」としてデータベースに格納され、以下の手順で読み書きします。
ssget
/entsel
で選択ssname
/entget
でエンティティリスト取得assoc
で属性(レイヤー、座標など)を抽出subst
やentmod
で変更を反映
コード例:選択したオブジェクトのレイヤーを一括変更
(defun c:ChangeLayer (/ ss tgtList tgtLayer idx)
(setq ss (ssget "\n変更するオブジェクトを選択: "))
(setq tgtList (entsel "\nレイヤーを参照するオブジェクトを選択: "))
(setq tgtLayer (cdr (assoc 8 (entget (car tgtList)))))
(repeat (setq idx (sslength ss))
(setq ent (entget (ssname ss (setq idx (1- idx)))))
(entmod (subst (cons 8 tgtLayer) (assoc 8 ent) ent))
)
(princ)
)
7. 実践サンプル:四角形を描く
最初の一歩として、マウスで二点指定して四角形を描くプログラムを紹介します。
(defun c:Rect (/ p1 p2 p3 p4)
(setq p1 (getpoint "\n左下点: ")
p3 (getcorner "\n右上点: "))
(setq p2 (list (car p1) (cadr p3))
p4 (list (car p3) (cadr p1)))
(command "LINE" p1 p2 p3 p4 "C")
(princ)
)
この程度のコードなら十数行で仕上がり、すぐにカスタマイズできるのが AutoLisp の魅力です。
まとめと次のステップ
このチュートリアルでは、AutoLisp の基礎概念から入出力、リスト操作、エンティティ制御、実践サンプルまでを一気に学びました。次は以下のトピックに挑戦してみましょう!
- ファイル操作(
open
/read-line
/write-line
) - エラー処理とデバッグ(
vl-file-*
関数) - ダイアログボックス/パレットの作成
- Visual LISP API を使った複雑なデータ操作
これらをマスターすれば、AutoCAD 上でほぼ何でも自動化・拡張できるようになります。Happy Lisping!
コメント