| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Автоматизировать переименование слоев

Автоматизировать переименование слоев

Ответ
Поиск в этой теме
Непрочитано 17.11.2017, 00:01 #1
Автоматизировать переименование слоев
d.mOnII
 
Проектирование
 
Минск
Регистрация: 22.01.2013
Сообщений: 123

Добрый день, коллеги!
Столкнулся со следующей проблемой
проектируем мы с использованием Xref, потом биндим и получаем чудо названия слоев по маске: {ИмяФайла}$0${СлойXref}
т.е. если Xref назывался ED_L1_0X
а слой в этом чертеже: EM5_CT
то по итогу после слияния мы получим чудо слой: ED_L1_0X$0$EM5_CT

Но тут Заказчик постебался и сказал что у него свои собственные стандарты, которые говорят о том что все слои должны быть названы по его хотелкам (собственно оно и правильно, наверно, он же платит - он и музыку заказывает), теперь необходимо ручками абсолютно все слои переименовать и все названия файла в имени слоя переименовать на EM либо AR

Можно ли как-то автоматизировать сие счастье?
в один чертеж могут быть подгружены файлы с разными именами:
ED_L1_CT0X
ED_L1_EQ0X
ED_L1_ER0X
ED_L1_EL0X
в каждом файле могут быть повторяющиеся слои, такие как:
ED_Eq
ED_Line
ED_Eq_Text

т.к. слои повторяются то желательно в результате переименования получить вместо:
ED_L1_CT0X$0$ED_Eq_Text -> -> -> EM_ED_Eq_Text$0$ED_L1_CT0X
ED_L1_CT0X$0$ED_Line -> -> -> EM_ED_Line$0$ED_L1_CT0X
ED_L1_CT0X$0$ED_Eq -> -> -> EM_ED_Eq$0$ED_L1_CT0X
ED_L1_EQ0X$0$ED_Eq_Text -> -> -> EM_ED_Eq_Text$0$ED_L1_EQ0X
ED_L1_EQ0X$0$ED_Line -> -> -> EM_ED_Line$0$ED_L1_EQ0X
ED_L1_EQ0X$0$ED_Eq -> -> -> EM_ED_Eq$0$ED_L1_EQ0X

т.е. перед названием слоя добавляем пользовательские символы ("EM_" - электроснабжение)
затем прописываем слой исходного Xref'a (ED_Eq_Text)
после этого пихаем имя исходного Xref'a (ED_L1_CT0X)
в качестве разделителя используем все тот же разделитель Акада ($0$)

можно имя опустить, но тогда должен быть счетчик слоев и если слои разных файлов одинаковы, то добавить индекс 01, 02, 03 и т.д. (в зависимости от одинаковых слоев в прикрепленных файлах)
Просмотров: 3032
 
Непрочитано 17.11.2017, 02:11
#2
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Признаюсь, недосуг вникать в эти правила переименования слоев - в глазах зарябило от одного взгляда на все это дело. А уж от мысли писать такой код мурашки побежали...

Но раз есть идеи (или предположения?) о том, что программно можно наладить в этом деле систему, то предложу один доступный вариант. Сохраняем файл в формате dxf, открываем его в текстовом редакторе, желательно, попродвинутей, например, Notepad++ или Sublime Text. Используем там механизмы поиска и замены (Ctrl+H), сохраняем. Затем открываем его опять а Автокаде и пересохраняем обратно в dwg.
skkkk вне форума  
 
Автор темы   Непрочитано 17.11.2017, 02:19
#3
d.mOnII

Проектирование
 
Регистрация: 22.01.2013
Минск
Сообщений: 123
Отправить сообщение для d.mOnII с помощью Skype™


