+CADLabo.comCAD / LISP / AUTOMATION
AutoLISP初心者講座

AutoLISPの基礎早見表|入力・計算・図形操作

AutoLISPの基本・図形操作のTips一覧
要点

ファイルの保存、変数、入力、リスト、図形操作をまとめて振り返るページです。各テーマの最小例を確認し、詳しい解説へ進めます。

始める前に

先に確認すると読み進めやすい記事:

確認の手順

  1. .lspファイルの保存と読み込みの手順を確認します。
  2. 変数・数値・文字列の違いを短い式で試します。
  3. 入力と出力、リスト操作の例を順に読みます。
  4. 練習図面で四角形の例を確認し、不明な関数は個別の解説で調べます。

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 の図形は「エンティティ」としてデータベースに格納され、以下の手順で読み書きします。

  1. ssget/entsel で選択
  2. ssname/entget でエンティティリスト取得
  3. assoc で属性(レイヤー、座標など)を抽出
  4. 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 を使った複雑なデータ操作

結果の確認

分からない処理をまとめて実行せず、入力・計算・出力に分けて結果を確認します。最初から学ぶ場合は5つの入門レッスンを順に読んでください。

参照資料

対象環境・動作確認

AutoLISP対応環境(関数・OSごとの対応は要確認)。内容更新:2026年10月5日。掲載コードのCAD実機検証は未実施です。図形を変更する例は、コピーした図面で結果を確認してください。