О клиенте
Наш клиент работал с чертежами AutoCAD, которые перед передачей на производственное оборудование требовали ручной подготовки. Оператору приходилось объединять отдельные примитивы чертежа в контуры, аппроксимировать кривые и проверять радиусы и углы на соответствие техническим ограничениям конкретного оборудования.
Клиенту требовалось расширение, работающее непосредственно в AutoCAD и автоматизирующее весь процесс подготовки одной командой. Параметры обработки при этом должны были настраиваться через INI-файл.
- Регион: Европа
- Отрасль: Производство / САПР и промышленная автоматизация
- Срок реализации: около 1 месяца
Задача
Основная задача заключалась в разработке нативного расширения для AutoCAD, которое автоматизировало бы сложную подготовку геометрии чертежей, обеспечивая при этом точность обработки, гибкость настроек и совместимость с несколькими версиями AutoCAD.
- Совместить нативные и управляемые технологии. Плагин должен был объединить вычислительное ядро на ObjectARX/C++20 с пользовательским интерфейсом на C#/.NET, включая элементы ленты AutoCAD, контекстное меню и плавающую панель;
- Обеспечить поддержку нескольких версий AutoCAD. Решение должно было работать с AutoCAD 2021-2025. Для каждой версии требовался отдельный SDK ObjectARX, при этом кодовая база должна была оставаться общей;
- Восстанавливать контуры из отдельных примитивов. Плагину необходимо было преобразовывать независимые объекты Line, Arc, Polyline и Spline в связанные контуры без исходных данных об их смежности;
- Учитывать требования производственного оборудования к геометрии. Обработанная геометрия должна была соответствовать ограничениям конкретного оборудования, включая допустимую погрешность аппроксимации по хорде, минимальный радиус дуги и требования к углам излома.
Наш подход
Мы выстроили процесс разработки в виде нескольких независимых инфраструктурных и алгоритмических уровней, каждый из которых можно было отдельно тестировать и дорабатывать. Нативный компонент на ObjectARX отвечал за команды AutoCAD и непосредственную работу с чертежами, отдельная библиотека на C++ — за обработку геометрии и конфигурацию, мост на C++/CLI обеспечивал взаимодействие между нативным и управляемым кодом, а пользовательский интерфейс работал на C#/.NET.
Такой подход позволил отделить критически важную бизнес-логику от зависимостей, связанных с AutoCAD, и покрыть ее модульными тестами без запуска самой программы. При этом логику интерфейса удалось оставить в управляемом коде. Для вспомогательных задач — чтения INI-файлов, работы с путями, сравнения координат и обработки ошибок — мы использовали собственные легковесные решения. Благодаря этому плагин получился предсказуемым в работе, компактным и удобным в сопровождении.
Решение
СКЭНД разработала нативный плагин ObjectARX для AutoCAD с многоуровневой архитектурой, которая объединяет высокопроизводительное ядро обработки геометрии на C++ и пользовательский интерфейс на C#/.NET. Плагин загружается непосредственно в AutoCAD, добавляет собственную вкладку на ленту, контекстное меню и плавающую WPF-панель и регистрирует команду для обработки выбранных примитивов чертежа.
В ходе обработки плагин фильтрует объекты по слою и длине, восстанавливает контуры, упрощает геометрию, аппроксимирует кривые дугами и сохраняет оптимизированный результат в отдельном слое PROCESSED.
Ключевые возможности
- Архитектура на C++ и C#. Плагин объединяет нативное ядро на ObjectARX/C++20 и интерфейс на C#/.NET с помощью моста C++/CLI;
- Обработка примитивов AutoCAD. Решение напрямую работает с объектами Line, Arc, Polyline и Spline в AutoCAD и фильтрует их по заданным правилам;
- Восстановление контуров. Плагин объединяет отдельные примитивы в связанные контуры, анализируя начальные и конечные точки объектов;
- Упрощение геометрии. Алгоритм Дугласа — Пекера снижает сложность контуров, сохраняя отклонения в пределах допустимой погрешности по хорде;
- Аппроксимация дугами. Обработанные контуры преобразуются в дуги с учетом требований к минимальному радиусу и углу замыкания сегментов;
- Настройка через INI-файл. Параметры, связанные с требованиями производственного оборудования, можно изменять без внесения изменений в код плагина;
- Интерфейс, встроенный в AutoCAD. Пользователи взаимодействуют с плагином через вкладку на ленте, контекстное меню и плавающую WPF-панель;
- Тестируемая логика на C++. Логика обработки геометрии и конфигурации вынесена в отдельную библиотеку и покрыта модульными тестами.
Скриншоты
-
Вкладка «Упрощение геометрии» и контекстное меню позволяют запускать команды плагина непосредственно из стандартного интерфейса AutoCAD.
-
Ограничения производственного оборудования, выходные параметры, допуски и настройки журналирования можно задавать непосредственно в AutoCAD и сохранять в INI-файле.
-
Белой линией показан результат работы команды “Упростить” - оптимизированный контур, построенный по исходным примитивам. Алгоритм устраняет ступенчатые переходы и сохраняет отклонение от исходной геометрии в пределах заданного допуска.
Технологический стек
- Языки и платформа: C++20, C# (.NET), ObjectARX SDK 2021-2025, Visual Studio 2022
- API AutoCAD: AcDbDatabase, AcDbLine / Arc / Polyline / Spline, acedRegCmds, AcApDocManagerReactor, acedGetCurrentSelectionSet
- Взаимодействие C++ и .NET: сборка C++/CLI в качестве связующего слоя, LoadLibrary + GetProcAddress для динамической загрузки
- Интерфейс (.NET): Autodesk.Windows.Ribbon, PaletteSet, ContextMenuExtension, WPF через ElementHost
- Обработка геометрии: восстановление контуров с помощью хеш-таблицы на основе кодов точек, алгоритм Дугласа — Пекера, аппроксимация дуг по трем точкам и методом наименьших квадратов
- Алгоритмы: двухпроходное построение цепочек для открытых и замкнутых контуров, определение углов излома, сглаживание дугой с учетом минимального радиуса
- Стандартная библиотека C++: std::filesystem, std::format, std::ranges, unordered_map/set, reference_wrapper, optional, unique_ptr
- Конфигурация: собственный INI-парсер, типобезопасные шаблонные методы чтения и записи, тесты на корректность цикла чтения и повторной записи данных
- Тестирование: Visual Studio CppUnitTestFramework, сценарии проверки чтения и повторной записи, а также обработки некорректных данных
- Сборка: MSBuild, файлы .props для разных версий AutoCAD
Результат
В результате клиент получил нативный плагин для AutoCAD, который автоматизирует подготовку геометрии чертежей и помогает приводить выбранные примитивы в соответствие с техническими требованиями производственного оборудования. В рамках проекта были реализованы:
- Нативный плагин ObjectARX с поддержкой AutoCAD 2021-2025;
- Гибридная архитектура на C++ и C# с отдельным вычислительным ядром и интерфейсом на .NET;
- Собственная вкладка на ленте AutoCAD, контекстное меню и плавающая WPF-панель;
- Автоматизированная обработка объектов Line, Arc, Polyline и Spline;
- Восстановление контуров, упрощение геометрии, аппроксимация дугами и сглаживание углов излома;
- Настройка правил обработки через INI-файл без внесения изменений в код;
- Логика обработки геометрии и конфигурации вынесена в отдельную библиотеку C++ и покрыта тестами;
- Оптимизированный результат сохраняется в отдельном слое PROCESSED для дальнейшего использования в производстве.