BricsCAD®に基点切り取り(_CUTBASE)機能を追加してみる
X(旧Twitter)にて、
👨「BricsCAD®に基点切り取り(_CUTBASE)がほしい。」
という意図のツイートを頂いたので調べてみたところ、AutoCAD® 2023 で新規追加されたコマンドであることがわかりました。BricsCAD に対して同様な機能を実装してほしいという要望は調べた時点では挙がってきていないようでした。
カスタマイズ出来る方は、すでに同種の機能を追加して使っているのではないかと思いますが、BricsCAD をカスタマイズする題材として面白そうなので、_CUTBASEコマンドを作って追加する流れを解説したいと思います。
BricsCAD への LISP コマンドの追加
まず、基点切り取りの機能的なところを見ると、「基点コピー」の切り取り版であるこという見方ができますので、「基点コピー」を使って簡単に作れそう!と判断できます。
そこでサクッと作ってツイートしたのが、以下の LISPになります。
; メニューマクロ用
(setq ss (ssget) pt (getpoint "\n基点を指示:"))(command "_COPYBASE" pt ss "" "_ERASE" ss "")
上記の内容は、とりあえず使うためのワンライナーなプログラムといえますが、アイコンに登録して使う分には問題ありませんが、コマンドにはなっていません。
コマンドとして登録する場合、最低限のプログラムコードとしては以下のようになります。
; コマンド登録用
(defun C:CUTBASE (/ ss pt)
(setq ss (ssget) pt (getpoint "\n基点を指示:"))
(command "_COPYBASE" pt ss "" "_ERASE" ss "")
(princ))
"C:関数名" で関数を定義すると BricsCAD にコマンドとして読み込まれます。常用することを考えてもう少し使い勝手を考慮して整えると、以下のイメージのようなコードにできます。
コードの内容を解説すると、
vl-cmdf 関数の前後にある setvar 関数で cmdecho のシステム変数を変更している部分は、コマンドラインに実行するコマンドの余計なメッセージを残さないようにする処理です。
ワンライナーなプログラムで使っていた command から vl-cmdf の関数に変更しています。vl-cmdf は引数として処理する内容にエラーが発生する場合は実行されないという特徴があるコマンド実行関数で、簡易なエラー対策を行っていると言えます。
コマンドの実行内容を "_Undo" コマンドの ”BE” と ”B” で挟む形で実行するようにしています。これは、内部で実行する複数のコマンドを一つの処理としてグループ化しておくことで、CUTCOPY コマンドに対して「元に戻す」を一回で済むようにしておくということになります。今回の場合、これがないと ERASE と COPYBASE の2回分 Undo が必要になります。
きちんとしたコマンドとして実装するには、様々なケースを考慮したエラー処理など含めてコーディングする必要がありますが、今回の場合は利用する _COPYBASE コマンドで、安全性や安定性はある程度担保されていると考え、短いプログラムとなっています。
LISPファイルをコンパイルする
LISPファイルはソースコードのまま読み込んで利用することも出来ますが、コンパイルしたファイルを作成して読み込むことで処理スピードがアップしたり、ファイルの容量を減らしたり、プログラムを暗号化するといったことが出来ます。
今回のプログラムでは短すぎるので効果はほぼありませんが、コンパイルの事例という意味で解説します。
まず、BricsCAD向けに LISPプログラムをコンパイルするには、DES Encoder というツールを使います。BLADE 上からだと、[プロジェクト] - [DES coder ファイルデバッグ] から実行します。
DES Encoder を実行すると下イメージのダイアログが表示されます。
開いていたファイルがソースファイルとしてリストに出ていますので、そのまま緑色のボタンをクリックすると暗号化が実行され、プログラムファイルと同じフォルダにファイルと同名で拡張子が.des のファイルが出来上がります。(ダイアログの下部にコンパイル時のオプションがありますがよくわからない場合はそのままにしておいてください。)
作成された .des ファイルはコードが暗号化された状態になります。
参考にコンパイルしたものが以下のファイルです。
* このファイルを利用される場合は、自己責任でご利用ください。
LISP プログラムの読み込み
コンパイルした .des ファイルを BricsCAD に読み込むことで、基点切り取り(_CUTBASE)コマンドが追加されます。
プログラムの読み込み方は、本サイトの「BricsCAD の LISP API で HelloWorld!」記事にある プログラムファイルを読み込んで Hello World! 部分をお読みください。
LISPコマンドもオートコンプリートに表示されます
LISPプログラムで追加したコマンド読み込み後はオートコンプリートの候補に表示されます。
インターフェスのカスタマイズ(_CUI)で、コマンドを追加して [CTRL]+[SHIFT]+[X] などのショートカットを追加すれば、素早く使える「基点切り取り」(_CUTBASE)コマンドの追加完了です。😃
LISP プログラムなので、BricsCAD Lite で利用できるのも嬉しいところですね!🎉
以上、「BricsCAD®に基点切り取り(_CUTBASE)機能を追加してみる」について解説いたしました。
BricsCAD 本体の機能が大分進化して便利になっているので、今回のような形でカスタマイズする機会は少なくなっているかもしれませんが、汎用CAD をちょっとしたカスタマイズで自分好みに便利にしていくメリットの一面を感じていただけたのではないかと思います。
皆様もぜひアイディアの共有やカスタマイズをしてみてください。
📐では、よい CADライフを!👍