【AutoCAD LISP】LISP の実行方法

2021年9月9日

作業中のエンジニア

LISP の勉強を始めたいんだけど…

そもそも作成した LISP ってどうやったら実行できるの?

こんにちは、メモだよ!!管理人です。

今回は、そんなあなたに、AutoCAD で LISP を実行する方法を紹介します。

 

せっかく AutoLISP を勉強しようと思って、コードを書いてみても実行方法がわからなかったら困っちゃいますよね。😅
そこで、作成した AutoLISP をどうやって実行できるのかを紹介していこうと思います。

AutoCAD で AutoLISP を実行する方法

LISP を実行するには、いくつかの方法があります。

 

コマンド ラインに貼り付ける

一番簡単な方法はこれです。

例えば、以下のコードを書いたとします。
プログラムを勉強するときに最初におこなうおなじみの Hello World!! って文字を表示するものです。

(alert "\nHello World!!")

これを実行したいときは、このままコマンド ラインにコピペして Enter キーを押します。

コマンド ラインにコピペして Enter キーを押す

すると、コードが実行されて「Hello World」と表示されます。

警告ダイアログ

簡単でしょ🤗

複数行あるときは、1 行づつコピペして Enter キーを押していけば OK です。
 

.lsp ファイルをドラッグ&ドロップで作図画面に落とす

コマンド ラインにコピペで貼り付ける方法は簡単ですが、行数が多くなってくると大変ですよね。
例えば、以下のようなコードを実行してみたいときには、12 回コピペをしなければいけません。

(setq v_ctr (getvar "VIEWCTR"))
(setq v_size (getvar "VIEWSIZE"))
(setq s_size (getvar "SCREENSIZE"))
(setq x (/ (* v_size (car s_size)) (cadr s_size)))
(setq x_min (- (car v_ctr) (/ x 2)))
(setq x_max (+ (car v_ctr) (/ x 2)))
(setq y_min (- (cadr v_ctr) (/ v_size 2)))
(setq y_max (+ (cadr v_ctr) (/ v_size 2)))
(princ (strcat "\n左下点 : X = " (rtos x_min 2 16) " Y = " (rtos y_min 2 16)))
(princ (strcat "\n右上点 : X = " (rtos x_max 2 16) " Y = " (rtos y_max 2 16)))
(princ (strcat "\nX = " (rtos (- x_max x_min) 2 16)))
(princ (strcat "\nY = " (rtos (- y_max y_min) 2 16)))

もっと行数が多くなったときは、いやになっちゃいますよね。😣

そこで、書いたコードを一度に実行する方法があります。
それは、以下の手順でコードを .lsp という拡張子のファイルに保存して、ドラッグ&ドロップで実行する方法です。

  1. メモ帳などの任意のエディタを起動します。
  2. AutoLISP のコードを貼り付けます。
  3. 拡張子を .lsp として名前を付けて保存します。(例:test.lsp)
  4. エクスプローラーで保存したファイルをドラッグして、AutoCAD の作図画面にドロップします。

すると、ドロップされた AutoLISP がロードされて実行されます。🤗

.lsp をドラッグ&ドロップ

 

APPLOAD コマンドでロードする

.lsp をドラッグ&ドロップする以外に、APPLOAD コマンドでロードすることもできます。

ロードとは?

ロードというのは、AutoCAD に AutoLISP のファイルを読み込むということです。
AutoLISP は AutoCAD にロードすることで実行されます。

手順は、APPLOAD コマンドを実行して、ロードしたいファイルを指定するだけです。

  1. コマンド ラインに APPLOAD と入力します。
  2. ロードしたいファイルを選択して[ロード]をクリックします。
LISP をロード。

 

図面を開いたときに自動的にロードする

APPLOAD コマンドを使うと、図面を開いたときに自動的指定したプログラムをロードするということもできます。

どんなときに便利かというと、AutoLISP でコマンドを作成したときなどです。
例えば、以下の command-test.lsp というファイルを作成したとします。

(defun C:CommandTest ()
  (alert "test")
)

このコードは、CommandTest というコマンドを作成しています。
CommandTest コマンドを実行すると、「test」と書かれた警告ボックスが表示さるというものです。

AutoLISP は図面ごとにロードされます。
そのため、ある図面でロードして、作成したコマンドが使えるようになっても、他の図面では使えません。
他の図面でもコマンドを使用使用したいときは、他の図面でもロードする必要があります。

また、ロードした図面でも一度閉じてしまったらロード解除されるので、次回その図面を開いたときに作成したコマンドは使えません。
再度使えるようにするには、もう一度ロードする必要があります。

例えば、この CommanTest というコマンドをいつでも使えるようにしたいとします。
いままでのやり方だと、使いたいときに毎回ロードしなくてはなりません。
面倒くさいですよね。😞

そこで、APPLOAD コマンドで「スタートアップ登録」というのでプログラムを登録しておけば、図面を開いたときに自動的にロードしてくれます。

  1. APPLOAD コマンドを実行します。
  2. 「スタートアップ登録」の[内容]をクリックします。
    「スタートアップ登録」の[内容]をクリック
     
  3. [追加]をクリックします。
    [追加]をクリック
     
  4. 自動的にロードしたいファイルを選択して、[開く]をクリックします。
    [開く]をクリック
     
  5. [閉じる]を 2 回クリックして、コマンドを完了します。

これで、これから開く図面で指定した LISP が自動的に実行されて、CommandTest コマンドを使用できるようになりました。🤗

 

デバッグ時にロードする

プログラムを作成すれば、必ず間違いがあって思ったように動作しないことがあります。
そのときに、プログラムのどこに問題があるのか見つけてそれを修正しますが、そのことをデバッグと言います。

修正してちゃんと動作するか何度も確認する必要があるので、修正するごとにそれをロードする必要があります。
何度もロードすることになるので、ドラッグ&ドロップでロードするのが簡単です。

また、以下の記事で紹介したように、Visual Studio Code を使用してデバッグする方法があるので、これからどんどんプログラムを作っていこうということであれば、この方法でデバッグするのがおすすめです。😄

参考【AutoCAD】超便利!!AutoLISP で Visual Studio Code を使用する

AutoCAD のカスタマイズで使用する AutoLISP で、AutoCAD 2021 から Visual Studio Code を使用できるようになったようです。それを実際に試してみた内容を紹介します。

続きを見る

-API
-