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

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

Добавить Purge и audit в лисп

Ответ
Поиск в этой теме
Непрочитано 20.11.2014, 12:48
Добавить Purge и audit в лисп
Svolo4
 
Регистрация: 29.02.2008
Сообщений: 115

Добрый день. Есть лисп (автор VVA), который удаляет из файла словари
Код:
[Выделить все]
 (defun C:DR ( / notdelete)
  ;;;notdelete список неудаляемых словарей
  (setq notdelete '("ACAD_IMAGE_DICT" "ACAD_IMAGE_VARS"))
	(mapcar
	'(lambda(d)
	(vl-catch-all-apply '(lambda()(if (not(member d notdelete))(dictremove (namedobjdict) d)))))
	(mapcar 'cdr(vl-remove-if-not '(lambda(x)(= (car x) 3))(entget(namedobjdict))))
	)
  )
Как сделать так, чтобы после выполнения команды DR запускался purge с удалением вложенных элементов и после audit с исправлением ошибок?
Просмотров: 23186
 
Непрочитано 14.10.2019, 10:06
#21
Dr.Smiley

Инженер-конструктор ПГС
 
Регистрация: 17.08.2011
Сообщений: 110


Доброго всем.
Есть вопрос, а как сделать так что бы удалились словари только siberia*?
Dr.Smiley вне форума  
 
Непрочитано 14.10.2019, 10:13
#22
Кулик Алексей aka kpblc
Moderator

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


В стартовый пост, например, добавить / поменять имена словарей.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.10.2019, 10:18
#23
Dr.Smiley

Инженер-конструктор ПГС
 
Регистрация: 17.08.2011
Сообщений: 110


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
В стартовый пост, например, добавить / поменять имена словарей.
но там указаны не удаляемые словари, а мне нужно именно удалить только один тип словарей, а остальные не трогать

Последний раз редактировалось Dr.Smiley, 14.10.2019 в 11:43.
Dr.Smiley вне форума  
 
Непрочитано 14.10.2019, 10:37
#24
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
 (foreach dict (mapcar (function cdr)
                      (vl-remove-if-not (function (lambda (x) (= (car x) 3))) (entget (namedobjdict)))
                      ) ;_ end of mapcar
  (if (wcmatch (strcase dict) "*SIBERIA*")
    (vl-catch-all-apply (function (lambda () (dictremove dict (namedobjdict)))))
    ) ;_ end of if
  ) ;_ end of foreach
----- добавлено через 9 сек. -----
Без проверок. Только в качестве идеи
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.10.2019, 11:10
#25
Boxa

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


ИМХО. По моему это плохая идея, тереть словари не проверяя есть ли ссылки на записи в этом словаре.
Boxa вне форума  
 
Непрочитано 14.10.2019, 11:26
#26
Dr.Smiley

Инженер-конструктор ПГС
 
Регистрация: 17.08.2011
Сообщений: 110


Цитата:
Сообщение от Boxa Посмотреть сообщение
ИМХО. По моему это плохая идея, тереть словари не проверяя есть ли ссылки на записи в этом словаре.
без удаления словаря файл жутко тормозит и работать с ним становится не выносимо. плюс его вес увеличивается в разы. А самое не приятное, это то что при копировании из этого файла любого элемента в нормальный файл, в него переносится весь этот шлак и он тоже становится таким же тяжелым и неповоротливым.
Siberia* это словари spds extensions, я не имея нормального spds пользуюсь автокадовским, и чтобы не было тормозов с файлом в дальнейшем, сначала удаляю словари, а затем копирую содержимое, удаляю и снова вставляю, иначе все настройки летят после пересохранения.
Но есть еще один нюанс. У нас на работе используется шаблонные листы с основными надписями созданными в динамическом блоке, и после удаления словарей, перекопирование уже не помогает и слетают блоки. Потому и хочу удалить только один тип словарей. Как-то так
Dr.Smiley вне форума  
 
Непрочитано 14.10.2019, 12:06
#27
Boxa

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


Dr.Smiley, спасибо, я знаю что это за словарь и как реагирует на него автокад и все таки я не считаю хорошей идеей удалять словарь не проверяя ссылки. Я знаю, что ссылки можно найти, потому и акцентирую внимание на этом, что бы код был хороший и безопасный.
Boxa вне форума  
 
Непрочитано 14.10.2019, 12:44
#28
Dr.Smiley

Инженер-конструктор ПГС
 
Регистрация: 17.08.2011
Сообщений: 110


А вообще можно ли как-то эти словари удалять не с помощью лиспа, а командой?
Dr.Smiley вне форума  
 
Непрочитано 14.10.2019, 12:51
#29
Кулик Алексей aka kpblc
Moderator

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


Boxa, ты предлагаешь по всей базе чертежа пройтись и сносить ссылки на этот словарь на каждом примитиве (графическом и нет)? Мне просто интересна технология, ежли че - я без наездов
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.10.2019, 12:51
1 | #30
Boxa

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


Dr.Smiley, https://forum.dwg.ru/showthread.php?t=154005
Кулик Алексей aka kpblc, найти используемые и не удалять их. Я для реализации этого тиснул из MgdDbg классы ReferenceFiler и ReferencedBy и слегка доработал.
Boxa вне форума  
 
Непрочитано 14.10.2019, 13:29
#31
Dr.Smiley

Инженер-конструктор ПГС
 
Регистрация: 17.08.2011
Сообщений: 110


Цитата:
Сообщение от Boxa Посмотреть сообщение
спасибо большое. но у меня что-то лыжи не едут. поставил через "_NETLOAD" "SiberiaRemoving_2015.dll" и при использовании команды "SiberiaRemoving" ни чего не происходит.
Что-то не так делаю?
Dr.Smiley вне форума  
 
Непрочитано 14.10.2019, 13:35
#32
Boxa

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


Offtop: Все таки это оффтоп для этой темы...
Цитата:
Сообщение от Dr.Smiley Посмотреть сообщение
при использовании команды "SiberiaRemoving" ни чего не происходит.
Что-то не так делаю?
Не знаю, а что должно происходить? Программа при работе окошек не показывает, просто результаты пишет в консоль. Самая частая причина не работ dll - возможно Вы ее не разблокировали.
Boxa вне форума  
 
Непрочитано 14.10.2019, 13:47
#33
Dr.Smiley

Инженер-конструктор ПГС
 
Регистрация: 17.08.2011
Сообщений: 110


ключевая фраза "снять блокировку"
все заработало, еще раз большое спасибо
Dr.Smiley вне форума  
 
Непрочитано 14.11.2019, 23:11
#34
B@tman


 
Регистрация: 14.06.2005
Новосибирск
Сообщений: 122
<phrase 1=


День и полночи потратил на восстановление пораженного очень важного файла. Очистка словарей помогла. Спасибо большое. Кому и куда слать денег на пиво? -)
B@tman вне форума  
 
Непрочитано 28.10.2021, 15:02
#35
JIexawcr


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


Присоединяюсь к B@tman ! Этот лисп спас не один час/день/месяц работы!

Подскажите. В 2016 автокаде в PURGE появилась "галочка" "Автоматическая очистка непривязанных данных". Лисп выше по умолчанию ее не выполняет. Это возможно добавить? в идеале что бы очистка шла до тех пор, пока есть что очищать (встретился как то файл где надо было около 30 раз тыкнуть на "удалить все" (удаление вложенных элементов выполнялось), при этом первые нажатия занимали по несколько минут).
JIexawcr вне форума  
 
Непрочитано 28.10.2021, 20:58
#36
Кулик Алексей aka kpblc
Moderator

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


Если я правильно помню, это как раз про стили DGN.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.12.2021, 06:46
#37
zRaFiNaDz


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


Доброго всем дня!
А как-нибудь возможно модифицировать данный лисп. Он очень помогает при удалении дублирующихся стилей СПДС 2017 (в чертежах их просто миллион, не могу понять почему они дублируются), но также он удаляет све связи данных таблиц с экселем.
После применения копи-пастить и работать в чертеже становится приятно, т.к. все происходит молниеносно, но восстанавливать связи с данными - это просто жесть!
zRaFiNaDz вне форума  
 
Непрочитано 18.04.2022, 17:31
#38
JIexawcr


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


С лиспом возникла проблема:
при запуске в файлах из ревита возникает ошибка сохранения, писал в сиротствующей теме (тогда еще не знал, что с этим лиспом связано) https://forum.dwg.ru/showpost.php?p=...2&postcount=12
в чем может быть проблема? может лишнюю библиотеку какую удаляет?

не помогает сохранение ни в какой версии автокада (ранее помогала 2000 года, там вроде без потериданных).

ПС и если вдруг жива тема - еще проблема с массивами, они преобразуются в блок и объект преобразуется в блок (если был блок - в блок и одного блока). то есть вместо сетки 3х3 из условно палочки получается блок из 9 одинаковых блоков.

Код:
[Выделить все]
 (defun c:dr (/ notdelete adoc)
;;;notdelete список неудаляемых словарей
 (vl-load-com)
(setq adoc      (vla-get-activedocument (vlax-get-acad-object)) 
      notdelete  '("ACAD_IMAGE_DICT" "ACAD_COLOR" "ACAD_FIELDLIST" "ACAD_GROUP" "ACAD_IMAGE_VARS"
            "ACAD_LAYOUT" "ACAD_MATERIAL" "ACAD_MLEADERSTYLE" "ACAD_MLINESTYLE" "ACAD_PLOTSETTINGS"
            "ACAD_PLOTSTYLENAME" "ACAD_SCALELIST" "ACAD_TABLESTYLE" "ACAD_VISUALSTYLE" "ACAD_WIPEOUT_VARS"
            "ACAD_PDFDEFINITIONS" "ACAD_DWFDEFINITIONS" "ACAD_BACKGROUND" "ACAD_CIP_PREVIOUS_PRODUCT_INFO" "ACAD_COLOR" 
            "ACAD_DETAILVIEWSTYLE" "ACAD_SECTIONVIEWSTYLE" "AcAec" "AcDbVariableDictionary" "AcDsDecomposeData"
            "ADE_QUERY_LIBRARY" "AEC_CLASSIFICATION_SYSTEM_DEFS" "AEC_DISP_REP_CONFIGURATIONS" "AEC_DISP_REP_SETS"
            "AEC_DISP_REPS" "AEC_DISPLAY_PROPS_DEFAULTS" "AEC_PROPERTY_SET_DEFS" "AEC_VARS" "ASE_INDEX_DICTIONARY"
            "Autodesk_MAP" )
) ;_ end of setq 
  (vla-startundomark adoc)
  (mapcar
    '(lambda (d)
       (vl-catch-all-apply '(lambda ()
                              (if (not (member d notdelete))
                                (dictremove (namedobjdict) d)
                                ) ;_ end of if
                              ) ;_ end of lambda
                           ) ;_ end of vl-catch-all-apply
       ) ;_ end of lambda
    (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 3)) (entget (namedobjdict))))
    ) ;_ end of mapcar
  (repeat 3 (vla-purgeall adoc))
  (vla-auditinfo adoc :vlax-true)
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
JIexawcr вне форума  
 
Непрочитано 20.04.2022, 13:33
#39
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992
<phrase 1= Отправить сообщение для VVA с помощью Skype™


В 2013 автокаде в файле по ссылке команда dr отработала и файл сохранился без проблем
Словари, которые удаляются - "ACAD_CIP_PREVIOUS_PRODUCT_INFO" "ACAD_DETAILVIEWSTYLE" "ACAD_SECTIONVIEWSTYLE" "BNS_VARIABLES"
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 27.04.2022, 09:47
#40
JIexawcr


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


Цитата:
Сообщение от VVA Посмотреть сообщение
В 2013 автокаде в файле по ссылке команда dr отработала и файл сохранился без проблем
Словари, которые удаляются - "ACAD_CIP_PREVIOUS_PRODUCT_INFO" "ACAD_DETAILVIEWSTYLE" "ACAD_SECTIONVIEWSTYLE" "BNS_VARIABLES"
держать 2013 автокад просто для пересохранения не лучшая идея :\
можете прислать его? попробую у себя пересохранить, проверить.


словари которые удаляются у меня, которые остались вне списка "not delete"?

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

ПС если что я в кодовой составляющей автокада полный профан, как и в программировании. сугубо пользователь интерфейса.
JIexawcr вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Добавить Purge и audit в лисп

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что прописать в acad.lsp чтобы всегда загружались пользовательские лисп команды? overband LISP 43 07.02.2013 14:47
результат работ команд purge и audit lex0101 Программирование 23 13.02.2012 08:34
Лисп для копирования данных нескольких мтекстов по принципу расположения. Red Nova LISP 14 18.06.2008 22:08
Нужен лисп (добавить вершину в полилинию) Димас LISP 39 04.07.2006 11:08