Открыть сервисСервис

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 только в случаях, когда его возможностей недостаточно.

Источники

  1. ObjectARX Developer's Guide. Autodesk, Inc.
  2. AutoCAD ObjectARX SDK Documentation. Autodesk, Inc.
  3. Ч. Мак-Олифф. Программирование на ObjectARX. — М.: ДМК Пресс, 2005.
  4. Mastering AutoCAD ObjectARX. — Autodesk University Class Materials.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru