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

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

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

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

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

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


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

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.11.2014, 14:08
1 | #3
VVA

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


Ну раз я автор, то мне и ответ нести Пишу без проверки, надеюсь со скобками не промахнулся
Код:
[Выделить все]
(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
Сообщений: 117


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

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


VVA, насколько мне не изменяет мой склероз, vla-auditinfo требует еще одного параметра - исправлять ошибки (:vlax-true) или нет (:vlax-false).
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 20.11.2014, 15:09
#6
VVA

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


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


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


Добрый день. В итоге использую дополненный лисп от Кулик Алексей 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,906
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Список Автокадовских словарей (необходимые добавить к 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
С.-Петербург
Сообщений: 38,696


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
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.02.2015, 08:22
#10
Svolo4


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


Еще раз спасибо!
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,906
<phrase 1= Отправить сообщение для VVA с помощью Skype™


_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
С.-Петербург
Сообщений: 38,696


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

----- добавлено через 19 сек. -----
Если, конечно, разговор не про словари проверки орфографии )))
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.05.2015, 09:18
#16
futyn2


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


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


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


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

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


Не проверял, но должно работать. Модификация кода из #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
Сообщений: 51


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,906
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Добавил к #8 и #18. Тестируй
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум 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