(defun c:color2layer ( / color2str e ent i clayer layer) (setvar "cmdecho" 0) (command "_.undo" "_End" "_.Undo" "_Group") ;;-------------------------------------------------- ;; Function to convert an integer color to a string: ;; (defun color2str (color#) (cond ((not color#) nil) ((= color# 256) nil) ((= color# 0) nil) ((= color# 1) "Red") ((= color# 2) "Yellow") ((= color# 3) "Green") ((= color# 4) "Cyan") ((= color# 5) "Blue") ((= color# 6) "Magenta") ((= color# 7) "White") (1 (itoa color#)) ) ) (setq i 1.0 ; counter e (entnext) ; first item in drawing ) (while e (princ (strcat "\rProcessing # " (rtos i 2 0))) (setq ent (entget e) clayer (cdr (assoc 8 ent)) e (entnext e) i (1+ i) ) (if (and (setq layer (color2str (cdr (assoc 62 ent)))) (/= (strcase layer)(strcase clayer)) ) (progn (if (= (logand 4 (cdr (assoc 70 (tblsearch "layer" clayer)))) 4) (command "_.layer" "_UNlock" clayer) ) (if (not (tblsearch "layer" layer)) (command "_.layer" "_New" layer "_Color" layer layer "") ) (entmod (subst (cons 8 layer)(assoc 8 ent) ent)) ) ) ) (command "_.undo" "_End") (setvar "cmdecho" 1) (princ) )