Sponsored links

【AutoLISP ユーザー入力】 ユーザー入力にオプションを付ける 関数 initget キーワードを設定

Sponsored links
AutoLISP
Sponsored links

ユーザー入力にオプションを付けます。

今回は、entsel で図形選択をするときに、図形選択をせずに色選択をする。というオプションを付けます。

Sponsored links

予備知識

こちらの記事に出てくる、グローバル変数に色番号を保存しておいて、コマンド実行時に図形を選択してグローバル変数の値の色に変更するコマンドを使います。

entsel にオプションを付ける

図形選択時に、

色を変える図形を選択 もしくは [色選択ボックス (C)] と表示して、C を入力するか、コマンドラインの[色選択ボックス (C)] をクリックしたら色選択ダイアログボックスが出てきて色を変更できるようにします。

AutoLISPプログラム

(defun c:test (/ ES Obj)
  
  (if (null g00Col)
    (setq g00Col (acad_colordlg 1)) ; 色選択ダイアログボックスを出して色をユーザ選択
  );if

 (while (null Obj) ; Objが空なら繰り返す ここから------------

    (initget "Coldlg")
    (setq ES (entsel "色を変える図形を選択 もしくは [色選択ボックス (C)]"))

    (if (= ES "Coldlg")  ; もしESが"Coldlg"なら
       (setq g00Col (acad_colordlg g00Col)) ; 色選択ダイアログボックスを出して色をユーザ選択
       (setq Obj (car ES)) ; そうでなければObjに図形名を入れる
    );if
 );while ; Objが空なら繰り返す---------------ここまで
  
(command-s "._CHANGE" Obj "" "_P" "_C" g00Col "") ; コマンドで選択された図形を選択された色にする 

(princ))

AutoLISPの説明

関数 intiget

(initget “Coldlg”)

initget はキーワードを設定する関数です。選択肢を設定します。
ここでは、カラーダイアログということで、Coldlg にしました。

(setq ES (entsel “色を変える図形を選択 もしくは [色選択ボックス (C)]“))

そして、entselのプロンプトに、[色選択ボックス (C)] と入れることで、選択オプションになります。

entsel で通常通り図形を選択すれば図形情報が戻り値に、C を入力するか、コマンドラインの[色選択ボックス (C)] をクリックなら、intigetで設定した“Coldlg”が戻り値になります。
(setq ES で、この戻り値は変数ESに入ります。

(if (= ES “Coldlg”)
 (setq g00Col (acad_colordlg
g00Col))
 (setq Obj (car ES))
);if

そして、もし変数ESに入った情報が“Coldlg”なら、色選択ダイアログボックスを出して色をユーザー選択、そうでなければ、(car ES) で、entsel で図形選択して得た図形情報から、図形名を得てObjに入れます。

これら一連の流れは、(while (null Obj …….. ) 内なので、図形選択されてObjに図形名が入れば次に行くし、色選択が選択されてObjに情報が入らなかった場合は、また、図形選択に戻ります

まとめ

  • initgetでキーワードを設定できる
  • [選択肢 (記号)] をユーザー入力時のオプションに加えると戻り値がキーワードになる。

関連記事

いくつかの選択肢を付ける例です。

図形選択時のオプションと一緒にプ現在の色番号が出るようにすると、このままの色でいくか変更するか判断できてさらに使い勝手がよくなります。
その方法ついてはこちらの記事を。

図形選択時のオプションを付けているコマンドサンプルです。
現在の色番号がプロンプトに表示されるようにもなっています。

グローバル変数は図面を閉じると情報が消えます。設定を保存する方法はコチラの記事を