コマンド処理をLisp化
こんにちは!
エカキオです!
今回の記事は「Lisp」内でコマンドを使用する方法と、
その派生について紹介致します。
まず、今までいくつか紹介してきた( )カッコで囲われているアルファベットを関数と言います。
(defun 〜)
(princ *)
(setq ◯ □)
これらです。
AutoCAD Lisp 入門 - 1 - 最強の時短ツール「Lisp」とは - 図描きの備忘録
AutoCAD Lisp 入門 - 2 - オブジェクトの情報を抽出 - 図描きの備忘録
この関数を使い分けることで、いろいろな効率化が図れるわけですね。
今回紹介する関数は
(command)関数です。
こちらの関数の使い方を例をあげて紹介致します。
例えば、座標(0,0)の位置に直径100mmの円を描きます。
これは通常のコマンド入力です。
これでもアイコン入力よりは早いです。
では、「Lisp」command関数を使って行います。
(command "circle" "0,0" "d" "100")
解説します。
(command)関数は、コマンドラインにキーボード入力をしているという表現が分かりやすいかもしれません。
いや、、分かりづらいですね。
具体的に言います。
(command 〜)
この部分は関数ですね。
" "←このダブルクォーテーションマークで囲われているものがキーボード入力されていると思ってください。
また、" "この中の最後には隠れた「Enter」があると思ってください。
あとは、先ほどのコマンド入力で行っていた順番に" "で囲むだけです。
「circle」(を入力Enter)
↓
「0,0」(を入力してEnter)
↓
「d」(を入力してEnter)
↓
「100」(を入力してEnter)
という流れを一瞬で行っていることになります。
この作成した「command関数」をいつもの(defun 〜)に組み込んでみましょう。
(defun c:maru ()
(command "circle" "0,0" "d" "100")
(princ)
)
完成です。
command関数 応用編
先ほど作成したcommand関数、あれだと、(0,0)の位置にひたすら直径100mmの円を描くだけのコマンドになります。
そこでユーザーに指示をもらうまでコマンドが待機する方法を説明します。
「pause」
です。
これを先ほどのcommand関数に組み込みます。
(command "circle" "0,0" "d" "100")
↓
(command "circle" pause "d" "100")
こんな感じ。
実行してもらうとわかりますが、コマンドラインには何も表示されません。
でも、AutoCADは待っています。
あなたの入力を。
え?
説明します。笑
なので、画面上のどこかをクリックするか、X,Yの座標をキーボード入力するかのどちらかをしてください。
あとあと使っていて混乱しないように、ユーザー入力待ちで求めていることを
(princ 〜)
を使って表示しておきましょう。
(defun c:maru ()
(princ "¥n座標指定:")
(command "circle" "0,0" "d" "100")
(princ)
)
これでコマンドラインに説明が表示されて使いやすいです。command関数の使い方も応用できるようになりました。
今回はこの辺りで、一旦終わります。
次回は、ユーザー入力待ち状態にできるいろいろな関数を紹介します。
エカキオ