AutoLISP関数 関数解説

【作図を自動化】コマンドを実行するAutoLISP関数「command」を解説

command_eyecatch
  • AutoCADコマンドを自動で実行したい
  • 作図を楽にしたい

コマンドはAutoCADユーザーの作図に欠かせないツールです。しかし、手動でコマンドを実行するのはめんどくさいと感じる方も多いはず。コマンドのモードを入力したり、座標を選択したり、1つ1つの作業は小さくても積み重なれば大きなストレスになります。

私はAutoLISPを独学し、業務の自動化・効率化に役立つプログラムを5年以上作成しています。数行で書けるような簡単なプログラムから、1000行以上の少し複雑なプログラムまで様々なツールを作成してきました。

そもそもAutoLISPってなに?という方はこちらの記事をご覧ください。
>>AutoCADユーザー必見!【AutoLISPを覚えるべきメリット5選】デメリットも解説

当記事では、コマンドを実行するAutoLISP関数「command」の使い方を解説します。最後まで読んでいただければ、普段使っているAutoCADコマンドを自動で実行できるようになります。

commandを活用して作図を楽にしましょう。

commandの引数として、必要な値を順番に与えるとコマンドを自動で実行できます。 「pause」を与えた場合は一時的にユーザーの入力待ちになります。

コマンドの実行中に表示されるダイアログを非表示にしたいなら、コマンド名の先頭に「-」を付けてください。

commandはAutoCADコマンドを自動で実行できる

command_image1

commandとはAutoCADコマンドを呼び出して実行できるAutoLISP関数です。

実行に必要な文字列や座標を引数として順番に与えることで、コマンドを自動で実行できます。ユーザーがdefunで定義したコマンドは、commandで実行できないのでご注意ください。

defunとはユーザー関数を定義する関数です。defunで定義した関数はコマンドのように扱うこともできます。defunの詳細はこちらの記事をご覧ください。
>>プログラミングの必需品!AutoLISPの関数ついて解説

commandはAutoCADユーザーの作業を楽にしてくれる頼もしい存在です。

はこ
はこ

AutoLISP初心者には、ぜひ覚えていただきたい関数の1つです。

commandの構文 / 引数 / 返り値

commandの構文と引数、返り値は次のとおりです。

【構文】

(command コマンド名 引数・・・)
(command-s コマンド名 引数・・・)

【引数】

引数内容
コマンド名実行したいコマンド名の文字列
引数コマンドの実行に必要な値
(文字列や数値、座標など)

【返り値】

返り値内容
nilcommandは必ずnilを返す

command-sはcommandと基本的には同じ関数です。両者の違いについては公式のヘルプをご覧ください。
>>ヘルプ: command-s (AutoLISP) - Autodesk

はこ
はこ

分かりやすさを重視するため、当記事ではcommandを使用します。

使用例① 「circle」で円を作図する

comanndで「circle」を実行し、中心(5,10)で直径15の円を作成する例をご紹介します。

「circle」とは円を作図できるAutoCADコマンド

「circle」とは名前のとおり、円を作図するAutoCADコマンドのこと。下図のように、通常はリボン上の「円」をクリックするか、コマンドラインに「circle」と入力すると実行できます。

command_image1-1
command_image1-2

commandで「circle」を実行する

commandで「circle」を実行するプログラムは次のとおりです。

(command "circle" (list 5 10) "D" 15)

実行される動作は以下の4つ。

  1. コマンドラインに「circle」と入力
  2. 中心座標(5,10)を入力
  3. 直径を意味する「D」を入力
  4. 直径の15を入力

AutoLISPでは座標を表現するときにlistという関数を使用します。(list 5 10)は(5,10)の座標を表していると思ってください。

listの構文や使用例について知りたい方はこちらの記事が参考になります。
>>【初心者必読】リストを作成するAutoLISP関数3選|使用例も解説

上記のプログラムをコマンドラインに張り付けてEnterを押すと、図面上に次のような円が作成されます。

command_image1-3

「pause」を与えると入力待ち状態にできる

commandは「pause」という引数を与えると、処理が一時的に止まってユーザーの入力待ち状態にできます。中心座標を入力するタイミングで入力待ちにしたい場合は、上記のプログラムを以下のように書き換えてください。

(command "circle" pause "D" 15)
はこ
はこ

「pause」は文字列ではないため、両側に「"」を付けません。

使用例② 「-layer」で画層を作成する

commandで「-layer」を実行し、"レイヤ1"という画層を作成する例をご紹介します。

コマンド名の先頭に「-(ハイフン)」を付けているのはダイアログを非表示にするためです詳細については後述するのでお楽しみに。

「layer」は「画層プロパティ管理」を表示できる

「layer」とは「画層プロパティ管理」のダイアログを表示するAutoCADコマンドのこと。下図の「画層プロパティ管理」では、画層の作成や現在層の変更など、画層に関する様々な処理を実行できます。

command_image1-10

「画層プロパティ管理」のダイアログは、リボン上の「画層プロパティ管理」をクリックするか、コマンドラインに「layer」と入力することで表示できます。

command_image1-8
command_image1-9

commandで「-layer」を実行する

