Почистить файл при открытии…

Поступило тут предложение нарисовать код, который будет чистить файл dwg при открытии. Не при сохранении, а именно при открытии.

Памятуя о документе на GoogleDocs (если лениво ходить по ссылке, документ можно забрать здесь в формате docx, а здесь - в формате pdf), нарисовался вот такой код.

Проверил на AutoCAD 2013 и 2014 x64 - вроде бы работает.

При использовании обратите внимание на параметр вызова: это сумма битов из списка

Значение бита Пояснение
1 очищать графический и неграфический мусор (аналог обычного _purge)
2 очищать зарегистрированные приложения
4 проверка файла с исправлением ошибок (аналог _.audit _y)
8 очищать фильтры слоев
16 удалять историю создания твердых тел, включая вхождения в блоки (аналог команды _.brep)
32 удаление параметрических зависимостей, включая вхождения в блоки (аналог _.delconstrain)
64 при загруженном ExplodeAllProxy, demandload = 2, proxyshow = 1: разбиение графических прокси-объектов (автоматически добавляются биты 1, 2, 4)
128 при загруженном ExplodeAllProxy, demandload = 2, proxyshow = 1: удаление неграфических и неразбиваемых прокси-объектов (автоматически добавляются биты 1, 2, 4)
256 очистить следы VBA в файле
512 очистить назначенные материалы
1024 очистить словарь AcDgnLS (по решению Евгения Елпанова)

Очистка файла от мусора и зарегистрированных приложений, а также проверка выполняется два раза.

P.S. Работа над кодом уже подходила к концу, когда выяснилось, что он уже не требуется. Блин, обидно...

Версия Пояснение Ссылка
0.0.2 Исправленный код, учитывает возможность наличия в файле маскировок (wipeout), объектов rtext и arctext _kpblc-autostart-purge.lsp
0.0.3 Исправленный код, учитывающий особенности DIMPOST и проверки файлов _kpblc-autostart-purge.lsp
0.0.4 Дополнительный бит (512) для удаления материалов (в некоторых случаях материалы не удалялись); добавлен отлов ошибок при удалении фильтров слоев _kpblc-autostart-purge.lsp
0.0.5 Добавлена попытка принудительной загрузки ExplodeProxy*.arx _kpblc-autostart-purge.lsp
0.0.6 Исправлена ошибка очистки фильтров слоев _kpblc-autostart-purge.lsp
0.0.7 Добавлена принудительная очистка словаря AcDgnLS _kpblc-autostart-purge.lsp

Вызов и все остальное - не изменилось.



Комментарии

