AutoLisp クイックスタート:今すぐ Lisping を始めよう!

Autolisp

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

  1. ssgetentsel で選択
  2. ssnameentget でエンティティリスト取得
  3. assoc で属性(レイヤー、座標など)を抽出
  4. substentmod で変更を反映

コード例:選択したオブジェクトのレイヤーを一括変更

(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 の基礎概念から入出力、リスト操作、エンティティ制御、実践サンプルまでを一気に学びました。次は以下のトピックに挑戦してみましょう!

  • ファイル操作(openread-linewrite-line
  • エラー処理とデバッグ(vl-file-* 関数)
  • ダイアログボックス/パレットの作成
  • Visual LISP API を使った複雑なデータ操作

これらをマスターすれば、AutoCAD 上でほぼ何でも自動化・拡張できるようになります。Happy Lisping!

コメント

タイトルとURLをコピーしました