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

AcDbDatabase

AcDbDatabase — это основной класс объектной модели базы данных AutoCAD, представляющий собой контейнер верхнего уровня для всех графических и неграфических объектов чертежа (DWG-файла). Класс является частью библиотеки ObjectARX (AutoCAD Runtime Extension) и служит точкой входа для чтения, создания, модификации и сохранения данных чертежа. Каждый открытый в сеансе AutoCAD документ имеет связанный с ним объект AcDbDatabase, который управляет всеми сущностями, таблицами символов, словарями и другими элементами чертежа.

История и контекст создания

Класс AcDbDatabase был введён в архитектуру AutoCAD начиная с версии 13 (1994 год) вместе с переходом на объектно-ориентированную модель данных AcDb (AutoCAD Database). До этого чертёжные данные хранились в виде плоских структур с ограниченной возможностью программного расширения. Разработка AcDbDatabase стала частью стратегии Autodesk по созданию открытой платформы для разработчиков, позволяющей создавать собственные объекты (пользовательские классы, производные от AcDbObject) и управлять ими в единой среде. С тех пор класс остаётся ядром работы с чертежами в AutoCAD и всех продуктах на его основе (AutoCAD Architecture, Civil 3D, AutoCAD Mechanical и других).

Основные функции и роль

AcDbDatabase выполняет следующие ключевые задачи:

  • Хранение и управление объектами: содержит все графические примитивы (линии, дуги, полилинии, текст, размеры) и неграфические элементы (слои, типы линий, стили текста, блоки, словари).
  • Транзакционность: все операции чтения и записи объектов выполняются в контексте транзакций (класс AcDbTransaction), что обеспечивает целостность данных и возможность отката изменений.
  • Управление памятью: автоматически обрабатывает выделение и освобождение памяти для объектов чертежа, используя механизм подсчёта ссылок (smart pointers).
  • Поддержка протоколов ввода-вывода: обеспечивает чтение и запись DWG-файлов, а также экспорт в другие форматы (DXF, DWF).

Структура и составные части

База данных AcDbDatabase организована иерархически и включает несколько основных контейнеров:

Таблицы символов (Symbol Tables)

Каждая таблица хранит однотипные именованные объекты:

  • AcDbBlockTable — таблица блоков (пространство модели, листы, блоки-определения).
  • AcDbLayerTable — таблица слоёв.
  • AcDbLinetypeTable — таблица типов линий.
  • AcDbTextStyleTable — таблица текстовых стилей.
  • AcDbDimStyleTable — таблица размерных стилей.
  • AcDbUCSTable — таблица пользовательских систем координат.
  • AcDbRegAppTable — таблица зарегистрированных приложений.

Словари (Dictionaries)

Словари (класс AcDbDictionary) — это контейнеры для хранения произвольных именованных объектов. Используются для хранения:

  • настроек чертежа (например, словарь «ACAD_LAYOUT» для листов);
  • пользовательских данных;
  • расширенных данных XRecord.

Графические объекты (Entities)

Все видимые элементы чертежа (линии, окружности, текст, размеры, блоки-вхождения) наследуются от класса AcDbEntity и хранятся в пространстве модели или на листах (через блоки).

Неграфические объекты (Non-graphical objects)

Включают группы, словари, расширенные данные, а также объекты, создаваемые сторонними приложениями.

Классификация и варианты использования

AcDbDatabase может использоваться в нескольких режимах:

РежимОписаниеТипичное применение
Рабочий (host)База данных, связанная с открытым документом AutoCAD.Плагины, модифицирующие текущий чертёж.
Автономный (non-host)База данных, созданная в памяти без связи с документом.Пакетная обработка, конвертация, генерация чертежей без открытия AutoCAD.
Только чтениеОткрытие DWG-файла без возможности записи.Анализ, извлечение данных, отчёты.

Примеры программного использования

В среде ObjectARX (C++) работа с AcDbDatabase начинается с создания или открытия базы:

``cpp AcDbDatabase* pDb = new AcDbDatabase(); // создание пустой базы AcDbDatabase::readDwgFile(L"drawing.dwg", pDb); // чтение DWG-файла ``

Далее через объект базы данных осуществляется доступ к таблицам и сущностям:

``cpp AcDbBlockTable* pBlockTable = nullptr; pDb->getBlockTable(pBlockTable, AcDb::kForRead); ``

В .NET-среде (AutoCAD .NET API) используется класс Database (аналог AcDbDatabase):

``csharp Database db = HostApplicationServices.WorkingDatabase; using (Transaction tr = db.TransactionManager.StartTransaction()) { BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; // ... } ``

Особенности и ограничения

  • Производительность: при работе с большими чертежами (сотни тысяч объектов) требуется оптимизация — использование пакетных операций, отложенная загрузка (lazy loading), отключение регенерации экрана.
  • Совместимость: базы данных разных версий AutoCAD имеют разную внутреннюю структуру. При чтении старых DWG-файлов происходит автоматическая конвертация (миграция) в формат текущей версии.
  • Безопасность: при автономной работе (без документа) необходимо явно управлять жизненным циклом базы данных, чтобы избежать утечек памяти.
  • Многопоточность: AcDbDatabase не является потокобезопасным — все операции должны выполняться в главном потоке AutoCAD или с использованием механизмов синхронизации (например, DocumentLock).

Применение в сторонних разработках

Класс AcDbDatabase лежит в основе многих коммерческих и открытых решений для автоматизации проектирования:

  • Плагины для AutoCAD — создание, редактирование и анализ чертежей.
  • Конвертеры форматов — чтение DWG и запись в DXF, DWF, PDF, STEP, IFC.
  • Генераторы документации — автоматическое создание спецификаций, ведомостей, чертежей по данным из внешних систем (ERP, PLM).
  • Системы управления инженерными данными — извлечение метаданных из чертежей для интеграции с BIM-системами.

Интересные факты

  • AcDbDatabase поддерживает механизм «реакторов» (AcDbDatabaseReactor), позволяющий отслеживать события: открытие, закрытие, сохранение, изменение базы.
  • Внутреннее представление DWG-файла основано на двоичном формате, который не документирован публично. Autodesk предоставляет библиотеки ObjectARX и Teigha (сейчас ODA) для работы с ним.
  • Размер базы данных в памяти может значительно превышать размер DWG-файла на диске из-за хранения индексов, кэшей и служебных структур.

Критика и альтернативы

Основная критика AcDbDatabase связана с:

  • Закрытостью формата DWG — разработчики вынуждены использовать проприетарные библиотеки Autodesk или платные SDK (ODA).
  • Сложностью — для эффективной работы требуется глубокое знание объектной модели и механизма транзакций.
  • Производительностью — при работе с очень большими чертежами (свыше 1 млн объектов) возникают задержки.

Альтернативой для чтения DWG без AutoCAD являются библиотеки Open Design Alliance (ODA) — свободно распространяемый SDK, поддерживающий большинство версий DWG, и LibreDWG (GPL) — с ограниченной поддержкой.

Источники

  • Autodesk. ObjectARX Developer’s Guide. — Autodesk, 2023.
  • Autodesk. AutoCAD .NET Developer’s Guide. — Autodesk, 2023.
  • Open Design Alliance. Teigha for .NET Documentation. — ODA, 2024.
  • Chandler, D. Mastering AutoCAD ObjectARX. — Wiley, 2005.
  • Документация AutoCAD Developer Help (встроенная справка AutoCAD).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →