AutoLISP CAD

AutoLISPで作図効率化を目指す

残業が多いこの業界。最近ブログを書く時間を確保するため、少しでも早く帰るための工夫をしたいと考えるようになりました。

仕事ではAutoCADを使うことが多いです。
作図を自動化できれば多くの時間を削減できるため、AutoLISPを作ってみることにしました。

AutoLISPとは?

AutoLISPについてまず参考になるのは、本家オートデスク社のサイトです。

簡単にいうと、AutoLISPはLISPというプログラミング言語をベースに、AutoCAD向けにアレンジされたものです。
AutoCAD LTでは使うことができません。IJCADやDraftSightなどの互換ソフトでは使用可能です。

既存の機能を組み合わせて新たなコマンドを作ることができます。

似たものとしてマクロがありますが、こちらはアイコンを作成して機能を割り当てるものです。
AutoLISPはキーボードからの入力によって操作することができるため、ショートカット派にはありがたいです。

またAutoCADに付属しているVisual LISP エディタを使えばAutoCADを開いた状態で開発し、その場で実行することもできます。

Visual LISP エディタを起動してみる

Visual LISP エディタはAutoCADのツールバーから入ります。
新規図面を作成したら、「管理」タブの「アプリケーション」内に「Visual LISP エディタ」のボタンがあります。

AutoCAD2021からは、プログラミングで広く使われるコードエディターであるVisual Stadio Codeによる開発もできるようになりました。
初回の起動ではどちらのエディタを使用するか選択画面が出ます。
慣れないうちは「AutoCAD Visual LISP」を選択するのがよさそうです。

システム変数「LISPSYS」で後から切り替えることもできますよ!
Visual Stadio CodeはWeb制作で使うことがありますが、こちらも使いやすいソフトだと思います。

起動して「ファイル」から「ファイルを新規作成」をクリックした状態がこちらです。

初期設定では日本語対応しておらず文字化けしてしまうので、日本語に対応しているフォントに切り替えます。
「ツール」から「ウィンドウの属性」→「フォント」を選択します。

「MSゴシック」「MS明朝」などの日本語フォントに変更すれば、準備完了です。

LISPを作ってみた

習うより慣れろということで、ひとつLISPを作ってみます。以下は基本的なコードです。
このような文字列をの上の空欄(<Untitled-0>という名前のほう)に書いていきます。

(defun c:●()

	(命令を入れる)

	(princ)

)


まずdefun( )で関数を定義します。この( )のなかに内容を入れていきます。

c:●()の部分は「●というコマンドを使う」という意味です。この括弧にはなにも入れません。

例えば、AutoCAD上で円を作成したいときコマンドラインにキーボードで「c」と打てばcircleコマンドが実行できます。
この「c」に該当する名前を決めて●に入力します。

その下に命令を入れていき、最後は(princ)で終わります。
これはなくても機能するのですが、余計なコードをコマンドラインに表示させないためのものです。
(princ)は本来、引数を指定して文字列を表示させる関数ですが、引数がないと戻り値を返しません。
この特徴を使って、コードをきれいに終わらせる役割をしています。


私がはじめて作ったLISPをここで紹介します。
簡単すぎて恥ずかしいですが、、

仕事で用紙サイズの長方形をよく作るので、寸法を思い出さなくてもぱっと作図できるようにしたものです。
以下は一番使うA3サイズ(420mm×297mm)の長方形を作るLISPです。

(defun c:A3()

	(setq p1 (list 0 0))

	(setq p2 (list 420 297))

	(command "rectang" p1 p2)

	(princ)

)

コードをひとつひとつ見てみましょう。

(defun c:A3())でコマンドラインに「A3」と打つと実行できる関数を定義しました。

次に、(setq p1 (list 0 0))の部分です。これは「0,0を一点目として指示し、p1と名付ける」という意味です。
このようにsetq関数は情報の入れ物をつくることができます。これをプログラミングの世界では変数とも呼びます。

同様に、(setq p2 (list 420 297))は「420,297を二点目として指示し、p2と名付ける」です。
ここで用紙サイズが出てきました。横(X座標)に420mm、縦(Y座標)に297mmの位置を指示しています。

そして(command "rectang" p1 p2) の部分。
ここでp1、p2の二点を使って長方形を書いてね、というコマンドを作っています。
「command」は実行の関数、 "rectang"は長方形を作図という意味です。

最後に(princ)で終了します。

作成したLISPを実行してみた

作成したコードをAutoCAD Visual LISPから実行してみます。

コードを記述したら、「ツール」から「エディタ内のテキストをロード」を選択します。

_$
_$

; 1 フォーム (# ロード中…"> からロード)
_$

という文字列が下のVisual LISP Consoleに表示されたら、AutoCADにコマンドとして読み込みが成功しています。

コマンドラインに「A3」と入力してみましょう。大文字でも小文字でも構いません。

横420、縦297の長方形が、原点0,0を基点に作成されました!

繰り返し使いたい場合や作業の途中には、AutoCAD Visual LISPから保存することができます。

他のソフトと同様、「ファイル」から「名前をつけて保存」で任意の場所に保存します。
次回からロードするときは、CADの画面に直接ドロップすることで読み込みできます。

-AutoLISP, CAD