Sponsored links

【AutoLISP ユーザー入力】 色選択ダイアログボックス 関数acad_colordlg

Sponsored links
AutoLISP
Sponsored links

AutoLISPを使って、色を選択するダイアログボックスを呼び出して、ユーザーが選択した色を戻り値として受け取ることができます。

Sponsored links

色選択ダイアログボックス

AutoLISP関数 acad_colordlg は、インデックスカラーを選択する色選択ダイアログボックスを呼び出す機能があります。

色番号を選ぶAutoLISPコマンドを作るとき、getint などで数字をユーザー入力にする方法がありますが、色選択ダイアログボックスを使うと、視覚的に色を確認できて選びやすくなります。

引数として、ダイアログボックスを開いたときにとりあえず表示させる色番号。
例えば、赤色の色番号、1 を引数に入れて、c とした場合、上の図のように赤色が選択された状態で開きます。

Jagaimo
Jagaimo

 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