Пакетная очистка файлов dwg
Изначально проблема заключалась не в размере файла, а скорости его работы. Т.е. файл открыли и при попытке просмотреть свойства объектов Автокад долго думает.
Другой проблемой оказалось наличие неиспользуемых текстовых стилей, однако при попытки лобового удаления Автокад ругался отказом т.к. стиль используется. Удаляя все объекты на чертеже - было удалено в итоге абсолютно все (пустой файл остался). Размер файла был порядка 3Мб, а стили все еще где-то используются.
Как выход была найдена программа пакетная очистка файла Автор: Кулик Алексей aka kpblc.
Итак.
Запуск: создаем пустой/новый чертеж DWG (можно не сохраняться), закидываем/перетаскиваем файл-программу в окно Автокада. Набираем команду BP (или bp - не принципиально). Дальше все просто.
программа пакетно чистит все файлы в каталоге и подкаталогах. Глубину очистки настраиваем пользователь.
Крайне не рекомендую производить пакетную очистку на сервере и рекомендую предварительно сделать копии файлов. Проблем не возникало, но гарантий не даю.
Собственно доступные настройки:
Другая измененная строка - это список обработаных файлов. Если это окно не появится нажмите "F2" в автокаде. Полезно посмотреть какие файлы обработались с путями. Хочется добавить в код вывод информации на сколько уменьшили файлы, но не буду.
PS
В проблемном файле неиспользуемые стили успешно удалились, свойства объектов просматривались сразу. Спасибо Кулик Алексей!
Собственно вопрос - надо ли создавать код для таких задач? Будет он использоваться? Вообще - надо ли? Или оставить все как есть?
Прошу ответы в комментариях. В ответах не приводите никаких ссылок (иначе срабатывает спам-бот, комментарий может запросто свалиться в спам, и его никто не увидит).
Version 0.1.0; исходник.
Ошибки и пожелания
- Для 2013 и 2014 версиий AutoCAD добавить проверку и удаление проксиобъектов
Похожее
Решение
-
для проверки целостности чертежа и исправления некоторых ошибок. для восстановления поврежденного файла чертежа и последующего его открытия. для очистки чертежа от неиспользуемых элементов, таких как определения блоков и слои. для удаления из чертежа неиспользуемых именованных объектов, таких как определения блоков и слои (доступна только с помощью командной строки).
Перечисленные команды можно использовать по отдельности или в сочетании для выполнения операций с чертежом и проверки ошибок. Два способа, показанные в следующих примерах, обеспечивают выполнение одинаковых задач, однако способ 2, в котором используется восстановление, а не проверка, позволяет выполнить более детальную работу по обнаружению и устранению ошибок.
Способ 1
Команда: -ОЧИСТИТЬ
Введите типы неиспользуемых объектов для очистки [Blocks/DEtailviewstyles/Dimstyles/Groups/LAyers/LTypes/MAterials/MUltileaderstyles/Plotstyles/SHapes/textSTyles/Mlinestyles/SEctionviewstyles/Tablestyles/Visualstyles/Regapps/Zero-length geometry/Empty text objects/Orphaned data/All]: A
Введите имена для очистки :
Проверить каждое очищаемое имя? [Yes/No] : N
Команда -ОЧИСТИТЬ
Введите типы неиспользуемых объектов для очистки [Blocks/DEtailviewstyles/Dimstyles/Groups/LAyers/LTypes/MAterials/MUltileaderstyles/Plotstyles/SHapes/textSTyles/Mlinestyles/SEctionviewstyles/Tablestyles/Visualstyles/Regapps/Zero-length geometry/Empty text objects/Orphaned data/All]: R
Введите имена для очистки :
Проверить каждое очищаемое имя? [Yes/No] :
Комментарии
Алексей, добрый день!
Натравил твою программу на архив документов dwg.
После успешной обработки части файлов, всплывает ошибка:
Команда: BP
Обработка файла Лестницы.dwg : |; ошибка: аргумент не является ошибкой
vl-catch-all-apply: "Ошибка Automation. Отсутствует описание."
Проделывал это на 2х машинах. Win7x64/Autocad2012x64rus и Win7x64/Autocad2015x64eng
Ошибка одинаковая.
После этого, насколько я понял, DEMANDLOAD стал=2
Доброго. Оччень интересно. А файл глянуть можно? Я подозреваю, что проблема в самом файле и ее как-то надо "отслеживать". Но требуется пациент
P.S. Файл можно скинуть на почту, например - я приеду домой сегодня и посмотрю, что там можно сделать.
Выслал файл и логи на почту
Удалось скачать
В файле обнаружены прокси:
СПДС GraphiCS - 71 графический объект, 1 неграфический
AEC-объекты (от вертикального приложения типа AutoCAD Architecture / AutoCAD MEP) - 307 неграфических объектов.
В файле сохранились записи о 2 растрах (не предоставлены; вхождений не имеют).
Проверка (которую можно выполнить только в текущем документе) выявляет 2 ошибки (что-то с размерами радиусов "не то").
Кстати, такое количество фильтров слоев действительно необходимо?
P.S. Почищенный файл обратно высылать?
То, что файл - помойка я знаю.
Чистить умею. Удаление прокси от Ривилиса использую давно.
Файлов вагон и маленькая тележка, достался архив от проектного института.
Временами, что то копирую в свои файлы. Вот и хочется почистить исходники, да и места меньше будут занимать.
Открывать каждый файл, чтобы почистить при открытии - не подходит
Влад. Во всём архиве найдётся с десяток подобнх файлов.
Их можно обработать вручную.
"В общем и целом: если разбиение прокси-объектов еще реализовать можно, то удаление – увы и ах. То же самое с проверкой. "
А можно сделать так, чтобы программа не вываливалась на таких файлах, а просто пропускала?
Ну и как бонус, вывести все файлы в лог, чтобы потом вручную, при желании, почистить?
"Их можно обработать вручную."
Ну у всех архивы разные, и я не уверен, что их десяток.
+Настройки для расположения лог файла не сохраняются
+Слетают системные переменные (не верится, что у Алексея нет обработчика ошибок!)
+Почищенный вручную файл (Removeallproxy, explodeallproxy, audit/y, purge/all) все равно не обрабатывается.
BP на нем спотыкается и вываливается, с теми же признаками
"Их можно обработать вручную."
Ну у всех архивы разные, и я не уверен, что их десяток.
+Настройки для расположения лог файла не сохраняются
+Слетают системные переменные (не верится, что у Алексея нет обработчика ошибок!)
+Почищенный вручную файл (Removeallproxy, explodeallproxy, audit/y, purge/all) все равно не обрабатывается.
BP на нем спотыкается и вываливается, с теми же признаками
Так, сегодня у меня точно не получится Работы накидали, я ничего не успеваю
Если удастся в воскресенье поиграться, результат выложу.
Подозреваю, что при записи исходника была использована кодировка не-Windows. Советую переоткрыть lsp в том же Notepad++ и там поменять кодировку. Потом lsp-файл сохранить и снова загрузить в AutoCAD.
Автор:
Похожее
Комментарии
Заработало, когда я снял атрибут "только чтение" с файлов.
ошибок не выдавал про толькочтение
еще бы сюда _audit и удаление vba.
Есть предложение: в диалоге устанавливается флажок "вести лог", а содержимое лога предоставить сюда. Тогда хоть что-то будет понятно (ну, по крайней мере, я на это надеюсь).
ставил, в лог ничего не записывал я бы выложил. ну в любом случае, проблема отпала )
так какие проблемы с _audit?
Очень странно, что лога не было.
С проверкой пока все не очень гуд: время как-то кончилось. Если сегодня с основной работой более-менее получится, попробую продолжить ковырять.
Вчера ковырялся с консольным AutoCAD'ом. Спасибо Евгению Елпанову, подсказал некоторые моменты.
Тем не менее, результаты неутешительные:
- ExplodeProxy*.arx загрузить в консольный AutoCAD не удается. В чем причина - не знаю, но сильно подозреваю, что это не лечится априори (откровенно говоря, мне не удалось загрузить в консольный AutoCAD ни один из существующих arx'ов. Загрузку выполнял как минимум 2 способами: и через функцию arxload , и через команду arx . Результат нулевой.
Поэтому при работе через консоль про корректноеудаление и разбиение прокси можно практически забыть. - Есть альтернативный вариант: создать новый экземпляр AutoCAD и в него загружать файлы. Но и тут не все здорово:
- установить (и потом вернуть обратно) системные переменные demandload и secureload не проблема, но этого мало. При работе с вертикальными приложениями (типа AA / MEP etc) достаточно просто открыть менеджер слоев, чтобы загрузились некоторые модули, которые сделают интеллектуальные объекты вертикалок "не прокси". Т.е. надо предварительно закрыть диспетчер слоев; перезапустить AutoCAD; снова запустить пакетную обработку. ИМХО не гуд.
- в AutoCAD 2014 при создании нового экземпляра приложения и открытии в нем файла с "ненайденными" файлами шрифтов / форм или файлами ссылок вроде бы никакого диалогового окна не появляется. Но - это у меня и только на 2014 (как дело будет обстоять в других версиях - пока не знаю; проверить нет возможности)
Как результат - даже не знаю, имеет ли смысл дальше пытаться что-то сделать. Или оставить как есть и черт с ним?
Собственно вопрос - надо ли создавать код для таких задач? Будет он использоваться? Вообще - надо ли? Или оставить все как есть?
Прошу ответы в комментариях. В ответах не приводите никаких ссылок (иначе срабатывает спам-бот, комментарий может запросто свалиться в спам, и его никто не увидит).
Version 0.1.0; исходник.
Ошибки и пожелания
- Для 2013 и 2014 версиий AutoCAD добавить проверку и удаление проксиобъектов
Проблема
Причины:
- Продукты сторонних разработчиков, работающие в среде AutoCAD.
- Файлы DWG были созданы или сохранены в приложениях сторонних разработчиков (не Autodesk) или продуктах, которые не являются продуктами RealDWG.
- Работа AutoCAD была прервана при сохранении чертежа.
- Старые чертежи многократно использовались в течение длительных периодов времени.
- Аномалии сети (ошибки передачи, блокировка файлов, скрытая запись данных).
- Деградация носителей (повреждение секторов на жестком диске).
Комментарии
Добрый день Алексей! Пакетная чистка/обработка файлов просто необходима для объёмных файловых архивов, и в организациях где обращается большое количество файлов от сторонних организаций. Это всем понятно.
В связке *.bat + *.scr + *.lsp уже много лет использую твой clean.lsp к которому по мере необходимости прикручиваю программы Александра Ривилиса DWGconvert и ExplodeProxy.
Спасибо за труд!
Я к тому, что можно сделать лисп, в котором будет сразу все (ну или почти все) Чего не будет - так это проверки (_audit) файла и удаления неразбитых прокси (removeallproxy). Подобную задачу можно попытаться реализовать только на 2013 и 2014 AutoCAD'ах, т.к. только там есть консольные варианты вызова AutoCAD.
Собственно вопрос пока остается открытым - надо или нафиг?
Алексей, я бы проголосовал ЗА.
Ну, ближайшие две недели я вряд ли смогу заниматься этим делом плотно
Тем не менее в первом посте выложил ссылку. Тестируйте, копите баги После 5 ноября можно будет пообщаться
Ввиду увеличения пользователей 2013-2014 версий Автокада, думаю это предложение будет пользоваться вниманием.
Пакетная обработка документов - сам по себе полезный функционал и не имеет значения, выполняется ли там очистка или же какие другие действия.
Однако смешивать вместе код итерации по документам с кодом конкретных операций - это само по себе не самое хорошее (мягко говоря) решение: код итерации, по хорошему, должен быть отделён от кода модификации чертежа, что позволит одному и тому же коду итерации "скармливать" разный набор операций, выполняемых над каждым документом в цикле (например, коду итерации передаётся имя lisp файла, который следует выполнять в каждом документе).
чет не силен я в кодах лиспа.. как его использовать? на двг.ру читал статью об использовании, но тут все равно не понял как )
Собственно вопрос - надо ли создавать код для таких задач? Будет он использоваться? Вообще - надо ли? Или оставить все как есть?
Прошу ответы в комментариях. В ответах не приводите никаких ссылок (иначе срабатывает спам-бот, комментарий может запросто свалиться в спам, и его никто не увидит).
Version 0.1.0; исходник.
Ошибки и пожелания
- Для 2013 и 2014 версиий AutoCAD добавить проверку и удаление проксиобъектов
Похожее
Похожее
Читайте также: