Почистить файл при открытии…
Поступило тут предложение нарисовать код, который будет чистить файл 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 |
Вызов и все остальное - не изменилось.
Почему не требуется? Есть альтернативы?
А там выяснилось, что проблема была не столько в грязном файле, сколько в ошибке переполнения буфера обмена И потом, все это можно сделать руками
Но если пригодится - я буду рад )))
А возможно загружать вручную, когда нужно, без автоматической загрузки?
Конечно, можно - обычным appload. Ну или удалить последнюю строку
Сам код поставить в автозагрузку, а в кнопке, например, прописать макрос:
Ну или поставить то значение битов, которое надо
P.S. Выпустил обновление: теперь для объектов типа маскировки, rtext и arctext код пытается обнаружить и загрузить соответствующие обработчики. Все же это "почти родные" объекты AutoCAD
Еще одно обновление (см. стартовый пост, последние строки).
Как выяснилось (в условиях почти боевой эксплуатации), при некоторых условиях ExplodeAllProxy может быть не загружен, соответственно не срабатывает очистка от прокси. Пришлось вносить немного топорное, но вынужденное решение: пытаюсь загрузить файл ExplodeProxy*.arx принудительно. Ссылка на новую сборку - как всегда, в первом посте темы
Подскажите, его после установки в автозагрузки этой утилиты надо ли его загружать при открытии других файлов?
Я так понимаю утилита работает так - загружаю ее в автозагрузки и закрываю автокад, потом открываю грязный файл и утилита при загрузке файла его чистит.
А если я открыл так один файл и работаю в автокаде, потом понадобилось открыть второй грязный файл - утилита при его открытии сработает???
Так же хотел спросить можно добавить чистку от прокси объектов неграфических, которые не отображаются в пространсвте? вот ссылка:
http://adn-cis.org/forum/index.php?topic=709.0
как самому это сделать не знаю)))
Если файл закинут в автозагрузку, он будет автоматически загружаться в каждый документ dwg. Утилита сработает и во втором файле - достаточно его открыть.
P.S. Если explodeallproxy от Александра Ривилиса загружен, то очистка будет выполняться в полном объеме
Приеду с Autodesk DevDay, если не забуду - допишу соответствующие элементы.
P.P.S. Благодаря Андрею Бушману можно использовать управляемую альтернативу ExplodeAllProxy. Если Андрей разрешит, я опубликую и его измененный код, и скомпилированные библиотеки. Но это будет явно не сегодня и не завтра...
Было бы здорово!!! Буду ждать решения!!! Спасибо!!! Правда немного не понял про explodeallproxy)))
В стартовом посте добавил версию 0.0.7. Также в вызов добавлен новый бит (1024) - см.описание.
P.S. По очистке прокси-объектов оставил решение на основе старых версий ExplodeAllProxy от А.Ривилиса. Чуть позже, как только получу разрешение от Андрея Бушмана, выложу другие варианты с использованием управляемой альтернативы ExplodeAllProxy.
Учитывая http://autolisp.ru/2015/02/02/managed-alternative-explodeallproxy/ , новую версию рисовать или ну ее нафиг?
Сразу скажу я половину понимаю из этих описание - и еще половина пытается уложиться в голове)))) про статью - я так понял для каждого автокада архив свой, если возможность реализовать все версии в одной штуке??? я был бы очень рад такому))) чувствую надо увольняться и вплотную заниматься изучением лиспа и автокада))))
Так что я всегда - ЗА обновления с дополнениями и усовершенствованиями!!!
Но как бы у вас там не получилось - сейчас все равно офигенно лучше, чем без этой утилиты! Спасибо!)
Было бы здорово добавить опциональную очистку невидимых объектов, в том числе входящих в блоки (те, у которых 60 группа DXF равна 1)
Я бы не стал этого делать: пользователь может вполне сознательно временно поставить изоляцию объектов. И тут ему такой "подарочек"... Убьют
Добрый день!
У меня после выполнения лиспа (bit=2047)
в командной строке выходит
Hatch boundary associativity removed.
некоторое количество ассоциативностей штриховок пропадает
Должно ли быть такое?
Некоторые, но не все? Специально, насколько я помню (отвечаю с телефона), я такого не делал. Доберусь до железки - посмотрю.
Сейчас перепроверил: специально подобного я не делал. Проверьте значение системной переменной HPASSOC - может быть, дело в ней.
HPASSOC=1
Сейчас поэкспериментировал, и пришел к заключению, что теряется ассоциативность у штриховок, которые были порезаны командой trim
Значит это особенность самого ядра. Особо не попляшешь ((
Здравствуйте! Пользуюсь утилитой очень активно. Большое спасибо!
Сейчас вопрос возник при переходе на 2015 кад. Хотел узнать - работает она или нет. Пока пробовал - но не работает. Можно сделать ее под 2015?
Заранее спасибо!
Я проверял работу на AutoCAD 2009, 2010, 2012-2016 - обработка шла "как надо". Основная задача - обеспечить загрузку ExplodeAllProxy*.arx от А.Ривилиса или управляемую альтернативу этой утилиты.
Загрузила один раз - сразу почистил файл.
Хочу повторить команду - пишу в командной строке "_kpblc-autostart-purge". Пишет неизвестная команда.
Что не так, подскажите?((((
Или каждый раз надо подгружать через приложения..?
Загоните в автозагрузку - это самый простой способ. И, кстати, команды такой действительно нет: в коде описывается функция, имеющая обязательный параметр (в коде - последняя строчка).
P.S. Черт, мне точно надо сейчас забить на статью по Git и нарисовать сюда инсталлятор / интерфейс...
Как пользоваться этим кодом в автокаде, что-то не могу понять?
Примерно так