commandで「-layer」を実行するプログラムは次のとおり。

(command "-layer" "M" "レイヤ1" "")

前述した「circle」の例と同様で、「-layer」の実行に必要な値を順番に並べています。実行される動作は次の4つ。

  1. コマンドラインに「-layer」と入力
  2. 画層の新規作成を意味する「M」を入力
  3. 作成する画層の名前を入力
  4. Enterを押してコマンドを終了する

プログラムを実行している途中でダイアログが表示されると、その時点でプログラムは停止します。しかし、コマンド名の先頭に「-(ハイフン)」を付けるとイアログを非表示にできるため、プログラムは停止しません。

「-layer」と記述することで「画僧プロパティ管理」のダイアログは非表示になるので、プログラムの停止を防ぐことができます。

プログラムの最後に記述している「""」はEnterの入力を表しています。「""」を記述しない場合「-layer」は終了せずに入力待ち状態のままで、次の処理に進むことができません。

はこ
はこ

「""」は他のコマンドでも使用できるので、覚えておきましょう。

プログラムをコマンドラインに張り付けてEnterを押すと、下図のように"レイヤ1"という画層が作成されます。

command_image1-4

ダイアログを非表示にできるコマンド一覧

ダイアログを非表示にできるコマンドは「-layer」以外にもいくつか存在します。一部を以下の表にまとめているので参考にしてください。

コマンド名非表示にできるダイアログ
-hatchハッチング(リボン上のパネル)
-insertブロック定義
-viewビュー管理
-color色選択
-linetype線種管理
-lweight線の太さを設定
-style文字スタイル管理
-dimstyle寸法スタイル管理

使用例③ 「pline」で三角形を作成する

commandで「pline」を実行し、底辺が20、高さが10の閉じた三角形をポリラインで作成する例をご紹介します。

「pline」とはポリラインを作図できるAutoCADコマンド

「pline」とはポリラインを作成するAutoCADコマンドのこと。リボン上の「ポリライン」をクリックするか、コマンドラインに「pline」と入力すると実行できます。

command_image1-6
command_image1-7

commandで「pline」を実行する

commandで「pline」を実行するプログラムは次のとおり。

(setq pt1 (list 10 0))
(setq pt2 (list -10 0))
(setq pt3 (list 0 10))
(command "pline" pt1 pt2 pt3 "C")

上記のプログラムが実行する動作は次の5つです。

  1. 変数pt1~pt3に三角形の頂点座標を格納
  2. コマンドラインに「pline」と入力
  3. pt1からpr2にポリラインを作成
  4. pt2からpt3にポリラインを作成
  5. 閉じるを意味する「C」を入力して、pt1とpt3で図形を閉じる

コマンドラインに1行ずつ張り付けて実行していくと、図面上には以下のような三角形が作成されます。

command_image1-5

与えられる引数が1つずつでも処理を継続できる

commandは与えられる引数が1つずつでも、処理を続けることができます。1つずつ順番に引数を与えるように、上記のプログラムを書き換えると次のようになります。

(setq pt1 (list 10 0)) 
(setq pt2 (list -10 0)) 
(setq pt3 (list 0 10))
(setq lst (list "pline" pt1 pt2 pt3 "C"))
(setq n 0)
(repeat (length lst)
  (command (nth n lst))
  (setq n (1+ n))
)

変数lstの中身を変えることで、図形の頂点を増やしたり、終点と始点を閉じないでコマンドを終了させたりすることも。プログラム中でcommandの動作を自由に変更できる点は大きなメリットです。

repeatは指定した回数だけ、同じ処理を繰り返すAutoLISP関数です。repeatの詳細はこちらの記事をご覧ください。
>>【AutoLISP】指定の回数だけ繰り返す関数「repeat」

ちなみに、nthはリストからn番目の要素を取得できます。nthについてはこちらの記事が参考になります。
>>【AutoLISP】リストの要素を取得する関数「nth」「last」「assoc」

はこ
はこ

適切なタイミングで必要な引数を与えないと、コマンドは正しく動作しないので注意してください。

コマンドを自動化してAutoCADの作図を楽にしよう

command_image-last

今回ご紹介したcommandの内容を以下にまとめます。

  • commandとはAutoCADコマンドを呼び出して実行できるAutoLISP関数
  • 必要な値を引数として与えることにより、自動でコマンドを実行できる
  • 「pause」を与えたタイミングで入力待ちになる
  • コマンド名の先頭に「-」をつけるとダイアログを非表示にできる
  • 与えられる引数が1つずつでも処理を継続できる

commandは非常に便利で汎用性の高い関数です。上手に活用して作業の効率化に役立ててください。

AutoLISPの基礎を書籍で学びたい方には「AutoCAD 自動化攻略読本」がおすすめ。初心者向けに解説されており、AutoLISP以外の自動化方法も学べるお得な一冊。とにかくAutoCADで楽をしたい方はぜひご覧ください。

>>【AutoLISPの教科書】AutoCAD自動化攻略読本のメリット5選|おすすめ活用法も解説

AutoCADが楽になるプログラムを作成します AutoCADを効率化して面倒な作業から解放されましょう!

-AutoLISP関数, 関数解説