Sponsored links

【AutoLISP サンプル】選択した図形の色を変更 グローバル変数編

Sponsored links
サンプル
Sponsored links
Jagaimo
Jagaimo

選択した図形の色を変更するコマンド。
1つのコマンドで、色番号で色を指定し、グローバル変数に保存します。

Sponsored links

コマンドの内容

概要

選択した図形の色を変えるコマンドです。

図形選択

コマンド実行前に図形を選択しているとグループ選択になり、一気に複数の図形の色を変えることができます。

その後、もしくは何も選択せずにコマンド実行をすると個別選択になり、1つづつ確認しながら色を変更して行けます。

繰り返すようにしているので、ESCキーでキャンセルをするまでは、色を変更後、次の図形を選択するようにプロンプトが出てきます。

オプション

選択の際には色変更とグループ選択のオプションがあり、図形選択せずにGを入力するとグループ選択、Cを入力すると色変更ができます。

システム変数変更(コマンド実行中だけ)

コマンド実行時は、システム変数CMDECHOを0にして、必要ないプロンプトとエコーバックがコマンドラインに表示されないようになっています。
システム変数DYNMODEは3になり、ダイナミック入力モードしてプロンプトが目立つようにしています。

エラー処理も入れているので、エラー中断、ESCキーでの中断してもシステム変数は元の設定に戻ります。

色番号 レジストリ保存

色を設定/変更する際、色番号の変数g00Col はレジストリに保存されます。

コマンド名

コマンド名はColX です。

;//////////////////////////////////////////////////////////////////////////////////
;/////////////////////////////////////////
;JagaimoLisp コマンド関数
;図形の色変更 グローバル変数編 var.20200521
;---------------------------------------
(defun c:ColX ( / Objs Obj ES Num)
(Jaga00START)
    (setq Objs (ssget "_I"))
  
  (if (null g00Col)(setq g00Col (Jaga00Read "g00Col")));if
  
  (if (null g00Col)
    (progn
      (setq g00Col (acad_colordlg 1))
      (cond 
        ((= g00Col 0) (setq g00Col "ByBlock"))
        ((= g00Col 256) (setq g00Col "ByLayer"))
      );cond  
      (Jaga00Write "g00Col" g00Col)
  ));progn if
  
    (if Objs
        (command-s "._CHANGE" Objs "" "_P" "_C" g00Col "")
    );if
;--------------------------------------------------------------
  (while T 
    (setq Obj nil)  
      (while (null Obj)  
        (initget "C G")
        (if (numberp g00Col) (setq Num (itoa g00Col)) (setq Num g00Col));if
        (setq ES (entsel (strcat "\n色を変える図形を選択<"Num"> : [色選択ボックス (C) / グループ選択(G)]\n")))
    
        (if (listp ES)
          (setq Obj (car ES))
          (progn
            (cond
              ((= ES "C")
                  (cond 
                      ((= g00Col "ByBlock") (setq g00Col 0))
                      ((= g00Col "ByLayer") (setq g00Col 256))
                  );cond  
                  (setq g00Col (acad_colordlg g00Col))
                  (cond 
                      ((= g00Col 0) (setq g00Col "ByBlock"))
                      ((= g00Col 256) (setq g00Col "ByLayer"))
                  );cond  
                    (Jaga00Write "g00Col" g00Col)
              ); Coldlg cond
              ((= ES "G")(setq Obj (ssget)))
            );cond
        );progn
       );if
      );while 
      
    (command-s "._CHANGE" Obj "" "_P" "_C" g00Col "")
    
  );while T
  

(Jaga00END)
(princ))
;=====================================================================================

;=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
;JagaimoLisp関数 【Jaga00 Common】 var.20200521
;----------------------------------------------
;エラー処理
;=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
(defun Jaga00START ()
  (setq DefErr *error* *error* Jaga00ERR) 
;--------------------------------------- 
  (setq DefCmdEcho (getvar "CMDECHO")) 
    (setvar "CMDECHO" 0)
  (setq DefDynMode (getvar "DYNMODE")) 
    (setvar "DYNMODE" 3)
;-----------------------------------------
(princ "\nJaga00START\n") 
(princ));defun
;=====================================================================================
(defun Jaga00END ()
  (setvar "DYNMODE" DefDynMode)
  (setvar "CMDECHO" DefCmdEcho)
 ;-----------------------------------------	 
   (setq *error* DefErr) 
(princ "\nJaga00END\n")
(princ));defun
;=====================================================================================
(defun Jaga00ERR (msg)	
   (Jaga00END)
(princ (strcat"\nJaga00ERR\n " msg))
(princ));defun
;=====================================================================================


;=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
;JagaimoLisp関数 【Jaga00 Common】 var.20200521
;----------------------------------------------
;グローバル変数 レジストリ読み書き
;=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
(defun Jaga00Read (Nm / Jagapath)
  (setq JagaPath "HKEY_CURRENT_USER\\Software\\JagaimoLisp")
  (vl-registry-read JagaPath Nm)
);defun
;............................................................
(defun Jaga00Write (Nm Var / Jagapath)
  (setq JagaPath "HKEY_CURRENT_USER\\Software\\JagaimoLisp")
  (vl-registry-write JagaPath Nm Var)
);defun
;====================================================================================

参考記事

このコマンドは自作関数にしてコマンド関数の外で定義する方法を使っています。
エラー処理に関しての記事リスト。

エラー処理の内容は同じだけれど、コマンド関数内でエラー処理も定義しているコマンドサンプル。

図面選択プロンプトに色番号を表示させることについて。

図面選択プロンプトにオプションを付けることについて。

グローバル変数の保存について。