Есть 42 коммент. к “Почистить файл при открытии…”
  1. gest пишет:

    Почему не требуется? Есть альтернативы? 

  2. Кулик Алексей aka kpblc пишет:

    А там выяснилось, что проблема была не столько в грязном файле, сколько в ошибке переполнения буфера обмена :) И потом, все это можно сделать руками ;)

    Но если пригодится - я буду рад )))

  3. gest пишет:

    А возможно загружать вручную, когда нужно, без автоматической загрузки?

  4. Кулик Алексей aka kpblc пишет:

    Конечно, можно - обычным appload. Ну или удалить последнюю строку

    1
    (_kpblc-autostart-purge 511)

    Сам код поставить в автозагрузку, а в кнопке, например, прописать макрос:

    1
    ^C^C(_kpblc-autostart-purge 511);

    Ну или поставить то значение битов, которое надо ;)

    P.S. Выпустил обновление: теперь для объектов типа маскировки, rtext и arctext код пытается обнаружить и загрузить соответствующие обработчики. Все же это "почти родные" объекты AutoCAD :)

  5. Кулик Алексей aka kpblc пишет:

    Еще одно обновление (см. стартовый пост, последние строки).

  6. Кулик Алексей aka kpblc пишет:

    Как выяснилось (в условиях почти боевой эксплуатации), при некоторых условиях ExplodeAllProxy может быть не загружен, соответственно не срабатывает очистка от прокси. Пришлось вносить немного топорное, но вынужденное решение: пытаюсь загрузить файл ExplodeProxy*.arx принудительно. Ссылка на новую сборку - как всегда, в первом посте темы ;)

  7. Zhanik007 пишет:

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

    Так же хотел спросить можно добавить чистку от прокси объектов неграфических, которые не отображаются в пространсвте? вот ссылка:

    http://adn-cis.org/forum/index.php?topic=709.0

    как самому это сделать не знаю)))

  8. Кулик Алексей aka kpblc пишет:

    Если файл закинут в автозагрузку, он будет автоматически загружаться в каждый документ dwg. Утилита сработает и во втором файле - достаточно его открыть.
    P.S. Если explodeallproxy от Александра Ривилиса загружен, то очистка будет выполняться в полном объеме

    Приеду с Autodesk DevDay, если не забуду - допишу соответствующие элементы.

    P.P.S. Благодаря Андрею Бушману можно использовать управляемую альтернативу ExplodeAllProxy. Если Андрей разрешит, я опубликую и его измененный код, и скомпилированные библиотеки. Но это будет явно не сегодня и не завтра...

  9. Zhanik007 пишет:

    Было бы здорово!!! Буду ждать решения!!! Спасибо!!! Правда немного не понял про explodeallproxy)))

  10. Кулик Алексей aka kpblc пишет:

    В стартовом посте добавил версию 0.0.7. Также в вызов добавлен новый бит (1024) - см.описание.
    P.S. По очистке прокси-объектов оставил решение на основе старых версий ExplodeAllProxy от А.Ривилиса. Чуть позже, как только получу разрешение от Андрея Бушмана, выложу другие варианты с использованием управляемой альтернативы ExplodeAllProxy.

  11. Кулик Алексей aka kpblc пишет:

    Учитывая http://autolisp.ru/2015/02/02/managed-alternative-explodeallproxy/ , новую версию рисовать или ну ее нафиг?

  12. Zhanik007 пишет:

    Сразу скажу я половину понимаю из этих описание - и еще половина пытается уложиться в голове)))) про статью - я так понял для каждого автокада архив свой, если возможность реализовать все версии в одной штуке??? я был бы очень рад такому))) чувствую надо увольняться и вплотную заниматься изучением лиспа и автокада))))
    Так что я всегда - ЗА обновления с дополнениями и усовершенствованиями!!!
    Но как бы у вас там не получилось - сейчас все равно офигенно лучше, чем без этой утилиты! Спасибо!)

  13. Snchv пишет:

    Было бы здорово добавить опциональную очистку невидимых объектов, в том числе входящих в блоки (те, у которых 60 группа DXF равна 1) :)

  14. Кулик Алексей aka kpblc пишет:

    Я бы не стал этого делать: пользователь может вполне сознательно временно поставить изоляцию объектов. И тут ему такой "подарочек"... Убьют :)

  15. Marat пишет:

    Добрый день!
    У меня после выполнения лиспа (bit=2047)
    в командной строке выходит
    Hatch boundary associativity removed.

    некоторое количество ассоциативностей штриховок пропадает
    Должно ли быть такое?

  16. Кулик Алексей aka kpblc пишет:

    Некоторые, но не все? Специально, насколько я помню (отвечаю с телефона), я такого не делал. Доберусь до железки - посмотрю.

  17. Кулик Алексей aka kpblc пишет:

    Сейчас перепроверил: специально подобного я не делал. Проверьте значение системной переменной HPASSOC - может быть, дело в ней.

  18. Marat пишет:

    HPASSOC=1

    Сейчас поэкспериментировал, и пришел к заключению, что теряется ассоциативность у штриховок, которые были порезаны командой trim

  19. Кулик Алексей aka kpblc пишет:

    Значит это особенность самого ядра. Особо не попляшешь ((

  20. Zhanik007 пишет:

    Здравствуйте! Пользуюсь утилитой очень активно. Большое спасибо!
    Сейчас вопрос возник при переходе на 2015 кад. Хотел узнать - работает она или нет. Пока пробовал - но не работает. Можно сделать ее под 2015?
    Заранее спасибо!

  21. Кулик Алексей aka kpblc пишет:

    Я проверял работу на AutoCAD 2009, 2010, 2012-2016 - обработка шла "как надо". Основная задача - обеспечить загрузку ExplodeAllProxy*.arx от А.Ривилиса или управляемую альтернативу этой утилиты.

  22. Asem пишет:

    Загрузила один раз - сразу почистил файл.
    Хочу повторить команду - пишу в командной строке "_kpblc-autostart-purge". Пишет неизвестная команда.
    Что не так, подскажите?((((

    Или каждый раз надо подгружать через приложения..?

  23. Кулик Алексей aka kpblc пишет:

    Загоните в автозагрузку - это самый простой способ. И, кстати, команды такой действительно нет: в коде описывается функция, имеющая обязательный параметр (в коде - последняя строчка).
    P.S. Черт, мне точно надо сейчас забить на статью по Git и нарисовать сюда инсталлятор / интерфейс...

  24. Ярик пишет:

    Как пользоваться этим кодом в автокаде, что-то не могу понять?

  25. Кулик Алексей aka kpblc пишет:

    Примерно так

Поделитесь своим мнением


Я не робот.