ObjectARX
ObjectARX — это программный интерфейс (API) для разработки пользовательских приложений, расширяющих функциональность систем автоматизированного проектирования (САПР) на платформе AutoCAD и некоторых других продуктов компании Autodesk. ObjectARX предоставляет разработчикам прямой доступ к объектной модели чертежа, ядру графической системы и базам данных САПР, позволяя создавать собственные команды, объекты, диалоговые окна, процедуры обработки событий и иные модули, работающие в одном адресном пространстве с AutoCAD.
История
ObjectARX был разработан компанией Autodesk в середине 1990-х годов как преемник более ранних технологий расширения AutoCAD — AutoLISP (интерпретируемый язык, основанный на Lisp) и ADS (AutoCAD Development System, основанный на языке C). Основным преимуществом новой технологии стала возможность создания высокопроизводительных, динамически загружаемых библиотек (DLL-модулей) на языках C и C++, которые компилируются в машинный код и выполняются непосредственно в процессе AutoCAD, что обеспечивало значительно большую скорость работы по сравнению с интерпретируемыми скриптами.
Первая версия ObjectARX была выпущена вместе с AutoCAD R13 (1994 год). С тех пор интерфейс постоянно развивался, адаптируясь к изменениям в архитектуре AutoCAD (переход на .NET Framework, появление 64-битных версий, внедрение поддержки многоядерных процессоров). Начиная с AutoCAD 2006, компания Autodesk также продвигала Managed .NET API (на базе C# и VB.NET) как более простую и безопасную альтернативу для многих задач, однако ObjectARX остаётся основным инструментом для создания сложных, критичных к производительности приложений, особенно тех, которые требуют создания собственных графических примитивов (пользовательских объектов).
Архитектура и принципы работы
ObjectARX построен на объектно-ориентированной модели, где каждый элемент чертежа (линия, окружность, текст, размер, блок, слой, стиль и т.д.) представлен как объект определённого класса, наследующего от базового класса AcDbObject. Все объекты чертежа хранятся в контейнерах — базах данных чертежа (AcDbDatabase), которые, в свою очередь, управляются ядром AutoCAD.
Основные компоненты ObjectARX:
- AcRx (Autodesk Runtime Extension) — библиотека, обеспечивающая динамическую загрузку/выгрузку модулей, регистрацию классов, создание иерархии наследования и механизм сообщений (уведомлений).
- AcDb (AutoCAD Database) — библиотека для работы с базой данных чертежа. Предоставляет классы для создания, чтения, изменения и удаления всех типов объектов (графических и неграфических), а также для работы с транзакциями (гарантия целостности данных при параллельном доступе).
- AcEd (AutoCAD Editor) — библиотека для взаимодействия с пользователем и графическим редактором. Позволяет регистрировать новые команды, обрабатывать ввод с клавиатуры и мыши, управлять видом (зум, панорамирование), создавать пользовательские контекстные меню и подсказки.
- AcGi (AutoCAD Graphics Interface) — графический интерфейс для рендеринга (отрисовки) объектов. Позволяет управлять внешним видом примитивов (цвет, тип линии, прозрачность, материалы), а также создавать собственные алгоритмы визуализации для пользовательских объектов.
- AcAp (AutoCAD Application) — библиотека для управления приложением AutoCAD в целом: доступ к документам, настройкам, палитрам, диалоговым окнам, событиям (например, открытие/сохранение чертежа).
Приложение на ObjectARX представляет собой DLL-библиотеку, которая загружается в память AutoCAD с помощью команды ARX или автоматически при запуске. Внутри DLL реализуется точка входа acrxEntryPoint, которая обрабатывает сообщения от ядра (например, загрузка, выгрузка, начало команды). Разработчик регистрирует свои классы и команды, после чего они становятся доступны в среде AutoCAD как встроенные функции.
Классификация приложений
Приложения, создаваемые с помощью ObjectARX, можно разделить на несколько категорий по функциональному назначению:
- Создание пользовательских объектов (Custom Objects) — наиболее мощная и сложная категория. Разработчик определяет новый класс, наследующий от
AcDbEntity(для графических объектов) илиAcDbObject(для неграфических), и реализует его поведение: хранение данных, отрисовку, поддержку привязок, редактирование через ручки (grips), сериализацию (сохранение/загрузку в DWG-файл). Примеры: параметрические детали, интеллектуальные трубопроводы, элементы топографии. - Разработка команд и утилит — создание новых команд, автоматизирующих рутинные операции (например, массовое изменение свойств объектов, импорт/экспорт данных, генерация отчётов). Команды регистрируются с помощью макроса
ACED_ARXCOMMAND_ENTRY_AUTO. - Интеграция с внешними системами — обеспечение обмена данными между AutoCAD и другими программами (ERP, PLM, ГИС). ObjectARX позволяет напрямую читать/писать DWG-файлы, а также взаимодействовать с COM-объектами и базами данных.
- Создание диалоговых окон и панелей — разработка пользовательских интерфейсов с использованием MFC (Microsoft Foundation Classes) или Qt, которые встраиваются в окно AutoCAD.
- Реакторы (Reactors) — механизм, позволяющий приложению реагировать на определённые события в AutoCAD (изменение объекта, открытие документа, выбор объекта мышью). Реакторы используются для реализации адаптивного поведения (например, автоматическое обновление связанных объектов при изменении исходного).
Преимущества и недостатки
Преимущества:
- Максимальная производительность — код компилируется в машинный язык и выполняется напрямую, без интерпретации или JIT-компиляции.
- Полный контроль — доступ ко всем аспектам работы AutoCAD, включая ядро графики, базу данных и механизм транзакций.
- Создание пользовательских объектов — возможность сохранять в DWG-файле собственные типы данных с уникальной логикой поведения, что невозможно при использовании только AutoLISP или .NET API.
- Зрелость и стабильность — технология существует более 25 лет, имеет обширную документацию и сообщество разработчиков.
Недостатки:
- Высокая сложность разработки — требует глубоких знаний C++, архитектуры AutoCAD и объектно-ориентированного программирования. Ошибки в коде (например, утечки памяти, некорректная работа с указателями) могут привести к падению AutoCAD.
- Зависимость от версии AutoCAD — DLL, скомпилированная для одной версии AutoCAD, не будет работать с другой (необходима перекомпиляция). Это усложняет поддержку продукта для разных версий программы.
- Отсутствие кроссплатформенности — ObjectARX привязан к операционной системе Windows (для macOS существует отдельный, менее развитый API — AutoCAD for Mac ObjectARX).
- Риск нестабильности — из-за работы в одном адресном пространстве с AutoCAD, любая ошибка в приложении может привести к аварийному завершению всей программы.
Применение
ObjectARX широко используется в промышленности и строительстве для создания специализированных САПР-решений. На его основе разработаны многие известные приложения, в том числе:
- Autodesk Civil 3D — система для проектирования объектов инфраструктуры (дороги, генплан, сети), целиком построенная на пользовательских объектах ObjectARX.
- Autodesk Architecture (теперь в составе AutoCAD Architecture) — надстройка для архитектурного проектирования, использующая ObjectARX для создания «умных» стен, окон, дверей.
- Autodesk Mechanical Desktop — инструмент для машиностроительного проектирования.
- Множество отраслевых решений — например, системы для проектирования металлоконструкций (Tekla Structures использует собственный API, но многие плагины для AutoCAD — на ObjectARX), электрических схем, газоснабжения, геоинформационные системы (ГИС).
В России ObjectARX также применяется для разработки локализованных решений и надстроек, адаптирующих AutoCAD под требования отечественных стандартов (ГОСТ, СПДС). Например, существуют модули для автоматического оформления чертежей по ЕСКД, создания спецификаций и ведомостей.
Лицензирование и инструменты
Для разработки приложений ObjectARX требуется лицензия на AutoCAD (или другой продукт Autodesk, поддерживающий API) и среда разработки Microsoft Visual Studio (поддерживаются определённые версии, соответствующие версии AutoCAD). Autodesk предоставляет бесплатный SDK (Software Development Kit) для ObjectARX, который содержит заголовочные файлы, библиотеки, примеры кода и документацию.
Распространение готовых приложений ObjectARX обычно осуществляется в виде скомпилированных DLL-файлов, которые пользователь загружает в AutoCAD. Коммерческие приложения могут требовать отдельной лицензии или распространяться как платные надстройки.
Критика и альтернативы
Основная критика ObjectARX связана с его сложностью и высокой стоимостью разработки. Для многих задач, не требующих создания пользовательских объектов или экстремальной производительности, более предпочтительными альтернативами являются:
- Managed .NET API — предоставляет доступ к большей части функциональности ObjectARX через языки C# и VB.NET, работающие под управлением .NET Framework. Он проще в освоении, безопаснее (управление памятью автоматическое) и быстрее в разработке. Однако он не позволяет создавать пользовательские объекты (Custom Objects) — только использовать встроенные типы.
- AutoLISP / Visual LISP — интерпретируемый язык, идеальный для быстрого создания небольших скриптов и макросов. Прост в изучении, но медленнее и имеет ограниченные возможности.
- VBA (Visual Basic for Applications) — ранее поддерживался, но начиная с AutoCAD 2010 был исключён из стандартной поставки (доступен как отдельная загрузка).
Выбор между ObjectARX и .NET API часто определяется требованиями к производительности и необходимости создания пользовательских объектов. Для большинства современных разработок Autodesk рекомендует начинать с .NET API и переходить на ObjectARX только в случаях, когда его возможностей недостаточно.
Источники
- ObjectARX Developer's Guide. Autodesk, Inc.
- AutoCAD ObjectARX SDK Documentation. Autodesk, Inc.
- Ч. Мак-Олифф. Программирование на ObjectARX. — М.: ДМК Пресс, 2005.
- Mastering AutoCAD ObjectARX. — Autodesk University Class Materials.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →