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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Добавление префикса/суффикса к имени слоя, в соответствии со свойством примитива, расположенного на слое

Добавление префикса/суффикса к имени слоя, в соответствии со свойством примитива, расположенного на слое

Ответ
Поиск в этой теме
Непрочитано 28.10.2016, 14:34 #1
Добавление префикса/суффикса к имени слоя, в соответствии со свойством примитива, расположенного на слое
Browning Zed
 
Регистрация: 17.01.2014
Сообщений: 97

Всем доброго дня. Суть: существует слой с определенным именем. К названию этого слоя нужно добавить префикс или суффикс, в этом качестве должны выступать свойства примитивов. Если на слое лежит линия, префиксом/суффиксом является тип линии. Если штриховка, то имя штриховки. Если дин. блок имеет состояния видимости, то в префиксе/суффиксе прописывается название состояния видимости. Есть ли пути решения этого вопроса?
Просмотров: 7126
 
Непрочитано 28.10.2016, 16:08
#2
Кулик Алексей aka kpblc
Moderator

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


Есть. Либо писать программу, либо забить.
Что делать, если на одном слое находятся два типа объектов (дин.блок и штриховка)? А что делать, если объекту принудительно поменяли тип линии? Ну и т.д.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.10.2016, 16:23
#3
Browning Zed


 
Регистрация: 17.01.2014
Сообщений: 97


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Есть. Либо писать программу, либо забить.
Если бы я дружил с программированием, вряд ли стал задавать подобные вопросы.
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Что делать, если на одном слое находятся два типа объектов (дин.блок и штриховка)?
В идеале, для каждой группы объектов лежащих на исходном слое, в процессе переименования создается новый слой. Исходный слой удаляется.
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А что делать, если объекту принудительно поменяли тип линии?
Не понял сути вопроса. Слой ведь переименовывается по тому типу линий, который назначен до момента переименования.
Browning Zed вне форума  
 
Непрочитано 28.10.2016, 16:34
#4
Кулик Алексей aka kpblc
Moderator

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


В любом случае - штатных средств я не знаю. Могу предложить только быстрый выбор, копирование свойств и... И все, наверное.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.10.2016, 16:43
#5
Browning Zed


 
Регистрация: 17.01.2014
Сообщений: 97


Быстрым выбором долго, объектов слишком много.
В таком случае, если не составит труда, можно ли переместить данный топик в раздел "Программирование"?
Browning Zed вне форума  
 
Непрочитано 28.10.2016, 16:46
#6
xmih


 
Регистрация: 07.05.2009
Сообщений: 182


... либо ручками все префиксы/суффиксы дописать.
А в чём полезность данной "черте-базы"? Что то оскудоумил я. Не хватает фантазии придумать ситуацию, в которой Ваша хотелка была бы удобоприменима. А вдруг мне это тоже очень сильно надо?
xmih вне форума  
 
Автор темы   Непрочитано 28.10.2016, 16:58
#7
Browning Zed


 
Регистрация: 17.01.2014
Сообщений: 97


Цитата:
Сообщение от xmih Посмотреть сообщение
... либо ручками все префиксы/суффиксы дописать.
А в чём полезность данной "черте-базы"? Что то оскудоумил я. Не хватает фантазии придумать ситуацию, в которой Ваша хотелка была бы удобоприменима. А вдруг мне это тоже очень сильно надо?
Задача перегнать топографические планы в набор данных для ГИС-систем. Работа с данными в ГИС и САПР структурно различается. В САПР несколько групп объктов могут лежать на одном слое. В случае с ГИС (не всегда, но как правило) каждой группе присваивается свой слой. Связано это с отображением групп объектов (представление их на карте) и разграничением семантики этих групп.
Browning Zed вне форума  
 
Непрочитано 28.10.2016, 17:04
#8
xmih


 
Регистрация: 07.05.2009
Сообщений: 182


А. Снова планы. Щас найду одну тут темку. На мой взгляд, в проблемах ваших есть что то общее. Может, чего-нибудь полезного там проскользнуло.
http://forum.dwg.ru/showthread.php?t=88911
А с этими слоями в автокаде..., мне кажется, тупиковый будет путь.

----- добавлено через ~6 мин. -----
А что из себя представляет перегонный аппарат? Программный, или извлечение данных ручками?
xmih вне форума  
 
Непрочитано 28.10.2016, 17:20
1 | #9
kp+

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


Цитата:
Сообщение от Browning Zed Посмотреть сообщение
К названию этого слоя нужно добавить префикс или суффикс, в этом качестве должны выступать свойства примитивов.
В Toolpack есть отдаленный аналог - распределение объектов по слоям в соответствии с типом объекта. Например, все выбранные линии переместятся в слой LINE, все круги - в слой CIRCLE и т.д.
Команда OLT.

Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
писать программу
Заготовка тут: http://forums.autodesk.com/t5/visual...c/td-p/3840760
Цитата:
Сообщение от Browning Zed Посмотреть сообщение
В идеале, для каждой группы объектов лежащих на исходном слое, в процессе переименования создается новый слой. Исходный слой удаляется.
погоня за идеалом обычно приводит в раздел "поиск исполнителей"

PS Вот еще нашел: http://ad-cad.narod.ru/Help-Paper.htm

Последний раз редактировалось kp+, 28.10.2016 в 17:28.
kp+ вне форума  
 
Автор темы   Непрочитано 28.10.2016, 17:30
#10
Browning Zed


 
Регистрация: 17.01.2014
Сообщений: 97


Цитата:
Сообщение от xmih Посмотреть сообщение
Снова планы. Щас найду одну тут темку. На мой взгляд, в проблемах ваших есть что то общее. Может, чего-нибудь полезного там проскользнуло.
http://forum.dwg.ru/showthread.php?t=88911
С вышеописанной проблемой вряд ли столкнусь, примерно прикинул - слоёв 100 должно получиться. Дело в том, что файлов DWG очень много.
Цитата:
Сообщение от xmih Посмотреть сообщение
А что из себя представляет перегонный аппарат? Программный, или извлечение данных ручками?
В исходном файле вводим команду => слои переименовываются.
Цитата:
Сообщение от kp+ Посмотреть сообщение
В Toolpack есть отдаленный аналог - распределение объектов по слоям в соответствии с типом объекта. Например, все выбранные линии переместятся в слой LINE, все круги - в слой CIRCLE
В том то и дело, что объектов типа LINE может быть множество. Линейные объекты - это и водопровод, и газопровод, и ЛЭП, все они должны быть разбиты на группы. А вот за ссылку, спасибо, сейчас опробую
Цитата:
Сообщение от kp+ Посмотреть сообщение
Эх, не то, что нужно. В этом лиспе префикс задается каждому слою. В итоге из одних неупорядочных данных, получаю другие неупорядоченные.
Цитата:
Сообщение от kp+ Посмотреть сообщение
PS Вот еще нашел: http://ad-cad.narod.ru/Help-Paper.htm
Если я правильно понял из описания - это прога для работы в пространстве Листа. Тоже не подходит.

Последний раз редактировалось Browning Zed, 28.10.2016 в 17:44.
Browning Zed вне форума  
 
Непрочитано 28.10.2016, 18:14
#11
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


это всё проще делается. надеюсь хоть в Civil/Map работаете?
trir вне форума  
 
Автор темы   Непрочитано 28.10.2016, 18:24
#12
Browning Zed


 
Регистрация: 17.01.2014
Сообщений: 97


Как правило - топография в Civil, работа с БД ГИС в MapInfo. Можно с ГИС и в Цивиле работать, но там это дюже неудобно организовано.
Browning Zed вне форума  
 
Непрочитано 28.10.2016, 20:01
#13
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


На оборот в MapInfo работа с БД через одно место!
Почему в Civil сразу не работать через FDO?
trir вне форума  
 
Автор темы   Непрочитано 28.10.2016, 20:14
#14
Browning Zed


 
Регистрация: 17.01.2014
Сообщений: 97


trir, я может и не против в Циве работать, но остальных коллег я не смогу переубедить туда пересесть. А рабочая база - общая. Но это всё лирика. По факту же имеется куча топографических планов в dwg, которые толком никак не структурированы послойно. Задача перегнать их в ГИС. А уж в Civil или MapInfo, дело десятое.
Browning Zed вне форума  
 
Непрочитано 28.10.2016, 20:16
#15
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Цитата:
Задача перегнать их в ГИС
а конкретней?
trir вне форума  
 
