Sponsored links

【AutoLISP サンプル】選択した図形の画層の色を変更

Sponsored links
AutoLISP
Sponsored links
Jagaimo
Jagaimo

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

Sponsored links

コマンドの内容

概要

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

図形選択

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

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

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

個別選択の際にはグループ選択のオプションがあり、図形選択せずにGを入力するとグループ選択になります。

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

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

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

汎用性

色番号を引数にして関数にまとめていますので、
(defun c:コマンド名 () (Jaga00ChLyCol 色番号))
という風に、色番号を変更しただけの類似コマンドを作るのが簡単です。

コマンド名

上記にあるように、別の色に変えるコマンドが欲しいときは、色番号を変更するだけで類似コマンドを作ることができます。

今回用意したのは、Ly1 赤、 Ly2 黄色、 Ly3 緑、に変更するコマンドです。

AutoLISPプログラム

;//////////////////////////////////////////////////////////////////////////////////
;/////////////////////////////////////////
;JagaimoLisp コマンド関数
;図形の色変更 var..20200523
;---------------------------------------

(defun c:Ly1 () (Jaga00ChLyCol 1))
(defun c:Ly2 () (Jaga00ChLyCol 2))
(defun c:Ly3 () (Jaga00ChLyCol 3))


;//////////////////////////////////////////////////////////////////////////////////
;/////////////////////////////////////////
;JagaimoLisp コマンド関数
;図形の色変更 グローバル変数編 var.20200523
;---------------------------------------
(defun Jaga00ChLyCol (Col / Objs ObjNum Cnt LyX ES ColTx)
(Jaga00START)
  (setq Objs (ssget "_I"))
    (if Objs (progn
      (setq ObjNum (sslength Objs)) 
        (setq Cnt 0) 
            (repeat ObjNum 
                (setq Obj (ssname Objs Cnt))
                (setq LyX (cdr (assoc 8 (entget Obj)))) 
                (command-s "._LAYER" "_C" Col LyX "" )
                (setq Cnt (1+ Cnt))
              );repeat 
    ));progn if
;............................................................................  
    (while T
       (setq ES nil)
          (while (null ES)
              (initget "G")
              (if (numberp Col) (setq Coltx (itoa Col)) (setq Coltx Col))
              (setq ES (entsel (strcat "\n画層の色を変更する図形を選択 <" Coltx ">: もしくは [グループ選択(G)]")))
          );while null ES
        
          (if (= ES "G")
            (progn
                (setq Objs (ssget))
                 (if Objs (progn
                    (setq ObjNum (sslength Objs)) 
                    (setq Cnt 0) 
                    (repeat ObjNum   
                      (setq Obj (ssname Objs Cnt)) 
                      (setq LyX (cdr (assoc 8 (entget Obj))))
                      (command-s "._LAYER" "_C" Col LyX "" ) 
                      (setq Cnt (1+ Cnt)) 
                   );repeat                  
                 ));progn if
            );progn
            (progn
              (setq Obj (car ES))
              (setq LyX (cdr (assoc 8 (entget Obj))))
              (command-s "._LAYER" "_C" Col LyX "" ) 
            );progn        
          );if
     ) ;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 "\n=========== JagaimoLISP.com ===========")
(princ));defun
;=====================================================================================
(defun Jaga00ERR (msg)	
   (Jaga00END)
(princ (strcat"\nJaga00ERR\n " msg))
(princ));defun
;=====================================================================================

参考記事

選択した図形か画層の色を変更する方法

グループ選択のssget 選択セットから、図形名を一つ一つ得て編集して行く方法

図形選択時のプロンプトについているオプションについて。

(ssget “_I”) で、暗黙選択(コマンド実行前に選択していた図形を暗黙の了解で編集する図形として選択)について。

必要無いエコーバックとプロンプトを消す設定と、ダイナミック入力にする設定にコマンド実行中は替えています。それらのシステム変数について。

引数付きの自作関数について。

プロンプトに色番号をだすために、整数から文字列に変換しています。
それについてはこちらの記事を。

エラー処理についてはコチラの記事リストを。

Comments