не вариант(((( комплект РД с такими файлами состоит из 40-50 листов.
Таких комплектов 8....
идея создать шаблон замен - и через лиспу загонять - это одно, а вот каждый слой в каждом файле - ....

файлов к примеру 40
разделов - 8
итого 320 чертежей
внешних ссылок в каждый файл подгружается минимум 5, а то и 10 - итого 320*5=1600
слоев минимум 6 (при этом в разных файлах есть помимо одинаковых - еще и разные слои...), в пределах одного комплекта - до 30 слоев разных, ну да ладно, остановимся на 6-ти)))
ИТОГО:
1600*6=9600 раз нажать поиск и замена
добавим открытие сохранение и пересохранение - пачка операций, которую необходимо повторить 320 раз

короче - проще заново создать файлы РД без внешних ссылок))))))))))))))))))
печатаю и плачу ;(;(;(
d.mOnII вне форума  
 
Непрочитано 17.11.2017, 06:34
| 1 #4
Setvar


 
Регистрация: 10.02.2007
Москва
Сообщений: 611


За такие исходные названия слоев вообще надо контору разогнать.
Setvar вне форума  
 
Непрочитано 17.11.2017, 06:49
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,835


Цитата:
Сообщение от d.mOnII Посмотреть сообщение
Можно ли как-то автоматизировать сие счастье?
Можно. Командными методами, модификациями ename, изменением имени ActiveX-указателей. В чем собственно трудность?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.11.2017, 09:17
#6
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
В чем собственно трудность?
В том, что судя по топикам автора, он не знает языков программирования и ищет доброго человека который сделает все за него. "Просто так"(с)
Boxa вне форума  
 
Непрочитано 17.11.2017, 09:30
#7
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,039


у заказчика стандарт вдруг появился - когда исполнители уже сделали сотни чертежей проекта?
Сергей812 вне форума  
 
Непрочитано 17.11.2017, 10:16
#8
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


Цитата:
Сообщение от Boxa Посмотреть сообщение
В том, что судя по топикам автора, он не знает языков программирования и ищет доброго человека который сделает все за него. "Просто так"(с)
Есть такая партия такой человек. Гугль помог найти: http://forums.augi.com/showthread.ph...ifferent-names
kp+ вне форума  
 
Непрочитано 17.11.2017, 13:09
#9
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Массовое переименование слоев в группе файлов

Групповое переименование слоев (rename layers)
skkkk вне форума  
 
Непрочитано 17.11.2017, 15:42
#10
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,679


Цитата:
Сообщение от d.mOnII Посмотреть сообщение
проектируем мы с использованием Xref, потом биндим и получаем чудо названия слоев по маске: {ИмяФайла}$0${СлойXref}
Так сказать Быстролисп, который переименует слои, удовлетворяющие вышеуказанному критерию, пропишет к объекту слоя старое и новое имена. Повторное переименование этим макросом не получится, поребуется удаление данных их объекта слоя. При добавлениии новых слоёв, которые должны быть переименованы согласно критерию и которые будут дублироваться, получают индексный указатель "_01/2..."

Код:
[Выделить все]
 
;*******************************************************************************************************
;
;                   				                          Written by koMon 17.11.2017
;
;*******************************************************************************************************

(defun c:Change_Custom_Layers_Names ()
	(setq acadObj (vlax-get-acad-object)
    	  doc (vla-get-ActiveDocument acadObj)
		  modelSpace (vla-get-ModelSpace doc)
		  dwg_Layers_Set (vla-get-Layers doc)
		  Dwg_Set_Items_number (vlax-get dwg_Layers_Set 'Count)
		  dwg_Layers_List '()
		  Set_index 0
	)
	(vlax-for set_Item dwg_Layers_Set
		(if (and
				(/= (vlax-get set_Item 'Name) "0")
				(/= (vlax-get set_Item 'Name) "Defpoints")
			)
				(setq dwg_Layers_List (cons (cons (vlax-get set_Item 'Name) set_Item) dwg_Layers_List))
		)
	)
	(if dwg_Layers_List
		(foreach dwg_layer dwg_Layers_List
			(setq Layer_Name (print (car dwg_layer))
				  Layer_Name_List (vl-string->list Layer_Name)
				  Layer_Ending_Part (vl-list->string (cdddr (member 36 Layer_Name_List)))
				  Layer_Starting_Part (vl-list->string (reverse (cdddr (member 36 (reverse Layer_Name_List)))))
				  New_Layer_Name (strcat "EM" "_" Layer_Ending_Part "$0$" Layer_Starting_Part)
			)
			(if (not (vlax-ldata-list (cdr dwg_layer)))
				(if (and
						(/= Layer_Starting_Part "")
						(/= Layer_Ending_Part "")
						(vl-string-search "$0$" (car dwg_layer))
					)
						(if (not (assoc New_Layer_Name dwg_Layers_List))
							(progn
								(vla-put-Name (cdr dwg_layer) New_Layer_Name)
								(vlax-ldata-put (cdr dwg_layer) "Was_Name" Layer_Name)
								(vlax-ldata-put (cdr dwg_layer) "Now_Name" New_Layer_Name)
								(princ (strcat "\nLayer Has Been Renamed to: \"" New_Layer_Name "\""))
							)
							(progn
								(setq Layer_Index 1
									  Layer_Index_Str "01"
								)
								(while (assoc (strcat New_Layer_Name "_" Layer_Index_Str) dwg_Layers_List)
									(setq Layer_Index (1+ Layer_Index)
										  Layer_Index_Str (if (< Layer_Index 10) (strcat "0" (itoa Layer_Index)) (itoa Layer_Index))
									)
								)
								(vla-put-Name (cdr dwg_layer) (strcat New_Layer_Name "_" Layer_Index_Str))
								(vlax-ldata-put (cdr dwg_layer) "Was_Name" Layer_Name)
								(vlax-ldata-put (cdr dwg_layer) "Now_Name" (strcat New_Layer_Name "_" Layer_Index_Str))
								(princ (strcat "\nLayer Has Been Renamed to: \"" (strcat New_Layer_Name "_" Layer_Index_Str) "\""))
							)
						)
				 	 	(princ "\nLayer Needs Not to Be Renamed!")
				)
				(princ "\nLayer Has Already Been Renamed!")
			)
		)
		(princ "\nNo Layers to Rename.")
	)
	(princ)
)


Последний раз редактировалось koMon, 21.11.2017 в 11:02.
koMon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Автоматизировать переименование слоев

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Групповое переименование слоев (rename layers) ElectroBOG AutoCAD 5 27.09.2023 07:28
1000 слоев. Нормально или плохо? И другие аспекты правильного черчения в автокаде Vova AutoCAD 96 07.09.2019 16:26
Как объединить два файла dwg в один с переносом используемых слоев? panterita AutoCAD 8 19.08.2014 16:25
Массовое переименование слоев в группе файлов nik_mb Готовые программы 19 26.12.2011 17:20
Переименование стандартных слоев в AutoCAD Architecture 2008 Кристи Вертикальные решения на базе AutoCAD 2 14.10.2008 15:22