Автор темы   Непрочитано 28.10.2016, 20:26
#16
Browning Zed


 
Регистрация: 17.01.2014
Сообщений: 97


Интегрировать в ГИС послойно. Водопровод в слой с визуальным отображением (типом линии) водопроводов, полукустарники в полукустарники и т.д.
Browning Zed вне форума  
 
Непрочитано 28.10.2016, 21:14
#17
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


СУБД какая?
trir вне форума  
 
Автор темы   Непрочитано 28.10.2016, 21:23
#18
Browning Zed


 
Регистрация: 17.01.2014
Сообщений: 97


СУБД, как таковая, отсутствует. Базой данных является файл MapInfo - *TAB.
Browning Zed вне форума  
 
Непрочитано 28.10.2016, 21:25
#19
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Цитата:
СУБД, как таковая, отсутствует. Базой данных является файл MapInfo - *TAB.
facepalm, какая же это БД - это позорище!
Ставте PostGIS или MS SQL Server, создаёте там FDO-хранилище и в путь!
trir вне форума  
 
Автор темы   Непрочитано 28.10.2016, 21:35
#20
Browning Zed


 
Регистрация: 17.01.2014
Сообщений: 97


Offtop: Послушай, бро. Я живу в небольшом уральском городе, где численность населения составляет 10000 чел. Какой PostGIS, какой MS SQL Server? Где я смогу найти контингент разбирающихся в этих вещах? Дай бог бы в MapInfo научить людей работать.
По теме же хотелось услышать как, таки, переписать слои с префиксом или суффиксом.
Browning Zed вне форума  
 
Непрочитано 28.10.2016, 21:40
#21
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Topobase работает с MS SQL Server

надо просто сделать стандарт - на каких слоях, что должно лежать и сделать макрос который будет проверять и раскидывать

И вообще, у объектов Civil'а слой прописывается в стилях, их в принципе нельзя не на том слое создать!
trir вне форума  
 
Автор темы   Непрочитано 28.10.2016, 21:49
#22
Browning Zed


 
Регистрация: 17.01.2014
Сообщений: 97


Это все понятно, и я не прочь работать в Civil. Но что мне делать с уже накопленой базой топопланов? Выбрасывать всё на свалку? Они все выполнены в обычном Автокаде и толком не разделены по слоям. Каким образом мне импортировать их в ГИС? Если перебирать каждый файл по одному слою, неизвестно сколько времени это займет.
Browning Zed вне форума  
 
Непрочитано 28.10.2016, 21:50
#23
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


учи C# и SQL
trir вне форума  
 
Непрочитано 29.10.2016, 12:14
#24
kp+

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


Цитата:
Сообщение от Browning Zed Посмотреть сообщение
Послушай, бро. Я живу в небольшом уральском городе, где численность населения составляет 10000 чел. Какой PostGIS, какой MS SQL Server? Где я смогу найти контингент разбирающихся в этих вещах? Дай бог бы в MapInfo научить людей работать.
Судя по постам уважаемого ShaggyDoc'а, он что-то подобное в свое время сделал в Кургане, причем на базе голого Акада версий начала 2000-х и СУБД Firebird.

Цитата:
Сообщение от Browning Zed Посмотреть сообщение
Но что мне делать с уже накопленой базой топопланов?
Для начала выложить характерный фрагмент в "сыром" и уже обработанном виде

Последний раз редактировалось kp+, 29.10.2016 в 12:29.
kp+ вне форума  
 
Автор темы   Непрочитано 29.10.2016, 14:04
#25
Browning Zed


 
Регистрация: 17.01.2014
Сообщений: 97


kp+, попытаюсь объяснить еще раз. Есть файл dwg. В этом файле находится слой ЛЭП. На слое ЛЭП лежит множество линий разных типов, и определенный динамический блок с различными состояниями видимости, много раз повторяющийся. На выходе мне нужно получить несколько слоев образованных из исходного слоя, с префиксом или суффиксом. Например:
ЛЭП_низкого напряжения на застроенной территории
ЛЭП_высокого напряжения на не застроенной территории
ЛЭП_опоры деревянные
ЛЭП_фонарь на ж/б опоре
...ну и т.д. Всё, что идет в суффиксе будет являться типом линии или состоянием видимости блока.
Browning Zed вне форума  
 
Непрочитано 29.10.2016, 14:40
#26
kp+

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


Цитата:
Сообщение от Browning Zed Посмотреть сообщение
kp+, попытаюсь объяснить еще раз. Есть файл dwg. В этом файле находится слой ЛЭП. На слое ЛЭП лежит множество линий разных типов, и определенный динамический блок с различными состояниями видимости, много раз повторяющийся. На выходе мне нужно получить несколько слоев образованных из исходного слоя, с префиксом или суффиксом. Например:
ЛЭП_низкого напряжения на застроенной территории
ЛЭП_высокого напряжения на не застроенной территории
ЛЭП_опоры деревянные
ЛЭП_фонарь на ж/б опоре
...ну и т.д. Всё, что идет в суффиксе будет являться типом линии или состоянием видимости блока.
Хорошо, что Вы объясняете все на словах. Но пока нет примера - это все равно что лечить больного по описанию, даже не по фотографии.
Никто не просит Вас выложить всю базу или даже один полный планшет. Только фрагмент! Но один экземпляр фрагмента "как есть", второй - "как надо".
kp+ вне форума  
 
Автор темы   Непрочитано 29.10.2016, 15:52
#27
Browning Zed


 
Регистрация: 17.01.2014
Сообщений: 97


kp+, вот, накидал небольшой пример. Исходный чертеж, и как должно быть после преобразования.
Вложения
Тип файла: zip Пример.zip (115.0 Кб, 11 просмотров)
Browning Zed вне форума  
 
Непрочитано 29.10.2016, 16:36
1 | #28
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Цитата:
На выходе мне нужно получить несколько слоев образованных из исходного слоя, с префиксом или суффиксом. Например:
ЛЭП_низкого напряжения на застроенной территории
ЛЭП_высокого напряжения на не застроенной территории
ЛЭП_опоры деревянные
ЛЭП_фонарь на ж/б опоре
это лучше сделать через OD
trir вне форума  
 
Автор темы   Непрочитано 29.10.2016, 17:00
#29
Browning Zed


 
Регистрация: 17.01.2014
Сообщений: 97


trir, спасибо, буду пробовать.
Browning Zed вне форума  
 
Непрочитано 29.10.2016, 19:08
#30
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


при экспорте в ГИС-форматы можно экспортировать почти любые Акадовские свойства
trir вне форума  
 
Непрочитано 31.10.2016, 16:09
2 | #31
P_S


 
Регистрация: 09.10.2006
Санкт-Петербург
Сообщений: 99


Не у каждого есть Civil/Map 3D, да и механизм работы с OD в MAP 3D не очень удобен для решения масштабных задач и сам по себе требует автоматизации. Вот, набросал на ходу кусочек кода для голого автокада, исходя из высказанных пожеланий. Может, пригодится:
Код:
[Выделить все]
 (setq fname(strcat (getvar "DWGPREFIX") "lay_sel.dcl")
      fn (open fname "w"))
(write-line "lay_sel : dialog {label = \"Выбор слоя для обработки\";: popup_list {width=100;key=\"in_lst\";value=\"0\";}ok_cancel;}" fn)
(close fn)
     (setq l nil)
   (while (setq el (tblnext "LAYER" (not el)))
     (setq l (cons (cdr (assoc 2 el)) l)))
   (vl-sort l '<)

(setq dcl_id (load_dialog "lay_sel.dcl")) 
   (if (not (new_dialog "lay_sel" dcl_id)) 
     (exit)				
     )
   (start_list "in_lst" 3)
   (mapcar 'add_list l)
   (end_list)
(action_tile "accept" (strcat"(setq lay_n (atoi (get_tile \"in_lst\")))" "(done_dialog)"))
(action_tile "cancel" "(done_dialog)")
(start_dialog)
(unload_dialog dcl_id)
(vl-file-delete fname)
(setq lay(nth lay_n l))
;выбираем слой, и для всех объектов на слое производим такие манипуляции:
(foreach ent
	 (vl-remove-if 'listp(mapcar 'cadr(ssnamex(ssget "_X" (list(cons 8 lay))))));список объектов на слое
  (progn(setq ed(entget ent))
    (cond
      ((equal(cdr(assoc 0 ed))"INSERT");если блок
       (if(vla-get-IsDynamicBlock(vlax-ename->vla-object ent));проверяем, динамический ли он
	 (if(setq n_str
		   (vl-member-if '(lambda(x)(equal(type(vlax-variant-value(vla-get-value x)))'STR))
(vlax-safearray->list(vlax-variant-value(vla-GetDynamicBlockProperties(vlax-ename->vla-object ent))))))
;и если у него есть строковое значение настраимоего свойства (отобразится при этом только имеющее свойство Show)
;сажаем его на слой, названный исходя из этой строки	   
	   (progn
	   (setq ed(subst(cons 8 (strcat lay "_"(vlax-variant-value(vla-get-Value(car n_str)))))(assoc 8 ed)ed))
	   (entmod ed))
;нет такого свойства - используем для модификации слоя имя блока
	   (progn
	     (setq ed(subst(cons 8 (strcat lay "_" (cdr(assoc 2 ed))))(assoc 8 ed)ed))
	     (entmod ed))
	   );if
	 (progn
	     (setq ed(subst(cons 8 (strcat lay "-" (cdr(assoc 2 ed))))(assoc 8 ed)ed))
	     (entmod ed));для нединамического блока - тоже имя
	 );if
       )
    ((equal(cdr(assoc 0 ed))"HATCH")(progn
	     (setq ed(subst(cons 8 (strcat lay "_" (cdr(assoc 2 ed))))(assoc 8 ed)ed))
	     (entmod ed));для штриховки - тоже имя
     )
;для всего остального - тип линии      
      (T(progn(if(member(assoc 6 ed)ed);если тип линии не "по слою"
	  (setq ed(subst(cons 8 (strcat lay "_" (cdr(assoc 6 ed))))(assoc 8 ed)ed))
	(setq ed(subst(cons 8 (strcat lay "_" "непоймичто"))(assoc 8 ed)ed))
		);if
	  (entmod ed))
       ))
  );progn
  );foreach
P_S вне форума  
 
Непрочитано 31.10.2016, 17:04
#32
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Зато OD прекрасно экспортируется в ГИС
trir вне форума  
 
Автор темы   Непрочитано 31.10.2016, 19:22
#33
Browning Zed


 
Регистрация: 17.01.2014
Сообщений: 97


Цитата:
Сообщение от P_S Посмотреть сообщение
Вот, набросал на ходу кусочек кода для голого автокада, исходя из высказанных пожеланий.
Спасибо вам, огромное. Всё отлично работает!
А нельзя ли ещё добавить условие: если исходный слой после преобразования оказывается пустым, он автоматически удаляется?
Ещё было бы замечательно, если предоставить выбор - или преобразуем один выбранный слой, или все слои разом.

Последний раз редактировалось Browning Zed, 31.10.2016 в 20:29.
Browning Zed вне форума  
 
Непрочитано 01.11.2016, 09:28
1 | #34
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Browning Zed Посмотреть сообщение
А нельзя ли ещё добавить условие: если исходный слой после преобразования оказывается пустым, он автоматически удаляется?
Добавь в конец
Код:
[Выделить все]
(repeat 3 (vla-purgeall (vla-get-activedocument (vlax-get-acad-object))))
А в начало
Код:
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 01.11.2016, 12:19
#35
Browning Zed


 
Регистрация: 17.01.2014
Сообщений: 97


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

VVA, спасибо за помощь. Этот код:
Цитата:
Сообщение от VVA Посмотреть сообщение
(repeat 3 (vla-purgeall (vla-get-activedocument (vlax-get-acad-object))))
удаляет все пустые слои. Можно ли сделать, чтобы удалялся только исходный слой? В AutoCAD Civil несколько пустых слоев зарезервированы под определенные задачи, и выходит так, что работа некоторых инструментов, нарушается.
Browning Zed вне форума  
 
Непрочитано 01.11.2016, 14:57
1 | #36
frostmourn


 
Регистрация: 23.04.2015
Сообщений: 163


Попробуйте так. С минимальными переделками
Код:
[Выделить все]
 
(defun C:LayPrSuf ( / fname fn el l dcl_id lay_n lay ed n_str)
	(setq fname(strcat (getvar "DWGPREFIX") "lay_sel.dcl")
      fn (open fname "w"))
(write-line "lay_sel : dialog {label = \"Выбор слоя для обработки\";: popup_list {width=100;key=\"in_lst\";value=\"0\";}ok_cancel;}" fn)
(close fn)
     (setq l nil)
   (while (setq el (tblnext "LAYER" (not el)))
     (setq l (cons (cdr (assoc 2 el)) l)))
   (vl-sort l '<)

(setq dcl_id (load_dialog "lay_sel.dcl")) 
   (if (not (new_dialog "lay_sel" dcl_id)) 
     (exit)				
     )
   (start_list "in_lst" 3)
   (mapcar 'add_list l)
   (end_list)
(action_tile "accept" (strcat"(setq lay_n (atoi (get_tile \"in_lst\")))" "(done_dialog)"))
(action_tile "cancel" "(done_dialog)")
(start_dialog)
(unload_dialog dcl_id)
(vl-file-delete fname)
(setq lay(nth lay_n l))
;выбираем слой, и для всех объектов на слое производим такие манипуляции:
(foreach ent
	 (vl-remove-if 'listp(mapcar 'cadr(ssnamex(cond ((ssget "_X" (list(cons 8 lay)))) ((ssadd))))));список объектов на слое
	(setq ed(entget ent))
    (cond
      ((equal(cdr(assoc 0 ed))"INSERT");если блок
       (if(vla-get-IsDynamicBlock(vlax-ename->vla-object ent));проверяем, динамический ли он
	 (if(setq n_str
		   (vl-member-if '(lambda(x)(equal(type(vlax-variant-value(vla-get-value x)))'STR))
(vlax-safearray->list(vlax-variant-value(vla-GetDynamicBlockProperties(vlax-ename->vla-object ent))))))
;и если у него есть строковое значение настраимоего свойства (отобразится при этом только имеющее свойство Show)
;сажаем его на слой, названный исходя из этой строки
	   (progn
	   (setq ed(subst(cons 8 (strcat lay "_"(vlax-variant-value(vla-get-Value(car n_str)))))(assoc 8 ed)ed))
	   (entmod ed))
;нет такого свойства - используем для модификации слоя имя блока
	   (progn
	     (setq ed(subst(cons 8 (strcat lay "_" (cdr(assoc 2 ed))))(assoc 8 ed)ed))
	     (entmod ed))
	   );if
	 (progn
	     (setq ed(subst(cons 8 (strcat lay "-" (cdr(assoc 2 ed))))(assoc 8 ed)ed))
	     (entmod ed));для нединамического блока - тоже имя
	 );if
       )
    ((equal(cdr(assoc 0 ed))"HATCH")(progn
	     (setq ed(subst(cons 8 (strcat lay "_" (cdr(assoc 2 ed))))(assoc 8 ed)ed))
	     (entmod ed));для штриховки - тоже имя
     )
;для всего остального - тип линии
      (T
		(if(member(assoc 6 ed)ed);если тип линии не "по слою"
		  (setq ed(subst(cons 8 (strcat lay "_" (cdr(assoc 6 ed))))(assoc 8 ed)ed))
			(setq ed(subst(cons 8 (strcat lay "_" "непоймичто"))(assoc 8 ed)ed))
		);if
		(entmod ed)
       )
   )
  );foreach
	(if
	   (not (ssget "_X" (list(cons 8 lay))))
	   (vlax-for x (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
		   (if (= (vla-get-Name x) lay)
			   (vl-catch-all-apply 'vla-Delete (list x))
		   )
	   )
	)
)
frostmourn вне форума  
 
Автор темы   Непрочитано 01.11.2016, 17:05
#37
Browning Zed


 
Регистрация: 17.01.2014
Сообщений: 97


frostmourn, спасибо, сейчас работает как нужно.

И ещё. Форумчане, подскажите, кому не трудно, как видоизменить код программы, чтобы был выбор: обрабатывать слои пакетно (все разом) или по одному слою, при этом, слои замороженные, выключенные или блокированные не принимались бы в расчет. И было бы здорово, если добавить в суффикс слоя, также, типы мультилиний, и стили текста и МТекста.
Browning Zed вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Добавление префикса/суффикса к имени слоя, в соответствии со свойством примитива, расположенного на слое



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос о имени примитива Zaghim Программирование 5 01.09.2011 14:58
Сокращение Автокадом имени слоя в выпадающем списке 2doo AutoCAD 6 05.12.2008 10:46
английский ACAD2005 в имени файла не понимает русские буквы sv_penza AutoCAD 6 26.04.2007 16:20