AutoLISPを使って、色を選択するダイアログボックスを呼び出して、ユーザーが選択した色を戻り値として受け取ることができます。
色選択ダイアログボックス
AutoLISP関数 acad_colordlg は、インデックスカラーを選択する色選択ダイアログボックスを呼び出す機能があります。
色番号を選ぶAutoLISPコマンドを作るとき、getint などで数字をユーザー入力にする方法がありますが、色選択ダイアログボックスを使うと、視覚的に色を確認できて選びやすくなります。
引数として、ダイアログボックスを開いたときにとりあえず表示させる色番号。
例えば、赤色の色番号、1 を引数に入れて、c とした場合、上の図のように赤色が選択された状態で開きます。
0は ByBlock 、256 はByLayer です。
引数にnil を加えて、(acad_colordlg 1 nil) にすると、ByBlockとByLayerは選択できない状態になります。
AutoLISP プログラム
色選択ダイアログボックスを使ったコマンド例です。
- 色選択ダイアログボックスを表示し、色をユーザ選択。
- 図形をユーザ選択
- コマンドを使って図形の色を変更
という内容です。
(defun c:test ( / Col Obj)
(setq Col (acad_colordlg 1 nil)) ; 色選択ダイアログボックスを出して色をユーザ選択
(setq Obj (car(entsel))) ; 色を変える図形をユーザ選択
(command-s "._CHANGE" Obj "" "_P" "_C" Col "") ; コマンドで選択された図形を選択された色にする
(princ))
AutoLISPの説明
(setq Col (acad_colordlg 1 nil))
(acad_colordlg 1) でダイアログボックスが出て、ユーザーが色を選択して閉じると、選択された色番号が戻ります。その戻り値を、setq で変数Colに入れます。
ByLayerの256、ByBlockの0はコマンドでそのまま使えないので、nilを入れて選択できないようにしています。
(setq Obj (car(entsel)))
(car(entsel)) で選んだ図形の図形名を取得し、変数Objに入れます。
(command-s “._CHANGE” Obj “” “_P” “_C” Col “”)
コマンドCHANGE[データ変更]を使い、Objに入れた図形を、Colに入れた色に変更します。
ByBlock ByLayer
ByBlock (ブロックの色) ByLayer(画層の色) にしたいときは、数値が0なら”ByBlock”、256なら”ByLayer”という処理を加える必要があります。
後日別記事にします。
まとめ
- acad_colordlgは、色選択ダイアログボックスを出して、選ばれた色番号を戻す。
- 色選択ダイアログボックスを使うと、ユーザ-が色を確認しながら色番号を入力できる。
Comments