残業が多いこの業界。最近ブログを書く時間を確保するため、少しでも早く帰るための工夫をしたいと考えるようになりました。
仕事では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の画面に直接ドロップすることで読み込みできます。