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 →