概要 - AutoCAD コマンドを再定義する(AutoLISP)

AutoLISP を使用して、AutoCAD の組み込みコマンドの機能を定義解除したり、置き換えることができます。

UNDEFINE[コマンド定義解除]コマンドを使用して AutoCAD の組み込みコマンドを無効にすることができ、次に AutoLISP を使用して、それを defun 関数を使用して定義した同じ名前のユーザ定義コマンドに置き換えることができます。コマンドは、現在の編集セッションでのみ定義解除された状態が保持されます。コマンドの組み込み定義は、REDEFINE[再定義]コマンドを使用して復元することができます。

定義解除された後も、前にピリオド(.)を付けてコマンド名を指定することにより、そのコマンドの組み込み定義を実行することができます。たとえば、QUIT[AutoCAD の終了]が定義解除されていても、AutoCAD のコマンド プロンプトに対して .quit と入力することにより、本来の QUIT コマンドにアクセスできます。これは、組み込みコマンドが定義解除されていても、ユーザ定義関数およびユーザ定義コマンドが予想どおりに動作することを確実にするために、AutoLISP の command 関数内で使用すべき構文でもあります。

すべてのコマンドに対し、コマンドの前にピリオドを付けることで、メニュー、スクリプト、および AutoLISP プログラムを保護することをお勧めします。そうしておけば、アプリケーションでは、再定義されたコマンドではなく、確実に組み込みコマンド定義が実行されます。

次の例を考えてみます。LINE[線分]コマンドを使用するとき、AutoCAD が必ず PLINE[ポリライン]コマンドの使用について確認してくるようにしたいとします。次のように AutoLISP の C:LINE 関数を定義すると、通常の LINE コマンドを変更できます。

(defun C:LINE ( )
  (princ "Shouldn't you be using PLINE?\n")
  (command ".LINE")
 (princ)
)
C:LINE

この例では、C:LINE 関数はメッセージを表示した後で、標準の LINE コマンドを実行します(command 関数で .LINE を使用)。AutoCAD で LINE コマンドのユーザ定義を使用できるようにするには、その前に組み込みの LINE コマンドを定義解除しなければなりません。次のコマンドを入力して、組み込みの LINE コマンドを定義解除します。

(command ".undefine" "line")

コマンドを定義解除した後、AutoCAD のコマンド プロンプトに対して line と入力すると、AutoLISP の C:LINE 関数が実行されます。

コマンド: line

PLINE を使用しなくてもよろしいですね?

.LINE 1 点目を指定: 1 点目を指定

このコードの実行例は、システム変数 CMDECHO が 1(オン)に設定されていることを前提にしています。CMDECHO を 0(オフ)に設定すると、AutoCAD は command 関数呼び出し中にプロンプトをエコー表示しません。次のコードは、システム変数 CMDECHO を使用して、LINE コマンドのプロンプトを繰り返し表示しないようにしています。

(defun C:LINE ( / cmdsave )
  (setq cmdsave (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (princ "Shouldn't you be using PLINE?\n")
  (command ".LINE")
  (setvar "cmdecho" cmdsave)
 (princ)
)
C:LINE

これで、AutoCAD のコマンド プロンプトに対して line と入力すると、次のように表示されます。

PLINE を使用しなくてもよろしいですね?

1 点目を指定:

コマンドを定義解除および再定義することにより、たとえば、図面管理システムを作成することができます。NEW[新規作成]、OPEN[開く]、QUIT[AutoCAD の終了]コマンドを再定義することにより、図面を作成した後、および編集セッションを終了する前に、ログ ファイルに作業情報を書き込むことができます。