LISP カスタマイズにチャレンジ #2:Visual LISP for AutoCADを使ってみよう

初心者向けのLISP解説、今回はVisual LISP for AutoCADを使ってみましょう。

 

最初の一歩を始めましょう

まずは、準備から。作成したLISPを保存するためのフォルダを用意します。今回はドキュメントの中にTESTというフォルダを作りましょう。そして、ヘルプを確認しておきましょう。ヘルプのトップ画面にある開発者用ドキュメントをクリックします。この中にある、AutoLISP/DCLのリファレンスガイドにLISP関数のリファレンスがあります。

では、AutoCADを起動して、新規図面を開きます。管理タブのアプリケーションタブにある、Visual LISP エディタをクリックして、Visual LISP for AutoCAD(以下VLISPエディタと表記)を開きます。

それでは、ファイル→ファイルを新規作成で、新規ファイルを作成しましょう。もしくはアイコンから操作も可能です。

 

 

では、以下のコードをコピーして、<Untitled-0>というタイトルのウインドウに、貼り付けてください。

(defun hellow()
  (princ "Hello World!")
)

貼り付けると、VLISPエディタ上で文字の色が変わります。

 

 

 

・赤→関数のまとまりを示す() このまとまりを式と呼びます。

・青→LISP関数(ここではdefun、princ)

・紫→文字列(ここでは"Hello World!")

では、このコマンドを実行してみましょう。ツール→エディタ内のテキストをロードをクリックします。もし、ツールの中にこのコマンドが見つからない場合は、<Untitled-0>というウインドウをアクティブにしてやってみてください。

このときに、Visual LISP Consoleというウインドウに、

_$
; エラー: 入力のリストの形式に誤りがあります
_$

と表示されたら、コードが正しく貼り付けられていません。再度コピーして貼り付けてください。

次にAutoCADの新規図面をアクティブにして、コマンドラインに(hellow)と入力してください。必ず半角カッコに入れて入力してください。コマンドラインに

Hello World!"Hello World!"

と表示されましたか?表示されたのであれば、正しくLISPが実行できました。

 

ヘルプを使おう

先ほどのコードの内容を確認していきます。まず、ヘルプでdefunを調べてみましょう。AutoLISPの関数リファレンスを開き、アルファベット順一覧のD→defunの文字をクリックすると、「関数を定義します。」と説明されています。defunで定義した関数=LISPコマンドです。そして、下記のような記述があります。

(defun sym ([arguments] [/ variables ...]) expr ...)

このうち、斜体文字で書かれているものは、引数と呼ばれるもので、この関数を使用するために必要なものです。ただし、[ ]で囲まれているものは、省略可能です。

例に挙げたコードを当てはめると、

sym:関数名→hellow

arguments:defunで定義する関数に必要な引数→引数なし

variables:関数内で使用する変数(ローカル変数)→変数なし

となります。ただし、内側にある( )は[ ]に囲まれていないので、引数・ローカル変数を定義しなくても、必要です。

LISPで作ったコマンドは、コマンドラインでの入力に( )が必要なのですが、関数名の定義にc:を付加して記述すると( )なしで実行可能となります。

1行目の(defun hellow () を (defun c: hellow () と変更すると、コマンドラインにhellowと入力して実行することができます。コマンド名の入力に大文字小文字は関係ありません。

なお、関数名を付けるときは、既存のコマンドやシステム変数等と被らないように注意してください。コマンド名には-(ハイフン)や_(アンダーバー)なども使用できます。

さらにヘルプを見ていくと、戻り値という項目があり、「最後に評価された式の結果」という、分かるような分からないような記述があります。実はこれが、コマンドラインにHello World!"Hello World!"と表示された理由です。戻り値が表示されることを「値を返す」とも言います。

このコードで使われているもう一つの関数princは、コマンドラインに式を表示する関数です。2つのHello World!のうち、最初はprinc関数で表示されたもの、そして、"Hello World!"はdefun関数の「最後に評価された式の結果」=(princ "Hello World!")の実行結果となります。

では、先ほどのコードを下記のように変更してみましょう。

(defun c: hellow()
  (princ "Hello World!")
  (princ)
)

もう一度、エディタ内のテキストをロードして、コマンドを実行しましょう。c:を付けたので、コマンドラインにはhellowと入力します。今度はHello World!のみが表示されましたか?defun関数で最後に評価されるのは(princ)となり、princ関数は引数がない場合には式の結果が空文字になります。なので、コマンドの実行結果がHello World!となりました。defun関数を使用する場合は、常に最後に(princ)を付け加える、と覚えてください。

最後に作ったLISPを保存しましょう。ファイルメニュー→名前を付けて保存を選び、最初に作ったTESTフォルダにhellow.lspという名前で保存します。ファイル名とコマンド名は関係ないので、分かりやすい名前を付けておくといいでしょう。

著者について

AUG-JP (ユーザー会)

AUG-JPはAutodesk製品のユーザーで構成された独立したコミュニティです。 ユーザ同士の助け合いの場として、ウェブサイト、コミュニティ(SNS)などを運営しています。 多くの企業様にご協力を頂きながら全国各地でユーザ参加型の「学びと交流」を目的としたイベント 「AUG-JP WorkShop」を開催したり勉強会をサポートしています。

Twitterでフォローする ウェブサイトを見る このライターによる他のコンテンツ
前の記事
カスタマイズの基本 3:ツールバー
カスタマイズの基本 3:ツールバー

ツールバーのカスタマイズについてご説明します。作図スペースを犠牲にせず利用頻度の高いコマンドを配置させたい場合にはツールバーが使い勝手が便利です。

次の記事
カスタマイズの基本 2:リボン(後編)
カスタマイズの基本 2:リボン(後編)

リボンパネルへのコマンドの追加やドロップダウン、サブパネル、折りたたみパネル等のもう少し詳しいカスタマイズを説明したいと思います。