Layer translate over a directory

Layer translate over a directory

Anonymous
Not applicable
771 Views
3 Replies
Message 1 of 4

Layer translate over a directory

Anonymous
Not applicable

Hey everyone, 

I have hundreds of drawings to translate layers in, I have found some code that will go through a folder of drawings and freeze/thaw layers. I was hoping that some one could direct me on how to change it so I can insert a list of the layers I want changed to what. 

If anyone has any other suggestions I would love to hear them. 

Thanks  

0 Likes
772 Views
3 Replies
Replies (3)
Message 2 of 4

Anonymous
Not applicable
(defun C:CMLP ( / sh folder folderobject result);;Put temp Variables
(vl-load-com)
(defun LM:str->lst ( str del / len lst pos )
    (setq len (1+ (strlen del)))
    (while (setq pos (vl-string-search del str))
	   (setq lst (cons (substr str 1 pos) lst))
           (setq str (substr str (+ pos len)))
    )
    (reverse (cons str lst))
)
(setq sh (vla-getInterfaceObject (vlax-get-acad-object) "Shell.Application" ))
(setq folder (vlax-invoke-method sh 'BrowseForFolder 0 "" 0 ))
(vlax-release-object sh)
   (if folder
      (progn
        (setq folderobject (vlax-get-property folder 'Self))
        (setq result (vlax-get-property FolderObject 'Path))
        (vlax-release-object folder)
        (vlax-release-object FolderObject)
	(setq Files_Folder (vl-directory-files result "*.dwg"))


	
	(setq LN (getstring T "\nEnter Layer Name(s) to Freeze seperated by <,> : "))
	(setq LTF (LM:str->lst LN ","))
	(setq LN (getstring T "\nEnter Layer Name(s) to Thaw seperated by <,> : "))
	(setq LTT (LM:str->lst LN ","))



	
	;(vl-cmdf "save" (strcat (getvar "dwgprefix") (getvar "dwgname")))
	(vl-cmdf "save" (strcat (getvar "dwgprefix") (getvar "dwgname")) "Y")
   	(setq SDI_Val (getvar "SDI"))
   	(setq LISPI_Val (getvar "LISPINIT"))
   	(vl-cmdf "SDI" 1)
   	(vl-cmdf "LISPINIT" 0)
	(setq n 0)
	(while (< n (length Files_Folder))
	   (command "fileopen" (strcat result "\\" (nth n Files_Folder)))
	   (setvar 'cmdecho 0)

	  
	   (foreach L LTF (vl-catch-all-apply 'vl-cmdf (list "-layer" "Freeze" L "")))
	   (foreach L LTT (vl-catch-all-apply 'vl-cmdf (list "-layer" "Thaw" L "")))


	  
	   (vl-cmdf "save" (strcat result "\\" (nth n Files_Folder)))
	   (setq n (+ 1 n))
	   (setvar 'cmdecho 1)
        );while
      );progn
   );if
(vl-cmdf "LISPINIT" LISPI_Val)
(vl-cmdf "SDI" SDI_Val)
(princ)
)
0 Likes
Message 3 of 4

ronjonp
Mentor
Mentor

You can input your lists like so below. Make sure to comment out the input.

;;(setq ln (getstring t "\nEnter Layer Name(s) to Freeze seperated by <,> : "))
(setq ltf '("layername1" "Layername2"))
;;(setq ln (getstring t "\nEnter Layer Name(s) to Thaw seperated by <,> : "))
(setq ltt '("layername3" "Layername4")) 

 

0 Likes
Message 4 of 4

dbhunia
Advisor
Advisor

If you want to hard coded the program then you do not need the entire program ........

Use a part of the program only.......

 

(defun C:CMLP ( / sh folder folderobject result);;Put temp Variables
(vl-load-com)
(setq sh (vla-getInterfaceObject (vlax-get-acad-object) "Shell.Application" ))
(setq folder (vlax-invoke-method sh 'BrowseForFolder 0 "" 0 ))
(vlax-release-object sh)
   (if folder
      (progn
        (setq folderobject (vlax-get-property folder 'Self))
        (setq result (vlax-get-property FolderObject 'Path))
        (vlax-release-object folder)
        (vlax-release-object FolderObject)
		(setq Files_Folder (vl-directory-files result "*.dwg"))
	
		(setq LTF '("Layer1" "Layer2" "Layer3")) ;;;Enter Layer Name(s) to Freeze
		(setq LTT '("Layer4" "Layer5" "Layer6")) ;;;Enter Layer Name(s) to Thaw
		;(vl-cmdf "save" (strcat (getvar "dwgprefix") (getvar "dwgname")))
		(vl-cmdf "save" (strcat (getvar "dwgprefix") (getvar "dwgname")) "Y")
		(setq SDI_Val (getvar "SDI"))
		(setq LISPI_Val (getvar "LISPINIT"))
		(vl-cmdf "SDI" 1)
		(vl-cmdf "LISPINIT" 0)
		(setq n 0)
		(while (< n (length Files_Folder))
		   (command "fileopen" (strcat result "\\" (nth n Files_Folder)))
		   (setvar 'cmdecho 0)
		   (foreach L LTF (vl-catch-all-apply 'vl-cmdf (list "-layer" "Freeze" L "")))
		   (foreach L LTT (vl-catch-all-apply 'vl-cmdf (list "-layer" "Thaw" L "")))
		   (vl-cmdf "save" (strcat result "\\" (nth n Files_Folder)))
		   (setq n (+ 1 n))
		   (setvar 'cmdecho 1)
		);while
	  );progn
   );if
(vl-cmdf "LISPINIT" LISPI_Val)
(vl-cmdf "SDI" SDI_Val)
(princ)
)

Debashis Bhunia
Co-Founder of Geometrifying Trigonometry(C)
________________________________________________
Walking is the First step of Running, Technique comes Next....
0 Likes