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 にコマンドとして読み込まれます。常用することを考えてもう少し使い勝手を考慮して整えると、以下のイメージのようなコードにできます。

1688607043952-BoC8rqFhnSBricsCAD の LISP開発環境 BLADE でコーディングしたイメージ

コードの内容を解説すると、

  • 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 ファイルデバッグ] から実行します。

1688536232128-0OODvskNJ6DES Encoderの実行場所

DES Encoder を実行すると下イメージのダイアログが表示されます。

開いていたファイルがソースファイルとしてリストに出ていますので、そのまま緑色のボタンをクリックすると暗号化が実行され、プログラムファイルと同じフォルダにファイルと同名で拡張子が.des のファイルが出来上がります。(ダイアログの下部にコンパイル時のオプションがありますがよくわからない場合はそのままにしておいてください。)

1688535740033-SIsbI0UJMmDES Encoder のダイアログ
ここは日本語化されていません。

作成された .des ファイルはコードが暗号化された状態になります。
参考にコンパイルしたものが以下のファイルです。

cutbase.des

* このファイルを利用される場合は、自己責任でご利用ください。



LISP プログラムの読み込み

コンパイルした .des ファイルを BricsCAD に読み込むことで、基点切り取り(_CUTBASE)コマンドが追加されます。

 プログラムの読み込み方は、本サイトの「BricsCAD の LISP API で HelloWorld!」記事にある プログラムファイルを読み込んで Hello World! 部分をお読みください。

LISPコマンドもオートコンプリートに表示されます

LISPプログラムで追加したコマンド読み込み後はオートコンプリートの候補に表示されます。

1688537210313-kaW0LYZto9オートコンプリートで表示しているところ。

インターフェスのカスタマイズ(_CUI)で、コマンドを追加して [CTRL]+[SHIFT]+[X] などのショートカットを追加すれば、素早く使える「基点切り取り」(_CUTBASE)コマンドの追加完了です。

1688540703491-eNRC1On6Hrコマンドを登録してショートカットに追加したイメージ

LISP プログラムなので、BricsCAD Lite で利用できます。