使いやすく設定
こんにちは!
エカキオです!
今回はLisp内で、ユーザーの入力待ちの状態を作ります。
前回は「pause」というのを使いましたが、今回は少しレベルアップします。
(get~)
この(get~)にはいくつかの目的で使い分けます。
代表的なものを紹介します。
getint
ユーザーが整数を入力するまで待機(整数:小数点なし)
getreal
ユーザーが実数を入力するまで待機(実数:小数点あり)
getkword
ユーザーがキーワードを入力するまで待機
getpoint
ユーザーが点を入力するまで待機
getstring
ユーザーが文字列を入力するまで待機
です。
英語の意味を考えていただけると少し覚えやすいかもしれません。
前回のcommand関数を(getpoint)を使って書き換えてみましょう。
(defun c:maru ()
(setq p1 (getpoint" 基点を指定:"));基点をp1に保存
(command "circle" p1 "d" "100");pauseの代わりにp1を入れる
(princ)
)
3点ほど注記します。
- (get~ " ")←この" "を入れることで、説明文を付けてユーザー待ち状態にできます。
- 「;」←セミコロンマークの右側は全て無効として扱われますので、メモ書きとして使用しましょう。
- (command "circle" p1 "d" "100")←「p1」に注目すると" "で囲っていません。変数を入れる時は囲う必要なしです。
もう一つくらい例を上げます。
今度は(getreal~)を使ってみましょう。
(defun c:maru ()
(setq d1 (getreal" 直径を入力:"));直径(実数)をd1に保存
(command "circle" "0,0" "d" d1);d1で直径を指定
(princ)
)
詳しくは解説しませんが、(get~)関数の使用の仕方は理解できましたか?
変数のリセット
この記事でも変数をいくつか利用しています。
p1とd1
これはAutoCADを開いている間自動ではリセットされません。
もし大量のLispコマンドを作成したら、別のLispコマンド内で
同じ変数を使ってしまうことが考えられます。
そうすると、意図していた結果にならず、しかも大量のデータから
同じ変数を探すのは大変な労力ですよね。。。
そこで、Lispコマンドの中で毎回リセットする方法を説明します。
先ほどの直径を「d1」としたもので説明します。
(defun c:maru (○/d1);←ここに変数を記入、○の部分は半角スペースを入れる。
(setq d1 (getreal" 直径を入力:"));直径(実数)をd1に保存
(command "circle" "0,0" "d" d1);d1で直径を指定
(princ)
)
簡単です。初めのコマンド名を定義した()を( / )として、
「/」スラッシュの右側にLisp内で使用しているものを全て書きます。
複数変数を利用している場合は、半角スペースで区切って書きます。
p1とd1を同時に使ったとした場合。
(defun c:maru ( /p1 d1);p1とd1を書いてください。
(setq p1 (getpoint" 基点を指定:"));基点をp1に保存
(setq d1 (getreal" 直径を入力:"));直径(実数)をd1に保存
(command "circle" p1 "d" d1);
(princ)
)
これで完了です。
プログラミング
上の例題は理解していただけましたでしょうか?
ここまで来ると、プログラム書いてるぜー!
って気がして来ないですか?
ただ、上の例は変数に入れても入れなくても、動作としては同じですね。
入力するタイミングが違うくらいです。
今後は、もう少し深いところを紹介していければと思います。
プログラミングではよくある、条件分岐や繰り返し動作などを解説していく予定です。
あと、前の記事のオブジェクト情報の利用の仕方ですね。
いやぁ、覚えることたくさんですね。
それでは、この辺で。
エカキオ