AutoLISPで、普段使うAutoCADのコマンドを操作するための、基本ルールを説明します。
関数 command-s と command
AutoLISPで、従来のAutoCADのコマンドを使いたいときは、関数 command-s を使います。
コマンドを実行するということでは、全く同じ役割の関数 command もあります。
好きな方を使って下さい。
command-s の方が新しい関数でAutoCAD2012から追加されました。 command よりも高速とのことですが、人間が感じることができる違いはあるのかな?という感じです。
私がAutoLISPを始めた頃、command を使うと、「command-s を使うことを推奨します」みたいな文章がコマンドラインに現れたのですが、多分バージョンアップした時に出てこなくなりました。
高速とのこと。AutoLISPを始めたころにAutoCADが推してきた。
その2点から私は command-s を使っています。
2012よりも古いバージョンのAutoCADを使う可能性がある場合は、必ずcommand を使って下さい。
command-sとは相性が悪いAutoCADコマンドもあり、command-s では上手く動作しないけれど、commandなら動作する場合もあります。
今の所、私が経験したcommand-s だと動作しないコマンドは”NCOPY”です。
“._ コマンド名”
引数の1つ目はコマンド名。文字列なので、必ず ” ” で囲みます。
コマンド名の前に、ドットとアンダーバーを付けることが推奨されています。
順番は ._ もしくは _. どちらでも同じです。
AutoCADの公式ヘルプページの例では、 ._ の順番で使われているし、JagaimoLISPではこの順番で使っていきます。
. ドットの役割
コマンド名前の前にドットを付けることで、コマンドが定義解除されてしまっていても、AutoLISPで定義解除されているコマンドが使えます。
例えば、AutoLISPを使用して、従来のAutoCADのコマンドの内容を変更することができるのですが、
コマンドLINEは要らない。常にポリラインを使いたい。
という人がいて、“LINE”コマンドで、本来の線分ではなく、ポリラインを描くというコマンドに変更してしまったとします。
すると、本来のLINEコマンドは消えてしまっているので、AutoLISPで (command-s “line”)とすると、エラーになります。
しかし、ドットを付けて (command-s “.LINE”) とすれば、LINEコマンドが定義解除されている環境でも、AutoCADの本来の”LINE”コマンドが実行されます。
カスタマイズされている状況でも、エラー無く使えるように、ドットを付けることが推奨されています。
_ アンダーバーの役割
コマンド/コマンドオプションを、別言語のAutoCADのバージョンに翻訳する役割があります。
日本語版でもそうだし、AutoLISPコマンドが他の言語のバージョンでも問題無く使えるように、コマンド名の前にはアンダーバーを付けることが推奨されています。
コマンドオプション
._コマンド名に続いて、各コマンドのオプションや数値などなど、を入れて行きます。
例えば、CIRCLE[円] なら、中心点と半径、3点、2点、接点etc などいろいろオプションがあります。オプション名も、アンダーバーを付けることが推奨されています。
コマンドを実行したときに、コマンドラインみると、そのコマンドのオプションを確認できます。
AutoCADのヘルプページで使いたいコマンド名を調べると、オプションも含めて解説があります。
ユーザー入力 pause
AutoLISPでコマンド操作時、ここはユーザー入力にしたい。という場合があります。
例えば、線のコマンドで、最初の一点はプログラムにして、2点目はユーザー入力にしたい。などなど。
その場合、pause を入れると、その部分はユーザー入力になります。
エンター ” “
AutoLISPでコマンド操作時、ここでエンターキー(確定)が必要という場合があります。
その場合はダブルクォーテーション2つ ” ” がエンターキー(スペースキー)の役目を果たします。
例えば
(defun c:test ()
(command-s "._LINE" "0,0" pause "")
(princ))
コマンド”LINE”を使って、
- コマンド”LINE”をスタート command-s “._LINE”
- 1点目は (0,0)に自動入力 “0,0”
- 2点目はユーザー入力 pause
- エンターキーを押してコマンドを終わる。“”
をAutoLISPにしたものです。
実際に読み込んで使ってみて、pause ” ” の役割を確認してみてください。
コマンドラインにコピー&ペーストすれば読み込まれます。
(その図面ファイルを閉じれば消えます。)
コマンド名は test です。読み込んだ後、test と入力すればこの新コマンドが実行されます。
新しいコマンドを作っても読み込むことができないと使えないので、読み込み方がよくわからない。という方はコチラの記事を参考にしてください。
defun や princなどの意味よくわからない、読み込み方がわからないという方は、こちらの記事リストを参考にしてください。
まとめ
- 従来のAutoCADコマンドを実行するAutoLISP関数はcommand-s。
- 関数commandもある。(command-sのが新しい。2012以降)
- コマンド名は文字列なので、” ” が必要。
- カスタマイズされた環境や多言語対応のために、コマンド名にはドットアンダーバーを付けて、 “._ コマンド名”にする。
- pause はユーザー入力
- ダブルクォーテーション2つ”” はエンターキーの役割
関連記事
AutoLISPには、VisualLISPという新しく追加された言語があります。
command-s関数のVisualLISPバージョンについての記事です。
Comments
[…] Jagaimoさんの記事を参考にさせていただきました。 […]