【AutoCAD徹底研究】AutoLISPなどによる設計作業効率化・自動化

AutoCADの日々の設計作業をもっとスマートに、もっと効率的に。AutoLISPを使用して日々の業務の効率化を考えていきましょう。

AutoLISPコードの書き方・関数【defun】

この記事ではAutoLISPをマスターする第一歩として基本的な書き方を学んでいきましょう。

目次

基本的な書き方

(defun C:hello ()
  (alert "Hello World") ;「Hello World」とダイアログボックスで表示
  (princ)
)

AutoLISPの作成と読み込みの記事で、ダイアログボックスに「Hello World」と表示するコマンドを作成しました。説明の便宜上少し改変しています。

・関数とは

関数とは、プログラミングにおいて、特定の処理を行い結果を返すコードのまとまりです。AutoLISPにおいても様々な関数が用意されており、これらを使用することで自分の実行したい処理を行うプログラムを作成します。

上の例では"defun C"や"alert"、"princ"が関数に当たります。"hello"はユーザーが名前をつけるコマンド名です。これは下記の「defunについて」のトピックで説明します。

AutoLISPの基本的な構文は (関数 引数) の形になります。コードを囲む ( ) は1セットになりますので、対応する閉じカッコが書かれていないと読み込んだ時点でエラーになってしまいます。

特にコードが複雑になってきたときには ( ) の閉じカッコを忘れないように注意しましょう!

引数とは、関数に渡される値や変数で、関数の動作を制御するために使用されます。AutoLISPの関数では、引数は数値、文字列、リストなど、さまざまなデータ型を取ることができます。引数は、関数が特定のタスクを実行する際に必要な情報を提供します。

・コメントの追加

AutoLISPではセミコロン(;)を使ってコメント・注釈を追加できます。

(alert "Hello World") ;「Hello World」とダイアログボックスで表示 というように注釈を記載します。 セミコロン以降のテキストは全てがコメントとして扱われ、コードに影響しません。

コードが長くなったときに該当部分が何について記載しているか一目でわかるように、こまめにコメントをつけておきましょう。

・文末の(princ)

princはコマンドラインに文字列や値を表示する関数です。この関数を使って、文字列や変数の値をユーザーに対して表示することができます。

引数なしで (princ) を使用すると、何も表示されずにプログラムが静かに終了します。しばしばこの (princ) をコードの文末に記載しますが、これはプログラムが終了したときにコマンドライン上に表示される不要な情報を抑制するためです。

 

関数【defun】について

(defun C:コマンド名 (引数1 引数2 ...)
)

defunは関数を定義するための関数です。この関数の変形であるdefun Cを使用して自作のコマンドを作成します。上記の形式でdefun Cを用いると、AutoCADコマンドラインにコマンド名を入力することでコマンドとして実行できます。

頻繁にコマンドラインから呼び出す場合は、入力しやすいように3文字以内でコマンド名を入力しておくのがオススメです。

・defunとdefun Cの違い

defun CはAutoCADのコマンドを定義するための関数です。defunの形で関数を定義してもコマンドラインから実行することができないため、AutoCADで実行するためのコマンドとして作成したいときはdefun Cの形でコマンド名を定義します。

自作コマンドを作る上で最も基本の形です!

・defunの引数リストについて

defunやdefun Cの後の関数名(コマンド名)の次に(引数1 引数2 ...)というように引数を記載する必要があります。引数を記載しない場合にも、空のカッコ () は記載しなければなりません。

この引数には通常変数名を記載します。引数に変数を記載することで、関数の中でその変数に格納された値にアクセスでき、コードの再利用性と柔軟性を高めることができます。

つまり、コードの中の、値だけを処理によって変更したい部分を変数として抽象化・代用可能にすることで何度もコードを書かずに似たような処理を実現することができます。変数については、変数についての記事で説明します。

 

まとめ

関数とは特定の処理を行い結果を示すコードのまとまりである

セミコロン(;)を使ってコード内にコメントを記入する

AutoCADの自作コマンドを作成する場合にはdefun  C関数を使用する