Очистка словарей. Просто для напоминания самому себе
Меня достало каждый раз писать одно и то же по очистке словарей. Засуну сюда лисповой код, который будет работать и под наной, и под кадом. Если что - сам его буду тырить по мере надобности.
Что сайт есть шпаргалка, надеюсь, никто не забыл? )))
Код оставляет "в живых" словари ACAD (включая словарь стандартов) и служебные словари NC. Под ACAD словари NC, скорее всего, будут снесены. Заодно выполняет чистку, аудит и очистку от зарегистрированных приложений. На полноценную и всестороннюю очистку, конечно, не тянет, но в качестве костыля - может, и подойдет.
Настоятельно советую код гонять на страховых копиях файлов. Под NC получить в результате абсолютно нерабочий файл шансы далеко ненулевые. С чем это связано - не представляю (( NC24.1 в любой момент и при любом телодвижении может поломать файл до состояния нестояния. Такой файл уже не открывается ни через NC, ни через ACAD.
Короче, я предупредил
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | (vl-load-com) (defun c:clear-dicts (/ adoc dict_list reg_apps_count) (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object)))) (repeat 3 (vla-purgeall adoc) ) ;_ end of repeat (vlax-for item (vla-get-dictionaries adoc) (if (or (not (vlax-property-available-p item 'name)) (= (vla-get-name item) "ACAD_DGNLINESTYLECOMP") (not (wcmatch (vla-get-name item) "ACAD*,AcDb*,AcSt*,HOST_DOC_*,MC*")) ) ;_ end of or (vl-catch-all-apply (function (lambda (/ name) (if (vlax-property-available-p item 'name) (setq name (vla-get-name item)) ) ;_ end of if (vla-delete item) (if name (setq dict_list (cons name dict_list)) ) ;_ end of if ) ;_ end of lambda ) ;_ end of function ) ;_ end of vl-catch-all-apply ) ;_ end of if ) ;_ end of vlax-for (vla-auditinfo adoc :vlax-true) (setq reg_apps_count (vla-get-count (vla-get-registeredapplications adoc))) (if (> reg_apps_count 500) (vl-cmdf "_.-purge" "_r" "_n" "*") (vlax-for app (vla-get-registeredapplications adoc) (vl-catch-all-apply (function (lambda () (vla-delete app) ) ;_ end of lambda ) ;_ end of function ) ;_ end of vl-catch-all-apply ) ;_ end of vlax-for ) ;_ end of if (princ (strcat "\nPurged regapps : " (itoa (- reg_apps_count (vla-get-count (vla-get-registeredapplications adoc)))) ) ;_ end of strcat ) ;_ end of princ (repeat 3 (vla-purgeall adoc) ) ;_ end of repeat (if dict_list (princ (strcat "\nErased dictionaries : " (apply (function strcat) (mapcar (function (lambda (x) (strcat "\n\t" x) ) ;_ end of lambda ) ;_ end of function (vl-sort dict_list (function <)) ) ;_ end of mapcar ) ;_ end of apply ) ;_ end of strcat ) ;_ end of princ ) ;_ end of if (vla-endundomark adoc) (princ) ) ;_ end of defun |
Может оставлять следы в ком.строке. Дело в том, что при большом количестве зарегистрированных приложений командный метод их чистки оказывается кратно быстрее, чем лиспом проходиться.
Давно эта статья просилась!
Потестю