システム変数CMDECHO を 0 (オフ) にするとコマンドラインの見栄えが良くなるし、DYNMODEを 3 (オン)にすると、ユーザー入力などを促すメッセージがカーソル横出てきて見やすいです。
自作コマンド内でシステム変数の値を変えるときは、ユーザーに迷惑がかからないようにエラー処理も付けましょう。
予備知識
システム変数 CMDECHO (エコーバック)
AutoLISP の command 関数を実行中に、プロンプトとユーザ入力をエコーバック表示するかどうかをコントロールします。
CMDECHO (システム変数) AutoCAD ヘルプページ
プロンプトというのは、ユーザーに何をするのか促してくれるメッセージのことです。
例えば、線分を引きたいとき、LINE[線分]コマンドをスタートすると、
1点目を指定
とコマンドラインに表示されて1点目を指定することを促してくれますね。アレです。
そして、エコーバックは、ユーザー入力した値をそのまま戻して表示してくれることです。
コマンドを実行するために何をすればいいのか教えてくれるプロンプトは便利ですが、AutoLISPでコマンド操作のユーザー入力部分はプログラムしてあるとき、しかもいくつもあったら、ドバァーっとコマンド履歴に出てきて、あまり見栄えの良い物ではありません。
試してみよう
(defun c:Test (/ r)
(setq r 10)
(repeat 10
(command-s "._circle" "0,0,0" r "")
(setq r (1+ r))
);repeat
(princ))
これは、円が10個、原点 (0,0,0) に現れるだけのコマンドです。
コマンド名はTestです。
CMDECHOの値を1にして試してみてください。
システム変数の値は、コマンドと同じようにシステム変数名を入力すれば値を確認/変更できるよ。
これは、円コマンドを10回繰り返して自動で円が書かれるのですが、円を描くときのプロンプトメッセージとエコーバックがガガァーっと10回分出てきます。
今度はCMDECHOの値を0にして試してみてください。
入力したコマンド名だけで、プロンプトもエコーバックもでることなく円10個出てきてコマンドが完了しました。
このように、AutoLISPを使う時は、CMDECHOがオフになっていた方が、スッキリしてキレイです。
さらに、処理時間も早くなります。
command-s 内のpause や、entsel getpoint など、ユーザー入力が必要な場面ではプロンプトが出てきます。
類似システム変数 NOMUTT
システム変数 NOMUTTを使うと、プロンプトのみの非表示にできます。
システム変数 DYNMODE (ダイナミック入力)
システム変数DYNMODEは、ダイナミック入力の設定を変えるシステム変数です。
ダイナミック入力とは、カーソルの周りにプロンプトを出してくれるものです。
値は、0 がオフ 1 がポインタ入力オン 2が寸法入力オン 3が両方オンです。
F12かステータスバーでも切替できます。
試してみよう
(defun c:test ()
(entsel "テキストを選択: ")
(princ))
これは、プロンプトを出すことだけが目的のコマンドです。
DYNMODE の値を、0 の場合と1の場合で試してみてください。
どちらもコマンドラインにプロンプトは出ますが、DYNMODEの値が1か3の時は、カーソル横にもプロンプトが出ます。
AutoLISPで作った自作コマンドを使うとき、誰かに使ってもらう時、普段使っていないコマンドを使うことになるわけですから、
ユーザーに何を入力して欲しいのか、ダイナミック入力でプロンプトを目立たせる方が迷いなく使えます。
処理時間はちょっと遅くなります。が、人が感じられるほどの違いはないとは思います。複雑で処理に時間がかかるなら、表示系の設定をすべてオフにして試してみるといいと思います。
ユーザーの意図なくAutoCADの設定を変更してしまうのは避けるべきこと。
CMDECHOやDYNMODEなどシステム変数変更を自作コマンドのプログラムに入れるときは、コマンド終了時はもちろん、中断時も元の設定に戻るようにエラー処理関数に組み入れましょう。
まとめ
- プロンプトというのは、ユーザーに何をするのか促してくれるメッセージのこと。
- CMDECHO は、AutoLISP実行時のコマンドプロンプトをコマンドラインの表示/非表示を切り替えするシステム変数。
- ユーザー入力を必要としないAutoCADコマンドをプログラム内で繰り返すことも多いので、0 (オフ) の方が見栄えがいい。
- DYNMODEを 1か3 (オン)にすると、プロンプトがカーソル横に出てくる。
- 自作コマンドでは、普段とは違う操作をするので、プロンプトが目立った方が迷い無く使える。
- どちらもプログラムの動作には関係がない。
- ユーザーの意図なくコマンド終了後にAutoCADの設定が変わってしまうコマンドはNG。システム変数を変更するコマンドを作ったらエラー処理関数に組み込む。
関連記事
コマンド実行中にシステム変数を変更するコマンドを作る場合は、中断されることも考えて、エラー処理関数でシステム変数が元に戻るようにしましょう。
Comments