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

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

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

Ответ
Поиск в этой теме
Непрочитано 20.11.2014, 12:48 #1
Добавить 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 с исправлением ошибок?
Просмотров: 25989
 
Непрочитано 20.11.2014, 14:01
1 | #2
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
 (defun c:dr1 (/ notdelete)
;;;notdelete список неудаляемых словарей
  (setq notdelete '("ACAD_IMAGE_DICT" "ACAD_IMAGE_VARS"))
  (vl-cmdf "_.undo" "_begin")
  (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 (vl-cmdf "_.-purge" "_a" "*" "_n"))
  (vl-cmdf "_.audit" "_y")
  (vl-cmdf "_.undo" "_end")
  (princ)
  ) ;_ end of defun
Код:
[Выделить все]
 (vl-load-com)
(defun c:dr2 (/ notdelete adoc)
;;;notdelete список неудаляемых словарей
  (setq adoc      (vla-get-activedocument (vlax-get-acad-object))
        notdelete '("ACAD_IMAGE_DICT" "ACAD_IMAGE_VARS")
        ) ;_ 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
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.11.2014, 14:08
1 | #3
VVA

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


Ну раз я автор, то мне и ответ нести Пишу без проверки, надеюсь со скобками не промахнулся
Код:
[Выделить все]
(defun C:DRPA ( / notdelete)
;;;Dict Remove + Purge + Audit
 ;;;notdelete список неудаляемых словарей
 (setq notdelete '("ACAD_IMAGE_DICT" "ACAD_IMAGE_VARS"))
(vl-load-com)
(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))))
)
(repeat 3 (vla-purgeall (vla-get-activedocument (vlax-get-acad-object))))
(command "_.-purge" "_r" "" "_n")
(vla-AuditInfo (vla-get-ActiveDocument (vlax-get-acad-object)))
 )
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 20.11.2014, 14:32
#4
Svolo4


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


Спасибо
Svolo4 вне форума  
 
Непрочитано 20.11.2014, 14:35
#5
Кулик Алексей aka kpblc
Moderator

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


VVA, насколько мне не изменяет мой склероз, vla-auditinfo требует еще одного параметра - исправлять ошибки (:vlax-true) или нет (:vlax-false).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.11.2014, 15:09
#6
VVA

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


Кулик Алексей aka kpblc, Может быть. Пишу на коленках, сейчас в командировке, возможности проверить нет. Поэтому и предупреждаю
Цитата:
Сообщение от VVA Посмотреть сообщение
Пишу без проверки, надеюсь со скобками не промахнулся
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 11.02.2015, 09:51
#7
Svolo4


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


Добрый день. В итоге использую дополненный лисп от Кулик Алексей aka kpblc
Код:
[Выделить все]
 (vl-load-com)
