gmmdinesh 10 Posted October 3, 2016 (edited) Hi, I need a lisp code for automatically rename or change a particular layer to another layer name or new layer through just click the line object. Anything will be greatly appreciated. Thanks in advance Edited November 22, 2018 by gmmdinesh Quote Share this post Link to post Share on other sites
ReMark 131 Posted October 4, 2016 There are plenty of lisp routines that will change a layer name. A little effort is all it takes to find them. Seek and ye shall find. Quote Share this post Link to post Share on other sites
SLW210 131 Posted October 4, 2016 Just look at the bottom of this page for Similar Threads. Quote Share this post Link to post Share on other sites
gmmdinesh 10 Posted October 4, 2016 Thank u so much for your kind reply. Thank you guys. Quote Share this post Link to post Share on other sites
Dadgad 75 Posted October 4, 2016 If you are unfamiliar with the LAYTRANS command, you might want to check it out. Quote Share this post Link to post Share on other sites
Grrr 66 Posted October 4, 2016 Heres an example: (defun C:test ( / v ns se c le lx n s i enx) (while (setq v (tblnext "LAYER" (not v))) (setq ns (cons (cdr (assoc 2 v)) ns))) (if (and (setq se (car (entsel "\nSelect object, to redefine its layer: "))) (setq lx (entget (setq le (tblobjname "LAYER" (cdr (setq c (assoc 8 (entget se)))))))) (/= 4 (logand 4 (cdr (assoc 70 lx)))) (or (setq n (car (LM:listbox "Select Existing layer to change to" (acad_strlsort ns) 0))) (setq n (PromptBox "Create New Or Type Existing Layer" " Type your layer's name here " )) ) ) (progn (if (not (member n ns)) (Layer n)) (if (setq s (ssget "_X" (list c))) (repeat (setq i (sslength s)) (setq enx (entget (ssname s (setq i (1- i)))) enx (subst (cons 8 n) (assoc 8 enx) enx) ) (entupd (cdr (assoc -1 (entmod enx)))) ) ) ) ) (princ) );| defun |; (vl-load-com) (princ) (defun Layer (Nme) ; Lee Mac (entmake (list (cons 0 "LAYER") (cons 100 "AcDbSymbolTableRecord") (cons 100 "AcDbLayerTableRecord") (cons 2 Nme) (cons 70 0) ) ) ) ; PromptBox example by Lee Mac ; Arguments: ; title - Dialog Box Title ; msg - [Optional] Text to Display ; Returns: Entered String if user presses OK, else nil (defun PromptBox ( title msg / dcl dch file val ) (cond ( (not (and (setq dcl (vl-filename-mktemp nil nil ".dcl")) (setq file (open dcl "w")) (progn (write-line (strcat ; this was original set: edit_width = 60; edit_limit = 2048 "promptbox : dialog { label = \"" title "\"; initial_focus = \"txt\"; spacer; " ": edit_box { key = \"txt\"; edit_width = 40; edit_limit = 2048; allow_accept = true; } spacer; ok_cancel; }" ) file ) (setq file (close file)) (findfile dcl) ) ) ) ) ( (<= (setq dch (load_dialog dcl)) 0) (vl-file-delete dcl) ) ( (not (new_dialog "promptbox" dch)) (unload_dialog dch) (vl-file-delete dcl) ) (T (if msg (setq val (set_tile "txt" msg))) (action_tile "txt" "(setq val $value)") (if (zerop (start_dialog)) (setq val nil)) (unload_dialog dch) (vl-file-delete dcl) ) ); cond val ); defun PromptBox ;; List Box - Lee Mac ;; Displays a DCL list box allowing the user to make a selection from the supplied data. ;; msg - [str] Dialog label ;; lst - [lst] List of strings to display ;; bit - [int] 1=allow multiple; 2=return indexes ;; Returns: [lst] List of selected items/indexes, else nil (defun LM:listbox ( msg lst bit / dch des tmp rtn ) (cond ( (not (and (setq tmp (vl-filename-mktemp nil nil ".dcl")) (setq des (open tmp "w")) (write-line (strcat "listbox:dialog{label=\"" msg "\";spacer;:list_box{key=\"list\";multiple_select=" (if (= 1 (logand 1 bit)) "true" "false") ";width=50;height=15;}spacer;ok_cancel;}" ) des ) (not (close des)) (< 0 (setq dch (load_dialog tmp))) (new_dialog "listbox" dch) ) ) (prompt "\nError Loading List Box Dialog.") ) ( t (start_list "list") (foreach itm lst (add_list itm)) (end_list) (setq rtn (set_tile "list" "0")) (action_tile "list" "(setq rtn $value)") (setq rtn (if (= 1 (start_dialog)) (if (= 2 (logand 2 bit)) (read (strcat "(" rtn ")")) (mapcar '(lambda ( x ) (nth x lst)) (read (strcat "(" rtn ")"))) ) ) ) ) ) (if (< 0 dch) (unload_dialog dch) ) (if (and tmp (setq tmp (findfile tmp))) (vl-file-delete tmp) ) rtn ) Though It won't purge the original layer. Quote Share this post Link to post Share on other sites
JovanG 5 Posted April 5 This topic is old but it seems that there is not a clear and easy answer in internet, so I put this here in case it's helpful: (defun C:aux ( / acadDocument theLayers layName) (setq acadDocument (vla-get-activedocument (vlax-get-acad-object))) (setq theLayers (vla-get-layers acadDocument)) (vlax-map-collection theLayers 'layer-mod) (princ) );defun (defun layer-mod (theLayer) (setq layName (vlax-get-property theLayer 'Name)) (if (member layName '("Layer_to_be_rename")) (vla-put-Name thelayer (strcat "New_Layer_Name")) ) ;if );defun (princ) A little modification of a lisp that some day I found in some place Quote Share this post Link to post Share on other sites
Lee Mac 471 Posted April 5 Rather than iterating over the entire Layers Collection to rename a single layer, you can obtain it directly using tblobjname, e.g.: (defun c:layren ( / enx obj old new ) (setq old "Layer_to_be_Renamed" new "New_Layer_Name" ) (if (and (setq obj (tblobjname "layer" old)) (setq enx (entget obj)) ) (entmod (subst (cons 2 new) (assoc 2 enx) enx)) ) (princ) ) 1 Quote Share this post Link to post Share on other sites
JovanG 5 Posted April 6 20 hours ago, Lee Mac said: Rather than iterating over the entire Layers Collection to rename a single layer, you can obtain it directly using tblobjname, e.g.: Thank you Lee Mac! An easier way to get it. I Didn't know tblobjname function Quote Share this post Link to post Share on other sites
BIGAL 588 Posted April 6 You can use it with Blocks and text styles. Quote Share this post Link to post Share on other sites