Введение
Для работы с проблемными файлами создано множество инструментов, позволяющих устранять те или иные проблемы. Но что делать в случае, когда файлов, подлежащих очистке или восстановлению, – огромное количество? Неужели каждый из них придется открывать вручную и обрабатывать отдельно?
Решением стала утилита «Пакетная обработка файлов», которая позволяет автоматизировать процесс проверки и очистки файлов, производя все необходимые операции применительно к набору файлов (пакету). Предлагаем не только рассмотреть стандартную процедуру пакетной обработки, но и научиться настройке утилиты на автоматическое обновление версий файлов, а также создавать для нее новые скрипты.
Пакетная обработка как утилита очистки
Вызвать диалоговое окно пакетной обработки можно несколькими способами:
кнопка nanoCAD → Утилиты → Пакетная обработка файлов;
меню: Файл → Утилиты → Пакетная обработка файлов;
командная строка: ПАКЕТОБР (BATCHPROCESS).
После запуска открывается диалоговое окно Пакетная обработка, которое подразделяется на четыре области (рис. 1):
Перечень команд;
Выбор файлов для обработки;
Выбор профиля и запуск утилиты;
Область создания отчета.
![](https://habrastorage.org/getpro/habr/upload_files/98f/d16/ca5/98fd16ca546d452f23a1cf553831052f.png)
Давайте рассмотрим каждую область.
Перечень команд
В этой области располагается перечень стандартных команд, выполняемых утилитой (рис. 2):
![](https://habrastorage.org/getpro/habr/upload_files/114/d9b/0e7/114d9b0e748cdbdbdfcb81877beb647c.png)
В стандартный набор входят следующие команды:
Очистка файлов (PURGE);
Очистка файла от объектов CIVIL (CLEARCIVIL);
Проверка файлов (AUDIT);
Проверка геометрии (AUDITGEOMETRY);
Сохранить (SAVE).
Остановимся немного подробнее на команде Очистка файлов. Во-первых, очистка производится в том числе на выключенных, замороженных и заблокированных слоях. Связано это с тем, что на время обработки создается вспомогательная конфигурация слоев, в которой все слои разморожены и разблокированы. Во-вторых, помимо стандартных возможностей команды PURGE, при пакетной обработке реализована возможность очистки файлов внешних ссылок (для этого следует установить флажок Очищать внешние ссылки).
Где это может пригодиться? Самый распространенный случай – очистка файлов от аннотативных масштабов. Аннотативные масштабы – это технология Autodesk. Зачастую неоправданно большие по размеру файлы получаются как результат наличия в них некоторого количества таких масштабов, из-за чего даже при банальном копировании объектов через буфер обмена программа может зависнуть. Следовательно, файлы всегда следует очищать от этих масштабов, причем очень важно чистить и все внешние ссылки. В противном случае удаленные масштабы могут вернуться именно из файлов внешних ссылок.
При очистке с помощью пакетной обработки программа автоматически открывает файлы внешних ссылок и очищает их от аннотативных масштабов, после чего обновляет все внешние ссылки.
Выбор файлов для обработки
В этой области располагаются инструменты, позволяющие выбрать файлы для пакетной обработки, а также приводится перечень выбранных файлов (рис. 3):
![](https://habrastorage.org/getpro/habr/upload_files/024/728/1e4/0247281e4adabfa79fba6bdb07c802d4.png)
Рассмотрим предложенные кнопки:
1) Открыть файл - позволяет открыть на обработку конкретный *.dwg-файл через Проводник;
2) Открыть папку - позволяет открыть на обработку сразу все *.dwg-файлы, содержащиеся в папке, выбранной через Проводник. Следует учитывать, что на обработку будут открываться только файлы, размещенные непосредственно в корне выбранной папки. А настроить поиск файлов во вложенных подпапках можно с помощью инструмента Настройки.
3) Настройки - при нажатии на эту кнопку открывается диалоговое окно Настройки (рис. 4), где можно установить/сбросить флажок Искать в подпапках. Настройка отвечает за открытие на обработку не только *.dwg-файлов, содержащихся в выбранной папке, но и во всех вложенных папках.
![Рис. 4. Диалоговое окно Настройки Рис. 4. Диалоговое окно Настройки](https://habrastorage.org/getpro/habr/upload_files/063/583/020/0635830200b82b804a92fd949e9f490b.png)
4) Использовать текущий чертеж - позволяет добавить в список на обработку текущий открытый документ.
В окне отобразится список выбранных для обработки файлов (рис. 5).
![Рис. 5. Список выбранных файлов Рис. 5. Список выбранных файлов](https://habrastorage.org/getpro/habr/upload_files/467/aea/b5a/467aeab5ab1fdd1a54c727118fe6fcc2.png)
Здесь удобно исключать из обработки отдельные файлы (щелчок правой кнопкой мыши (ПКМ) по выбранному файлу → Исключить) или все файлы разом (щелчок ПКМ по любому файлу в списке → Очистить) – (рис. 6).
![Рис. 6. Контекстное меню для работы с файлами Рис. 6. Контекстное меню для работы с файлами](https://habrastorage.org/getpro/habr/upload_files/dd1/714/70f/dd171470f202b435b1d4abe19d02f657.png)
Следует помнить, что пакетная обработка не влечет изменения графики файлов, то есть после пакетной обработки в целевом файле сохранятся все используемые масштабы/стили/вес линий и т.д.
Выбор профиля и запуск утилиты
Здесь размещены инструменты для работы с профилями (в нашем случае мы используем стандартный профиль default), а также управляющие кнопки (рис. 7).
![](https://habrastorage.org/getpro/habr/upload_files/164/7e0/691/1647e06918938c95660f1d33102cf91e.png)
Представлены следующие кнопки:
Старт – запуск процесса пакетной обработки;
Закрыть – закрытие диалогового окна пакетной обработки файлов;
Справка – вызов справки.
После нажатия кнопки Старт процесс пакетной обработки будет запущен, а в окне появится информация, подобная той, что представлена на рис. 8.
![](https://habrastorage.org/getpro/habr/upload_files/71a/fc8/ae5/71afc8ae51519219d4f5eda16bd9ce28.png)
После запуска утилиты кнопки диалогового окна становятся неактивными, утилита выводит записи о найденных и исправленных ошибках. Состояние процесса можно отслеживать через прогресс-бар в самом низу окна.
Приостановить процесс пакетной обработки вы можете при помощи кнопки Стоп, которая появляется вместо кнопки Старт.
Анализ пакетной обработки
По завершении процесса пакетной обработки утилита формирует отчет, который располагается в предназначенной для этого области окна (рис. 9).
![](https://habrastorage.org/getpro/habr/upload_files/440/5e3/4b3/4405e34b3096d70f80301153d8b98b71.png)
Над этой областью находятся следующие кнопки:
1) Копировать в буфер обмена - кнопка позволяет скопировать отчет в буфер обмена.
2) Сохранить лог - лог-файлы помогают выяснить, в чем именно заключается проблема того или иного файла. Сохранять подобные файлы зачастую весьма практично, ведь к ним всегда можно вернуться, чтобы отследить ошибку, а также определить, каким именно образом ее удалось исправить. Также лог-файлы можно передавать другим специалистам, которые проанализируют их и сделают соответствующие выводы.
Кнопка Сохранить лог позволяет сохранить через Проводник отчет о проделанной обработке – в виде файла формата LOG. Файл можно открыть и прочитать с помощью любого текстового редактора.
Давайте разберем, что вообще представляет собой отчет.
Проведем пакетную обработку проблемного файла, который содержит некое количество аннотативных объектов, после чего сохраним отчет в виде лог-файла и запустим его через текстовый редактор (рис. 10).
![](https://habrastorage.org/getpro/habr/upload_files/673/1b3/e99/6731b3e99e34d98d0cfd57ab21d18291.png)
В данном отчете можно увидеть все этапы проведения пакетной обработки проблемного файла X.dwg:
1 – очистка файла (PURGE) : файл очищается от содержащихся в нем аннотативных стилей (размерных, текстовых, стилей таблиц);
2 – очистка файла от объектов CIVIL (CLEARCIVIL, вызывающая команду DICTREMOVE (namedobjdict) "Siberia");
3 – проверка файла (AUDIT);
4 – проверка геометрии (AUDITGEOMETRY), в том числе проверка Z-координат и штриховок;
5 – сохранение исправленного файла (SAVE).
Также, если зайти в свойства этого файла (щелчок ПКМ по выбранному файлу → Свойства), можно увидеть, что после проведения пакетной обработки, очистившей его от аннотативных объектов, вес файла значительно уменьшился: c 4,32 Мб до 300 Кб (рис. 11).
![](https://habrastorage.org/getpro/habr/upload_files/bac/2bf/f51/bac2bff51599e235cc85a1395ca4f5ce.png)
Расширенные возможности утилиты
Помимо стандартных возможностей, утилита располагает и вспомогательными инструментами, дающими пользователю возможность вносить коррективы в ее работу, настраивая порядок и перечень рабочих команд. Сразу заметим, что в стандартный профиль default вносить какие-либо изменения не следует, для этого лучше создавать отдельные профили.
Корректировка рабочих команд
Чтобы понять, какие операции мы можем производить с перечнем команд, вернемся к соответствующей области окна Пакетная обработка (рис. 12).
![](https://habrastorage.org/getpro/habr/upload_files/fcd/053/4bc/fcd0534bc432b2f34f3d9fa301ddf1b5.png)
Над перечнем команд расположены три кнопки.
1) Новый скрипт - эта кнопка отвечает за создание нового профиля с пустым набором команд (рис. 13).
![](https://habrastorage.org/getpro/habr/upload_files/f21/fb6/83b/f21fb683bf6fb28f1689833d60c693a5.png)
Благодаря этой функции мы можем создавать множество профилей с различным набором/порядком команд, что обеспечивает более оперативную работу с файлами.
2) Добавить команду - кнопка, позволяющая добавлять новые команды вручную. После вызова команды открывается диалоговое окно Добавить команду (рис. 14).
![](https://habrastorage.org/getpro/habr/upload_files/498/2fe/482/4982fe4824bee67655929eb48b3791a8.png)
Чтобы добавить в текущий перечень новую команду, нужно ввести в этом окне и ее отображаемое имя, и внутреннее – то есть имя, под которым она зарегистрирована в приложении. Важно знать, что отображаемые и внутренние имена не всегда совпадают, поэтому внутреннее имя следует искать отдельно.
Узнать внутреннее имя команды можно в диалоге Настройка пользовательского интерфейса (Настройки → Адаптация → Интерфейс или команда INTERFACE).
В открывшемся окне отобразится список всех доступных команд (рис. 15).
![](https://habrastorage.org/getpro/habr/upload_files/6b6/e36/0c9/6b6e360c9e8f3615e9312522c9f9218c.png)
К примеру, давайте найдем внутреннее имя команды Сохранить как. Для этого в окне настроек пользовательского интерфейса пропишем имя искомой команды в поисковой строке (рис. 16).
![](https://habrastorage.org/getpro/habr/upload_files/be5/37c/9e7/be537c9e707714015b1d9e2c7ae465fc.png)
В разделе Свойства можно увидеть ее внутреннее имя: SaveAsDocument (рис. 17).
![](https://habrastorage.org/getpro/habr/upload_files/390/610/f61/390610f61a6e5693ec568c5147e8e2e5.png)
Зная, как находить внутренние имена, добавим в перечень рабочих команд новую – к примеру, Конвертировать в 2D. Для этого вышеописанным способом выясним внутреннее имя этой команды (FLATTEN), после чего в диалоговом окне Добавить команду заполним соответствующие графы (рис. 18).
![](https://habrastorage.org/getpro/habr/upload_files/b6b/643/32b/b6b64332b10a8aabcf6a4d13d8c463fc.png)
После нажатия кнопки OK текущий перечень пополнится командой Конвертировать в 2D, которая будет применяться ко всем файлам, обрабатываемым по данному профилю (рис. 19).
![](https://habrastorage.org/getpro/habr/upload_files/8af/7f8/4dc/8af7f84dce0e2ca4cd8d6dbe6d2ce8d9.png)
Ссылка на профиль: https://corp.nanocad.ru/~ygvKP
3) Изменить порядок команд - позволяет изменять порядок выполнения рабочих команд. Важно помнить, что выполнение всех команд осуществляется сверху вниз по списку, поэтому с изменением порядка команд меняется и принцип работы утилиты. К примеру, можно настроить сохранение файла сразу после выполнения команды очистки и т.д.
После вызова команды откроется диалоговое окно Изменить порядок команд (рис. 20).
![](https://habrastorage.org/getpro/habr/upload_files/89c/fe9/ce2/89cfe9ce2a392f8f4d9899f0cddf413b.png)
Чтобы установить другой порядок команд, используйте перетаскивание курсором (drag-and-drop) – (рис. 21).
![](https://habrastorage.org/getpro/habr/upload_files/b21/fb9/036/b21fb90363d0ddeb3b4b61f4995e4cd8.png)
Завершив эту операцию, нажмите кнопку ОК – изменения перенесутся в перечень (рис. 22).
![](https://habrastorage.org/getpro/habr/upload_files/5f4/38d/4b5/5f438d4b5743569cda5a00f427f503bd.png)
Работа с профилями
Теперь вернемся к области с профилями и управляющими кнопками (рис. 23).
![](https://habrastorage.org/getpro/habr/upload_files/aea/fc2/4c0/aeafc24c0bc6cc08f94335dc1fa02a18.png)
Как уже сказано, есть возможность создавать новые профили, хранящие в себе информацию об определенном заданном наборе команд. В этой области мы можем оперативно переключаться между ними через раскрывающийся список (рис. 24).
![](https://habrastorage.org/getpro/habr/upload_files/dd9/f20/2e8/dd9f202e8107b87a8e5bfcd22ea55a3a.png)
Над списком расположены три кнопки:
1) Сохранить профиль - сохраняет через Проводник текущий настроенный профиль в виде файла формата *.json, обеспечивая возможность последующего использования этого профиля.
По умолчанию файл профиля сохраняется по следующему пути:
%AppData%\Nanosoft\nanoCAD X\Batches,
где X – версия и сборка программного продукта.
2) Переименовать профиль - позволяет переименовать текущий профиль. Не работает со стандартным профилем default.
3) Удалить профиль - позволяет удалить текущий профиль. Также не работает со стандартным профилем default.
Пакетная обработка как инструмент обновления версии файла
Утилита пакетной обработки также имеет ряд неочевидных, но вполне полезных применений: к примеру, возможность автоматически пересохранить множество файлов в более новую версию *.dwg-формата.
Чтобы узнать версию *.dwg-файла, откройте его через текстовый редактор – например, Блокнот. Первые символы укажут на версию, остальная часть файла будет отображаться в зашифрованном виде (рис. 25).
![](https://habrastorage.org/getpro/habr/upload_files/410/446/5fd/4104465fd6d1297be81dd15cc0acd078.png)
Узнать версию, в которой сохранен файл, можно из списка:
AC1015 – dwg 2000;
AC1018 – dwg 2004;
AC1021 – dwg 2007;
AC1024 – dwg 2010;
AC1027 – dwg 2013;
AC1032 – dwg 2018.
Следует отметить, что наиболее предусмотрительно работать и сохранять файлы в более новых версиях формата .dwg, так как это обеспечит лучшую совместимость файла, а также уменьшит риск потери части информации.
Давайте рассмотрим порядок действий при пересохранении, к примеру, архива файлов устаревшего формата в актуальный формат.
Откройте окно Настройки программы (Настройки → Адаптация → Настройки программы или команда OPTIONS), после чего в графе Сохранять в формате выберите требуемый формат файла (в нашем случае – Документ, совместимый с AutoCAD 2018 и выше).
В графе Применять выбранный формат установите Для всех документов (рис. 26).
![](https://habrastorage.org/getpro/habr/upload_files/3d4/a1d/78d/3d4a1d78dc7ae34b9ca584a9d9979481.png)
Запустите утилиту пакетной обработки, пересохраните в любое место стандартный профиль default (с помощью кнопки Сохранить профиль), а затем сделайте этот новый профиль текущим.
Исключите из перечня все команды, кроме Сохранить (щелчок ПКМ → Исключить).
Откройте на обработку ваш архив файлов, после чего запустите процедуру обработки (рис. 27).
![](https://habrastorage.org/getpro/habr/upload_files/fe8/18b/eb6/fe818beb6c3bc8715b4fdbba580d3732.png)
Файлы автоматически пересохранятся в новой версии формата. Таким образом вы можете пакетно пересохранять огромные архивы, обновляя их формат до установленной в настройках версии.
Ссылка на профиль: https://corp.nanocad.ru/~u9lde
Пакетная обработка как инструмент создания пользовательских скриптов
Помимо добавления стандартных команд в перечень для пакетной обработки, можно подгружать команды из LISP-приложений. Рассмотрим такую возможность на примере приложения layers (wmatch).lsp (рис. 28).
![](https://habrastorage.org/getpro/habr/upload_files/692/c06/ab2/692c06ab2eb9778d48c139198c8714ab.png)
Применяя команду layerstate-delete-wmatch "", это приложение удаляет все конфигурации слоев в файле. Сразу запомним, что инициализирующая команда в нашем приложении – nanooolayer (определяется в строке defun с:), именно с ее помощью мы в дальнейшем подгрузим приложение в утилиту.
Чтобы использовать это приложение, его следует загрузить в программу. Прежде всего нужно открыть диалоговое окно Загрузка/Выгрузка приложений – для этого перейдите в Настройки → Дополнения → Приложения (или команда APPLOAD). В открывшемся окне можно через встроенный Проводник выбирать необходимый для загрузки LSP-файл и загружать его в программу при помощи кнопки Загрузить (рис. 29).
![](https://habrastorage.org/getpro/habr/upload_files/1c5/645/0ea/1c56450eacc1ccc53220b882fe16d582.png)
Настроим LISP-приложение на автоматическую загрузку при запуске программы. Нажмем в окне Загрузка/Выгрузка приложений (рис. 30) кнопку Приложения (1), а в открывшемся окне Автозагрузка – кнопку Добавить (2), после чего через Проводник укажем наш LSP-файл.
![](https://habrastorage.org/getpro/habr/upload_files/899/1e4/192/8991e419210741ba3cf729a0f99bc7b3.png)
Далее необходимо зарегистрировать инициализирующую команду приложения в nanoCAD. Откроем окно настроек пользовательского интерфейса, в котором щелкнем ПКМ по перечню инструментов и в появившемся контекстном меню выберем Создать команду (рис. 31).
![](https://habrastorage.org/getpro/habr/upload_files/e69/813/d66/e69813d661875127389ca56171f2ec35.png)
Откроется диалоговое окно Создать команду, в котором мы укажем всю необходимую информацию. Как уже сказано, инициализирующая команда в нашем LISP-приложении – nanooolayer, она отвечает за запуск его работы. Внесем ее значение в графу Внутреннее имя. Именно по значению внутреннего имени команды утилита пакетной обработки сможет добавить ее в свой перечень (рис. 32).
![](https://habrastorage.org/getpro/habr/upload_files/b27/cd1/88c/b27cd188c92a1aaf7cd7c807110dc3bb.png)
После нажатия кнопки ОК можно видеть, что команда nanooolayer добавилась в перечень инструментов (рис. 33).
![](https://habrastorage.org/getpro/habr/upload_files/462/d5e/acf/462d5eacfa0f099884674a34430d4f1a.png)
Далее запустим утилиту пакетной обработки, создадим новый профиль и воспользуемся уже знакомым нам инструментом Добавить команду. В графе Внутреннее имя укажем команду nanooolayer (рис. 34).
![](https://habrastorage.org/getpro/habr/upload_files/d04/ae1/172/d04ae11723819fbb498875ce549f69aa.png)
После этого команда загрузится в утилиту и станет доступна для работы. Таким образом, пользователь имеет возможность создавать собственные скрипты с командами, подгружаемыми из LISP-приложений, и применять их для автоматической обработки пакета файлов.
Ссылка на используемый LSP-файл: https://corp.nanocad.ru/~D4ASp
Также следует сказать, что данный файл является частью главного LISP-приложения - layerstdel.lsp (ссылка на LSP-файл: https://corp.nanocad.ru/~4pIbc). Данное приложение разрабатывалось для работы с конфигурациями слоёв и имеет следующие опции:
(layerstate-delete-wcmatch "*") - удаляет все конфигурации слоев в файле;
(layerstate-delete-wcmatch "13.03.2019") - удаляет конкретную конфигурацию по ее имени;
Также имеется возможность использовать маски при указании имен, тем самым удаляя сразу несколько конфигураций, к примеру:
(layerstate-delete-wcmatch "01*");
(layerstate-delete-wcmatch "*$*$*");
Заключение
Резюмируя все сказанное, можно отметить, что утилита пакетной обработки файлов обеспечивает следующие возможности:
Автоматическая проверка и очистка большого количества файлов;
Отслеживание и анализ ошибок, накопившиеся в файлах, благодаря полученным лог-файлам;
Автоматическое пересохранение множества файлов в более новые версии *.dwg-формата;
Создание пользовательских скриптов с командами, подгружаемыми из LISP-приложений.
Полезные ссылки
1) Горюнов А.А. Работа с проблемными *.dwg-файлами в среде nanoCAD версия 2.0
2) Вебинар «Новые возможности Платформы nanoCAD 22»
3) Спирин С.В. Создание кнопки LISP-приложения в nanoCAD
Матвей Лукьянов
технический специалист группы технической поддержки отдела внедрения и интеграции базовых продуктов компании «Нанософт»