(defun c:dr (/ notdelete adoc)
;;;notdelete список неудаляемых словарей
(setq adoc      (vla-get-activedocument (vlax-get-acad-object))
notdelete '("ACAD_IMAGE_DICT" "ACAD_IMAGE_VARS")
) ;_ 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

А возможно ли, чтоб при удалении словарей не удалялись стили таблиц чертежа?
Svolo4 вне форума  
 
Непрочитано 11.02.2015, 17:26
1 | #8
VVA

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


Список Автокадовских словарей (необходимые добавить к nodelete)
Цитата:
"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_DWFDEFINITIONS"
"ACAD_PDFDEFINITIONS"
Вариант со всеми Автокадовскими словарями
Код:
[Выделить все]
 
 (vl-load-com)
(defun c:dr (/ notdelete adoc)
;;;notdelete список неудаляемых словарей
(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"
            )
(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

__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 23.05.2016 в 18:31. Причина: "ACAD_DWFDEFINITIONS"
VVA вне форума  
 
Непрочитано 11.02.2015, 17:39
1 | #9
Кулик Алексей aka kpblc
Moderator

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


VVA, я бы добавлял маску "ACAD_*": например, упущен словарь ACAD_DWFDEFINITIONS (просто сам с ним недавно столкнулся). По аналогии потребуется словарь для вставленных PDF-файлов ну и тому подобное.
Код:
[Выделить все]
 
(vl-load-com)
(defun c:dr (/ adoc)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-startundomark
  (mapcar
    '(lambda (d)
       (vl-catch-all-apply
         '(lambda ()
            (if (and (not (wcmatch (strcase d) "ACAD_*"))
                     (not (wcmatch d "AcDb*"))
                     ) ;_ end of and
              (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 vl-remove-if-not
            ) ;_ end of mapcar
    ) ;_ end of mapcar
  (repeat 3 (vla-purgeall adoc))
  (vla-auditinfo adoc :vlax-true)
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.02.2015, 08:22
#10
Svolo4


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


Еще раз спасибо!
Svolo4 вне форума  
 
Непрочитано 20.03.2015, 18:31
#11
_Valeo_


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


Спасибо за чудо-спасительный файл! Подскажите пожалуйста как избежать удаления PDF-файлов после чистки: очищаю файл, проверяю - все на месте (ссылка на PDF). Далее сохраняем и закрываем очищенный файл. После сразу открываю, все ссылки на месте, кроме ссылок на PDF-файлы и как следствие отсутствие самих подгруженных PDF-файлов. Куда и каким образом они исчезают конечно же непонятно. Спасибо.
_Valeo_ вне форума  
 
Непрочитано 20.03.2015, 18:54
#12
VVA

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


_Valeo_, Либо добавь в исключение словарь "ACAD_PDFDEFINITIONS", либо воспользуйся кодом из #9
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 23.03.2015, 09:51
#13
_Valeo_


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


Спасибо большое! Добавление в исключение словаря "ACAD_PDFDEFINITIONS" вполне помогло. Очень рад. Жаль, что сразу не заметил, много нужных файлов запорол, НО......оно этого стоит (знания легко не даются).
_Valeo_ вне форума  
 
Непрочитано 13.05.2015, 07:22
#14
futyn2


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


Доброго времени суток!
Вопрос по словарям - чисто в качестве самообразования: при необходимости как можно подгрузить те или иные словари в файл после данной чистки. Скажем почистили и вдруг нужен конкретный словарь какой-то из почищенных - как его подгрузить. Примем условно что человек подгружающий знает какой конкретный ему нужен словарь и название соответсвенно.
Спасибо!
futyn2 вне форума  
 
Непрочитано 13.05.2015, 09:00
#15
Кулик Алексей aka kpblc
Moderator

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


Словари подгрузить не получится. Они создаются программно при запуске соответствующего приложения.

----- добавлено через 19 сек. -----
Если, конечно, разговор не про словари проверки орфографии )))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.05.2015, 09:18
#16
futyn2


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


Печально конечно. Буду иметь ввиду. Спасибо.)))
futyn2 вне форума  
 
Непрочитано 20.05.2016, 14:08
#17
SlavaLu


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


Кулик Алексей aka kpblc
А как оставить все словари ACAD а ACAD_DGNLINESTYLECOMP стереть????
SlavaLu вне форума  
 
Непрочитано 21.05.2016, 09:27
1 | #18
VVA

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


Не проверял, но должно работать. Модификация кода из #9
Код:
[Выделить все]
 
(vl-load-com)
(defun c:dr (/ adoc)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  ) ;_ end of vla-startundomark
  (mapcar
    '(lambda (d)
       (vl-catch-all-apply
         '(lambda ()
            (if
              (or
                (wcmatch (setq d (strcase d)) "ACAD_DGN*")
                (and (not (wcmatch d "ACAD_*,AUTODESK*,ACAEC*"))
                     (not (wcmatch d "ACDB*,ACDS*,AEC_*,ADE_*,ASE_*"))
                ) ;_ end of and
              ) ;_ end of or
               (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 vl-remove-if-not
    ) ;_ end of mapcar
  ) ;_ end of mapcar
  (repeat 3 (vla-purgeall adoc))
  (vla-auditinfo adoc :vlax-true)
  (vla-endundomark adoc)
  (princ)
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 23.05.2016 в 18:25.
VVA вне форума  
 
Непрочитано 22.05.2016, 12:44
#19
SlavaLu


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


VVA,
Спасибо. Вот словари Мэпа. Хорошо бы их то же нетрогать.
Код:
[Выделить все]
 "ACAD_BACKGROUND" "ACAD_CIP_PREVIOUS_PRODUCT_INFO" "ACAD_COLOR" 
"ACAD_DETAILVIEWSTYLE" "ACAD_DGNLINESTYLECOMP" "ACAD_FIELDLIST" "ACAD_GROUP" 
"ACAD_IMAGE_DICT" "ACAD_IMAGE_VARS" "ACAD_LAYOUT" "ACAD_MATERIAL" 
"ACAD_MLEADERSTYLE" "ACAD_MLINESTYLE" "ACAD_PLOTSETTINGS" "ACAD_PLOTSTYLENAME" 
"ACAD_SCALELIST" "ACAD_SECTIONVIEWSTYLE" "ACAD_TABLESTYLE" "ACAD_VISUALSTYLE" 
"ACAD_WIPEOUT_VARS" "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"
Список вынут этим лиспом.
Код:
[Выделить все]
 (mapcar 'cdr(vl-remove-if-not '(lambda(x)(= (car x) 3))(entget(namedobjdict))))

Последний раз редактировалось SlavaLu, 22.05.2016 в 19:35.
SlavaLu вне форума  
 
Непрочитано 23.05.2016, 18:32
#20
VVA

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


Добавил к #8 и #18. Тестируй
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 14.10.2019, 10:06
#21
Dr.Smiley

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


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

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


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

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


Цитата:
Сообщение от Кулик Алексей 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
С.-Петербург
Сообщений: 40,404


Код:
[Выделить все]
 (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,611


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

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


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

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


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

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


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

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


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

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


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
Сообщений: 108


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

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


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

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


ключевая фраза "снять блокировку"
все заработало, еще раз большое спасибо
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
С.-Петербург
Сообщений: 40,404


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


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


Доброго всем дня!
А как-нибудь возможно модифицировать данный лисп. Он очень помогает при удалении дублирующихся стилей СПДС 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,996


В 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 вне форума  
 
Непрочитано 08.08.2024, 11:29
#41
cancanchuc

инженер-конструктор
 
Регистрация: 12.10.2011
Краснодар
Сообщений: 20


Всем добрый день!
Подскажите как добавить исключения в файл очистки, чтобы не удалялись элементы программы VetCAD++?
cancanchuc вне форума  
 
Непрочитано 08.08.2024, 15:57
#42
Кулик Алексей aka kpblc
Moderator

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


Для начала было бы неплохо вообще эти элементы определить. Хоть как-то
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.08.2024, 20:10
#43
cancanchuc

инженер-конструктор
 
Регистрация: 12.10.2011
Краснодар
Сообщений: 20


В этом то и вопрос. Может здесь есть те, кто определил как эти элементы называются.
cancanchuc вне форума  
 
Непрочитано 08.08.2024, 20:41
#44
Кулик Алексей aka kpblc
Moderator

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


Offtop: Тут уж проще будет автора VetCAD спросить, наверное
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.08.2024, 20:53
#45
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,297
Отправить сообщение для doctorraz с помощью Skype™


Цитата:

Вот что написал мне автор Веткада:
"Добрый день!
Пока нет возможности посмотреть файлы детальнее, но если нужно
исключить словари веткада, то это должно быть просто. Они все
начинаются на VETCAD, если мне память не изменяет.
Поэтому исключающий if может выглядеть так:
(if (and (not (wcmatch (strcase d) "ACAD_*"))
(not (wcmatch d "AcDb*"))
(not (wcmatch (strcase d) "VETCAD*"))
) ;_ end of and
(dictremove (namedobjdict) d)
) ;_ end of if"
https://www.proektant.org/index.php/...html#msg316290
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 09.08.2024, 09:10
#46
Кулик Алексей aka kpblc
Moderator

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


Как вариант чистки, без проверок и тестов.
Код:
[Выделить все]
 (vl-load-com)
(defun c:like-full-purge (/ adoc fun_purge-and-audit) 

  (defun fun_purge-and-audit (adoc / sysvars) 
    (repeat 3 (vla-purgeall adoc))
    (setq sysvars (mapcar 
                    (function 
                      (lambda (x / temp) 
                        (setq temp (getvar (car x)))
                        (setvar (car x) (cdr x))
                        (cons (car x) temp)
                      )
                    )
                    '(("cmdecho" . 0)
                      ("menuecho" . 0)
                      ("nomutt" . 1)
                     )
                  )
    )
    (vl-catch-all-apply 
      (function 
        (lambda () 
          (vl-cmdf "_.-purge" "_e")
          (vl-cmdf "_.-purge" "_z")
        )
      )
    )
    (foreach item sysvars 
      (setvar (car item) (cdr item))
    )
    (vla-auditinfo adoc ::vlax-true)
    (repeat 3 (vla-purgeall adoc))
  )

  (vl-load-com)
  (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  (fun_purge-and-audit adoc)
  (vlax-for dict (vla-get-dictionaries adoc) 
    (if 
      (or (not (vlax-property-available-p dict 'name)) 
          (not (wcmatch (vla-get-name dict) "ACAD_*,AcDb*"))
          (not (wcmatch (strcase (vla-get-name dict)) "VETCAD*"))
      )
      (vl-catch-all-apply 
        (function 
          (lambda () 
            (vla-delete dict)
          )
        )
      )
    )
  )
  (fun_purge-and-audit adoc)
  (vla-endundomark adoc)
  (princ)
)
Offtop: Я просто не помню, вычищает vla-purgeall пустые тексты и нулевую длину или нет
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум 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