Данная статья является описанием модификации для работы с чертежами, а именно - плагин для AutoCAD 2018. В ней будут описаны основные функции, интерфейс и результат работы плагина. Так же я кратко расскажу о реализации некоторых функций, особенностях разработки и проблемах.
Для начала опишу принцип загрузки и общую концепцию работы плагина.
Чтобы плагин загружался при запуске автокада, я добавил в папку с acad.exe - "acaddoc.lsp" - файл с параметрами загрузки dll сборки, который автоматически подгружается службами автокада.
Код lisp файла выглядел примерно так:
(
defun-q HwdStartup()
(c:AcadLayoutsCountLoad)
)
(
defun c:AcadLayoutsCountLoad()
(setq echo (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq fd (getvar "filedia"))
(setvar "filedia" 0)
(command "_netload" "path to dll file")
(setvar "filedia" fd)
(setvar "cmdecho" echo)
)
(setq S::STARTUP (append S::STARTUP HwdStartup))
После успешного подключения dll файла и запуска автокада, пользователь увидит новую вкладку в ленте с инструментами - Конвертер сечений.
В ленте можно увидеть 4 вида точек - Ось, Отметка, Черная и Красная (все они представляют из себя блоки с сущностями(entity) точка (DbPoint) + текст (MText)) -, настройки точек и настройка размера окна (область, из которой экспортировать блоки) и кнопку, которая позволяет сформировать документацию (в формате xml, dwg, tsv) из данных о точках на чертеже.
Собственно, каждая точка имеет индивидуальную семантику. Например, Осевая точка требует ввод в формате "ПК_123+12.345" и может быть только единственной на чертеже, а так же имеет уникальный цвет, когда Отметка имеет формат - "53м". Предназначения точек и суть плагина я опишу чуть далее.
Когда на чертеже установлен набор точек (1 осевая, 1 отметка, >2 черных и любое множество красных), можно приступить к запуску экспорта данных.
Процесс экспорта состоит из 3 этапов:
1) Создание data.xml и settings.xml;
2) Используя подпрограмму (proccess запускает .exe файл), которая в свою очередь формирует list.tsv);
3) Используя вторую подпрограмму (proccess запускает .exe файл), которая в свою очередь формирует blueprint.dwg;
Если все условия соблюдены, создается папка в формате <имя чертежа>_время_создания.
В папке создается такой набор выходных данных:
- data.xml
- settings.xml
- <имя_чертежа>list<имя чертежа_время_создания>.tsv
- <имя_чертежа>blueprint<имя чертежа_время_создания>.dwg
Чуть подробнее о каждом:
-
settings.xml - хранит в себе данные о чертеже и выходных файлов: имена, пути, форматы.
-
<имя_чертежа>list<имя чертежа_время_создания>.tsv - хранит в себе данные о чертеже, и формирует входные данные для подпрограммы.
-
<имя_чертежа>blueprint<имя чертежа_время_создания>.dwg - чертеж с графическим выводом результатов.
Подпрограммы были сделаны не мною, поэтому исходного кода прикрепить не могу. Но, сами .exe можно найти в директории:
- section-converter-plugin-for-AutoCAD/resourceReadme/SectionConverterPlugin/
Они позволяют формировать .tsv и .dwg файлы - конечные файлы. Вызываются при формировании data.xml и settings.xml.
Собственно, на этом работа плагина заканчивается. Все подпрограммы закрываются и автокад переходит в режим ожидания и готов к новому экспорту или установке новых точек.
Проект включил в себя несколько паттернов, правил разработки, ошибок именований, пренебрежений к безопаности и в целом множество тех вещей, которые многие себе не позволяют. Из использованных технологий я могу выделить: LINQ, Windows Forms, C# и собственно сам AutoCAD API. Было много событий, свойств и наследования. Проект насыщен различными приемами, которые позволили построить достаточно гибкую архитектуру, благодаря которой, я избежал дублирования кода.
Первый этап проектирования приложения - это определение проблемы. Плагин позволяет пользователям, работающих в сфере геодезии отстранить себя от однотипной, многоэтапной работы, трата времени на которую не стоит своих результатов. Дополнение позволяет устанавливать блоки в один клик и формировать документацию в два клика, когда в чистой версии AutoCAD на одну только установку блоков ушло бы не меньше минуты.
Таким образом, плагин позволяет быстро выполнять задачи пользователей, экономя время и энергию для более важных вещей.