コマンドマクロとは?
AutoCADだけでなく、AutoCAD LTでも出来るカスタマイズの基本8として、コマンドマクロの作成をご説明します。
コマンドマクロはこれまでご説明したリボンやツールバー、ツールパレット等のユーザインタフェース(UI)上に定義して使用できます。AutoCAD LTでもできるカスタムコマンドの作成方法として古くから使われているものです。DIESEL式を使うとAutoCADの状態を判断して特定の処理を行う等の少々複雑な処理も実行できます。ネットサーフィンをすれば、カスタムコマンドのマクロの例が沢山見つけられると思いますので、基本を理解した上で是非活用して下さい。
尚、本ページで紹介するマクロはAutoCAD2020での動作を前提として記述しています。概ね他のバージョンでも動作すると思いますが、バージョンによる仕様の違いによって一部修正が必要となるものも存在するかもしれません。
マクロの基本
AutoCADはコマンドラインにコマンド名を入力してコマンドを実行します。また作図するためのオプションやパラメータもコマンドライン上で指定できるので、この一連の処理を文字列で記述すればマクロが作れるのです。
座標点0,0の位置に半径100ミリの円を作図するとき、コマンドラインでは以下の様な入力になります。
これをマクロにすると以下の様な表現になります。
^C^C_CIRCLE;0,0;100;
- 実際にマクロを定義する場合には、大文字と小文字の区別はありませんが、本トピックでは大文字で統一して表現します。
コマンドCIRCLE以外の記号の意味を説明します。
^C^C_CIRCLE;0,0;100;
[^C^C] は実行中のコマンドをキャンセルさせる為の記述です。
コマンド実行中にマクロが実行されると想定外の処理が行われてしまう為、先頭に記述します。^CでEscキーを一度押した事になるのですが、コマンドによっては1回のキャンセルで終了しない場合があるので、2回実行するように記述します。
^C^C_CIRCLE;0,0;100;
[_](アンダースコア) コマンド名の先頭に記述します。なくとも動作はしますが、
ここからコマンドが始まると分かるように記述しましょう。
^C^C_CIRCLE;0,0;100;
[;](セミコロン) Enterキーと同じ役割をします。
マクロで使う基本的な記号は以下となります。
記号 |
意味 |
^C |
Escキー1回実行 |
^C^C |
Escキー2回実行 |
_(アンダースコア) |
無くても実行可 |
.(ピリオド) |
無くても実行可 |
;(セミコロン) |
Enterキー1回実行 |
(スペース) |
Spaceキー1回実行 |
¥(エンサイン) |
対話での入力を待ちます |
*(アスタリスク) |
マクロを繰り返し実行する。終了するにはEscキーを押す |
マクロの実行
では実際にマクロを実行してみましょう。リボンやツールバー、もしくはツールパレット上に円コマンドを配置して、プロパティ編集にてコマンド文字列を上記マクロの様に記載します。本ページでは修正の楽なツールパレットを使って説明します。
リボンやツールバー、ツールパレットのカスタマイズ方法が不明な方は、以下のいずれかを参照下さい。
以下図は、ツールパレットに円コマンドを配置して、マクロを記述した例です。
実行すると、1クリックだけでコマンドラインから実行したときと同様に円が作図できる事が確認できます。
次にこのマクロをちょっと応用してみましょう。コマンド文字列部分を以下の様に変更して下さい。
*^C^C_CIRCLE;¥100;
実行するとどうなるでしょうか?
以下の図の様に半径100の円が連続で作図できるマクロが動作すると思います。
最初のマクロでは円の中心点を図面の原点0,0としてマクロで指定しましたが、¥を入れたことで入力待ちとなり、中心点を指示できるようになりました。また先頭に*を入れた事でEscキーが入力されるまで繰り返し実行できます。
座標の入力
最初のマクロでは、円の中心の座標値をX,Yの形式(0,0)で入力しました。絶対座標で入力する場合には前述の例の様に座標値をそのまま記述すれば良いのですが、相対座標を使用したい場合もあります。相対座標を使用する場合には、@を利用します。
ツールパレット上に長方形(Rectang)のコマンドを配置して、以下の様に定義してみましょう。
*^C^C_RECTANG;¥@100,100;
実行するとどうなったでしょうか?
1点目で入力した点から相対座標100,100の位置が2点目として指定され、100×100の長方形が連続で作成できるになった事が確認できると思います。
パラメータやオプション入力の多いコマンドに有効
私は良くポリライン編集(PEDIT)のコマンドを使って線分等をポリラインに変更します。
しかし、ポリラインの結合を行うには指定するパラメータが非常に多く面倒です。
コマンドから実行した場合は以下の様なコマンド入力となります。
コマンドマクロで定義した場合には以下の様な記述となり、コマンド実行後にはオブジェクトだけ選択すれば、残りのパラメータはマクロが指定してくれるので実行スピードが大幅に向上します。
^C^C_PEDIT;M;¥;Y;J;J;B;0.001;;
単一オブジェクト選択モードを使用する
コマンドの最後に“SINGLE”を付けると、単一オブジェクトモードとして実行されます。
ツールパレット上に削除コマンドを配置してコマンド部分に以下を定義するとどの様に動作するでしょうか? 是非、通常の削除コマンドとの動作の違いを確認してみて下さい。
*^C^C_ERASE;SINGLE;
複数のコマンドを組み合わせる
繰り返し実行しなければならない事を自動化する。これがコマンドのカスタマイズとして一番実施したい事では無いでしょうか?
こちらはマクロとしては定番の、移動させてから回転するコマンドです。
^C^C_SELECT;¥_MOVE;P;;¥¥_ROTATE;P;;@;¥
移動(MOVE)コマンドと回転(ROTATE)コマンドで使用するオブジェクトを同じものを指定する為に、最初に選択(SELECT)コマンドを実行し、複写コマンドと回転コマンドでは、直前の選択セットの値を使用する為に、Pオプション(直前の選択セット)を使って図形を選択しています。
まとめ
コマンドマクロはリボンやツールバー、ツールパレット等に記述して実行する。
動作を見ながら修正するので、ツールパレットを使うと修正作業が楽にできる。
コマンドマクロはコマンドの操作の流れを順に定義すれば良い。
@を使用して相対座標を指定することも可能。
入力パラメータが多いコマンドに使うと便利。
複数のコマンドを実行するときには、SELECTコマンドのPオプション(直前の選択セット)を使用して対象オブジェクトを指定する。
著者について
Twitterでフォローする ウェブサイトを見る このライターによる他のコンテンツ