Nenad Mutavdzic Posted December 2, 2015 Posted December 2, 2015 I'm working on the translation of a large number of Layers, from existing to new ones, according to exactly defined pattern. And all this for 1,000 drawings. Using command Layer Translator (LAYTRANS), is it possible to export Layer Translation Mappings as xls or txt file? XLS or TXT files are more editable and easier for work. Also, is it possible to import a Layer Translation Mappings into Auto CAD as xls or txt file? Is there a batch file which can convert layers in large number of drawings at the same time? Thanks Quote
BIGAL Posted December 3, 2015 Posted December 3, 2015 Yes Yes and YES others will comment re "Laytrans" Yes1 Via lisp you can redefine all layers reading a text file that has all the preset names in it. old new col LT AB ABUTMENT 1 Continuous ALPL ALUMINIUM PLUG 1 Continuous ARR ARROW 1 Continuous BOK BACK OF KERB 252 DASHED Yes2 1000 files a little bit of work but using a script very doable and you will be surprised how fast. open dwg1 (load "convertlayers") close Y open dwg2 (load "convertlayers") close Y open dwg3 (load "convertlayers") close Y open dwg41 (load "convertlayers") close Y open dwg51 (load "convertlayers") close Y Yes3 some sample code (setq xxt 1) (setq fname (open "P:\\Autodesk\\lisp\\layercodes.txt" "r")) (while (setq layercode (read-line fname)) (setq J 22) (setq ans " ") (While (= ans " ") (setq ans (substr layercode J 1)) (setq j (- j 1)) ) ;end while (setq Lname (substr layercode 1 (+ 1 J))) (setq Laycol (atoi (substr layercode 23 3))) ; color is only 1 character (setq J 37) (setq ans " ") (While (= ans " ") (setq ans (substr layercode J 1)) (setq j (- j 1)) ) ;end while (setq j (- (+ j 2) 27)) (setq Laylt (substr layercode 27 J)) (princ xxt) (vlax-for each layer (if (= lname (vla-get-name each)) (progn (vla-put-linetype each laylt) (vla-put-color each laycol) (vla-put-name each (strcat "EX_" lname)) ) ;progn ) ; if ); for (setq xxt (+ xxt 1)) ) ;end file while (close fname) (alert "EX added to Layers ") Quote
Nenad Mutavdzic Posted December 4, 2015 Author Posted December 4, 2015 Thank you very much for your reply and advice. Unfortunately, I have not worked lisp programming until now. I'll have to first learn how to work with them... Quote
BIGAL Posted December 4, 2015 Posted December 4, 2015 Post a sample of what you want is the sample of old-new what you want ? Quote
Nenad Mutavdzic Posted December 4, 2015 Author Posted December 4, 2015 My intention is to to write table Translation Layer Mapping in NotePad, such as: Old Layer Name New Layer Name Color Linetype Lineweight H---AP-S H_Geraete 7 Continuous 0,25 H---HK-Z H_Heizkoerper 10 Continuous 0,35 H---VL-Z H_Vorlauf 10 Continuous 0,35 H---RL-Z H_Ruecklauf 160 Continuous 0,35 H---AP-T H_Text-Allgemein 7 Continuous 0,25 … … In this way I can easily add the new conversions and edit existing ones. The final table in NotePad I would import somehow in the dwg-file, in other to get layer conversion, from old to new ones ... Is it possible? Quote
BIGAL Posted December 6, 2015 Posted December 6, 2015 (edited) The code above uses fixed spacing, but you could use a csv file also there is lots of read csv and split into variables such as ReadCSV-V1-3.lsp by Lee-mac H---AP-S H_Geraete 7 Continuous 0.25 H---HK-Z H_Heizkoerper 10 Continuous 0.35 H---VL-Z H_Vorlauf 10 Continuous 0.35 H---RL-Z H_Ruecklauf 160 Continuous 0.35 H---AP-T H_Text-Allgemein 7 Continuous 0.25 Edited December 7, 2015 by BIGAL Quote
Nenad Mutavdzic Posted December 7, 2015 Author Posted December 7, 2015 Thank you very much. It's really useful. Quote
BIGAL Posted December 7, 2015 Posted December 7, 2015 (edited) Try this it seemed to work for me can use excel for layer list easier to make into a csv. test data H---AP-S,H_Geraete,7,Continuous,0.25 H---HK-Z,H_Heizkoerper,10,Continuous,0.35 H---VL-Z,H_Vorlauf,10,Continuous,0.35 H---RL-Z,H_Ruecklauf,160,Continuous,0.35 H---AP-T,H_Text-Allgemein,7,Continuous,0.25 ; LAYERS RENAME LT COLOR FROM A CSV FILE ; BY ALAN H (DEFUN ah:RELAYS ( / layer fname newname laycol lname laylt layltwt Lst str) (setq layer (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))) ; open database get layers (setq fname (open "C:\\temp\\test.csv" "r")) (while (setq str (read-line fname)) (setq lst (cons (LM:csv->lst str "," 0) lst)) (reverse lst) (setq lst (nth 0 lst)) (setq lname (nth 0 lst)) (setq newname (nth 1 lst)) (setq laycol (nth 2 lst)) (setq laylt (nth 3 lst)) (setq layltwt (nth 4 lst)) (vlax-for each layer (if (= lname (vla-get-name each)) (progn (vla-put-linetype each laylt) (vla-put-color each laycol) (vla-put-name each newname) ; (vla-put-lineweight each layltwt); check variable name ) ;progn ) ; if ); for (setq lst nil) ) ;end file while (close fname) ) ; defun ;; Read CSV - Lee Mac ;; Parses a CSV file into a matrix list of cell values. ; Alan H removed open file in this defun and do all in preference to line by line in other defun ;; CSV -> List - Lee Mac ;; Parses a line from a CSV file into a list of cell values. ;; str - [str] string read from CSV file ;; sep - [str] CSV separator token ;; pos - [int] initial position index (always zero) (defun LM:csv->lst ( str sep pos / s ) (cond ( (not (setq pos (vl-string-search sep str pos))) (if (wcmatch str "\"*\"") (list (LM:csv-replacequotes (substr str 2 (- (strlen str) 2)))) (list str) ) ) ( (or (wcmatch (setq s (substr str 1 pos)) "\"*[~\"]") (and (wcmatch s "~*[~\"]*") (= 1 (logand 1 pos))) ) (LM:csv->lst str sep (+ pos 2)) ) ( (wcmatch s "\"*\"") (cons (LM:csv-replacequotes (substr str 2 (- pos 2))) (LM:csv->lst (substr str (+ pos 2)) sep 0) ) ) ( (cons s (LM:csv->lst (substr str (+ pos 2)) sep 0))) ) ) (defun LM:csv-replacequotes ( str / pos ) (setq pos 0) (while (setq pos (vl-string-search "\"\"" str pos)) (setq str (vl-string-subst "\"" "\"\"" str pos) pos (1+ pos) ) ) str ) (PRINC) (VL-LOAD-COM) (AH:RELAYS) Edited December 7, 2015 by BIGAL Quote
Nenad Mutavdzic Posted December 7, 2015 Author Posted December 7, 2015 Excellent, It works, thank you. How to multiply it to 1000 files with similar but not the same layers? And a aditional question: What does "r" mean, in the line: (setq fname (open "C:\\temp\\test.csv" "r"))? Quote
BIGAL Posted December 8, 2015 Posted December 8, 2015 Easy one first "R" is read "w" is write "A" append to file 1000 files two parts If you make a data file with all layer combos possible it will work our data files has around 200+ but a typical dwg is about 100. When I find something that has not worked I add it to the list and run again Use a script file there are various ways to make a script this depends on how complex your directories are. 1000 maybe do overnight, I would do in batches. open dwg1 (load "Layers rename") close Y open dwg2 (load "Layers rename") close Y open dwg3 (load "Layers rename") close Y open dwg4 (load "Layers rename") close Y 3rd part different csv's modify code to include correct data file open dwg4 (load "Layers rename")(AH:relays "list1") close Y Quote
Nenad Mutavdzic Posted December 8, 2015 Author Posted December 8, 2015 I've already made a CSV file with all possible layer name conversions. There are over 500 conversions. Lisp RELAYS, you sent me, works when I load it in each of the drawings individually, but it performs the conversion for only the first 4 layers. Other layers remain unchanged. Regarding the multiplication to 1000 files, one more question: In the line open dwg1 (load "Layers rename") close Y dwg1 - should I write the complete path and name of the file? Once again a big thank you for the effort and good will to give me help. I have to learn the basics of writing Lisp. Can you give me a recommendation for some tutortial Quote
BIGAL Posted December 9, 2015 Posted December 9, 2015 Not sure why it stops after 4 post say 10 lines of csv, can test then Yes dwg1 would be "F:\projects\freds bigshed\dwg1234ba" you may need double backslashes the space in directory names can cause problems. How spread out are the dwg files directory wise if only a few do this. Bottom left windows START cmd this takes you to the windows command prompt say F: CD \projects\freds bigshed\ dir *.dwg >dwglst /b Exit You can open dwglst which is a list of your dwgs use this as a start to make a script. I use Word to edit use search/replace and the ^p is end of line, so ^p replace with ^p open. Try it Quote
Nenad Mutavdzic Posted December 9, 2015 Author Posted December 9, 2015 A new problem in Command Prompt: >C:\TEMP\DWG\dir *.dwg >dwglst /b ' C:\TEMP\DWG\dir' is not recognized as an internal or external command, operable program or batch file. Long time ago, I learnt DOS, but I forgot everything. Thanks anyway. Quote
Nenad Mutavdzic Posted December 9, 2015 Author Posted December 9, 2015 Lisp RELAYS steel works only for the first 4 layers. Other layers remain unchanged. Here are the list of 10 layers: lname newname laycol laylt layltwt H---AP-T H_Text-Allgemein 1 Continuous 0.25 H---AP-Z H_Geraete 2 Continuous 0.35 H---FBV-Z H_FB-Vorlauf 3 Continuous 0.35 H---HK-Z H_Heizkoerper 4 Continuous 0.35 H---KR-Z K_Kaltwasser Ruecklauf 5 Continuous 0.25 H---KV-Z K_Kaltwasser Vorlauf 6 Continuous 0.25 H---LT-T H_L-T-V 7 Continuous 0.35 H---LT-V H_L-T-V 8 Continuous 0.35 H---RL-Z H_Ruecklauf 9 Continuous 0.35 H---VL-Z H_Vorlauf 10 Continuous 0.25 Quote
BIGAL Posted December 10, 2015 Posted December 10, 2015 DOS go to START then CMD The data has Tabs the program looks for a comma two ways can change lee-mac section to look for a tab or bring into Word search/replace look for ^t replace with , H---AP-T,H_Text-Allgemein,1,Continuous,0.25 H---AP-Z,H_Geraete,2,Continuous,0.35 H---FBV-Z,H_FB-Vorlauf,3,Continuous,0.35 H---HK-Z,H_Heizkoerper,4,Continuous,0.35 H---KR-Z,K_Kaltwasser Ruecklauf,5,Continuous,0.25 H---KV-Z,K_Kaltwasser Vorlauf,6,Continuous,0.25 H---LT-T,H_L-T-V,7,Continuous,0.35 H---LT-V,H_L-T-V,8,Continuous,0.35 H---RL-Z,H_Ruecklauf,9,Continuous,0.35 H---VL-Z,H_Vorlauf,10,Continuous,0.25 Quote
Nenad Mutavdzic Posted December 10, 2015 Author Posted December 10, 2015 I see... It was part of XLS-file. In lisp RELAYS I put CSV-file with commas... lname,newname,laycol,laylt,layltwt H---AP-T,H_Text-Allgemein,1,Continuous,0.25 H---AP-Z,H_Geraete,2,Continuous,0.35 H---FBV-Z,H_FB-Vorlauf,3,Continuous,0.35 H---HK-Z,H_Heizkoerper,4,Continuous,0.35 H---KR-Z,K_Kaltwasser Ruecklauf,5,Continuous,0.25 H---KV-Z,K_Kaltwasser Vorlauf,6,Continuous,0.25 H---LT-T,H_L-T-V,7,Continuous,0.35 H---LT-V,H_L-T-V,8,Continuous,0.35 H---RL-Z,H_Ruecklauf,9,Continuous,0.35 H---VL-Z,H_Vorlauf,10,Continuous,0.25 But, It still works only for the first 4 layers... I am making mistake somewhere...but it doesn't matter. Thank you very much Quote
BIGAL Posted December 11, 2015 Posted December 11, 2015 It worked for me double check your file maybe a space on end of lines. Quote
Nenad Mutavdzic Posted December 14, 2015 Author Posted December 14, 2015 Ok, I'll check. Thank you. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.