· Краткий обзор базы данных AutoCAD
· Основная база данных
· Создание объекта в AutoCAD
· Создание объекта в ObjectARX
Краткий обзор Базы данных AutoCAD
Рисунок AutoCAD - коллекция объектов, сохраненных в базе данных. Некоторые из основных объектов базы данных - объекты, таблицы идентификаторов, и словари. Объекты - специальный вид базы данных, имеют графическое представление в пределах рисунка AutoCAD. Строки, круги, дуги, текст, solids, области(регионы), сплайны, и эллипсы - примеры объектов. Пользователь может видеть объект на экране и может управлять им.
Таблицы идентификаторов и словари - контейнеры, имел обыкновение сохранять объекты базы данных. Оба контейнерных объекта отображают строку имени к объекту базы данных. База данных AutoCAD включает фиксированный набор таблиц идентификаторов, каждая из которых содержит образцы специфического класса отчета таблицы идентификаторов. Вы не можете прибавлять новую таблицу идентификаторов к базе данных. Примеры таблиц идентификаторов - таблица уровня (AcDbLayerTable), который содержит отчеты таблицы уровня, и блочную таблицу (AcDbBlockTable), который содержит блочные отчеты таблицы. Все объекты AutoCAD принадлежат блочным отчетам таблицы.
Словари обеспечивают более универсальный контейнер для сохранения объектов, чем таблицы идентификаторов. Словарь может содержать любой объект типа AcDbObject или подкласса этого. База данных AutoCAD создает словарь называемый названным объектным словарем, когда это создает новый рисунок. Названный объектный словарь может просматриваться как главное “оглавление” для всех словарей, связанных с базой данных. Вы можете создавать новые словари в пределах названного объектного словаря и прибавлять новая база данных. Следующий рисунок показывает ключевые компоненты базы данных AutoCAD.

В течение сеанса редактирования Вы можете получить базу данных для текущего рисунка, вызывая следующую глобальную функцию:
acdbHostApplicationServices()->workingDatabase()
Количество баз данных.
Множество баз данных могут быть загружены в одном сеансе AutoCAD. Каждый объект в сеансе имеет метку и ID. Метка уникально идентифицирует объект в пределах специфической базы данных. ID уникально идентифицирует объект во всех базах данных, загруженных в одно время. ID сохраняется только в течение сеанса редактирования, но метка сохраняется с рисунком. В отличие от ID объекта, метка может быть неуникальна, когда множество баз данных загружены в сеансе AutoCAD.
Получение ID объекта
Через ID Вы можете получить указатель на фактический объект базы данных для обеспечения исполнения операций с ним. Для примера, см. “Открытие и Закрытие ObjectARX Объекты” на странице 27.
Вы можете получить ID объекта несколькими способами:
· Создание объекта и добавление его в конец базы данных. База данных тогда дает объекту ID и возвращает его Вам.
· Используют протокол базы данных для получения ID объектов, которые созданы автоматически, когда база данных создана (типа фиксированного набора таблиц идентификаторов и названного объектного словаря).
· Используют класс - определенный протокол для получения объекта IDs. Некоторые классы, типа таблиц идентификаторов и словарей, определяют объекты, которые имеют другие объекты. Эти классы обеспечивают протокол для получения объекта IDs находящихся в собственности объектов.
· Используют iterator, чтобы шагнуть через список или устанавить объект. AcDb библиотека обеспечивает множество iterators, которые могут использоваться, чтобы шагнуть через различные виды контейнерных объектов (AcDbDictionaryIterator, AcDbObjectIterator).
· Сделать запрос набору выборов. После того, как пользователь выбрал объект, Вы можете спрашивать, чтобы набор выборов для списка имен объекта выбранных объектов, и от имен, преобразовал к объекту IDs. Для получения дополнительной информации на selectionsets, см. главу 6, “Объекты”.
Обязательные объекты Базы данных
Поскольку объекты созданы в AutoCAD, они добавлены к соответствующему контейнерному объекту в его базе данных. Объекты добавлены к записям в блочной таблице. Записи Таблицы идентификаторов добавлены к соответствующим таблицам идентификаторов. Все другие объекты добавлены к словарю имен объектов или к объектам, которые принадлежат другим объектам (и, в конечном счете, тем же словарям), или к словарю расширения. Сценарий в следующем разделе – “Создании Объектов в AutoCAD, ” детализирует этот процесс. Словари Расширений обсуждены в разделе “Словарь Расширения” на странице 89.
Чтобы быть пригодной для использования, база данных должна иметь по крайней мере следующий набор объектов:
· набор девяти таблиц идентификаторов, который включает блочную таблицу, таблицу уровня, и linetype таблицу. Блочная таблица первоначально содержит три записи: *MODEL_SPACE, и два пространства листа, называемые *PAPER_SPACE и *PAPER_SPACE0. Эти блочные записи таблицы представляют модельное пространство и два предопределенных бумажных пространственных размещения. Таблица уровня первоначально содержит одну запись - уровень 0. Linetype таблица первоначально содержит тип линии CONTINUES.
· объектный словарь имен. Когда база данных создана, этот словарь уже содержит четыре словаря баз данных: словарь GROUP, MLINE, LAYER, и PLOT. В пределах словаря стиля MLINE, стиль STANDART - всегда существует.
Эти объекты могут быть автоматически созданы в новой базе данных при параметре kTrue в конструкторе buildDefaultDrawing. Принятие KFalse создает пустую базу данных, в которую DWG или DXF ™ файл может быть загружен.
Создание объектов в AutoCAD
Этот раздел описывает создание строки, круга, уровня, и группы в AutoCAD и показывает, как AutoCAD прибавляет эти объекты к базе данных. Сначала, предположите, что пользователь создает строку в модельном пространстве command: line 4,2 10,7
В базе данных, AutoCAD создает образец класса AcDbLine и затем сохраняет это в модельном пространственном блочном отчете таблицы как показано:

Когда Вы сначала вызываете AutoCAD, и база данных находится в ее заданном по умолчанию состоянии, объекты добавлены в пространство модели, основное пространство в AutoCAD, который используется для модельной геометрии и графики. Бумажное пространство предназначено, чтобы поддержать “документационную” геометрию и графику, типа основ пленки для изготовления топологических чертежей, блоков заголовка, и annotational текста. Команды создания объекта в AutoCAD (LINE, в этом случае) заставляют объект быть добавленными к текущей базе данных также как к блоку пространства модели. Вы можете спрашивать любой объект, принадлежащий базе данных.
Затем, предположите, что пользователь создает круг командой:
circle 9,3 2
Снова, AutoCAD создает образец соответствующего объекта — здесь, AcDbCircle — и прибавляет это к пространству модели.

Затем, пользователь создает уровень:
layer_make mylayer
AutoCAD создает новую запись таблицы уровня и затем прибавляет его в таблицу уровней.

Наконец, группируем все объекты вместе:
group 3,2 9,3
AutoCAD создает новую группу и прибавляет ее к словарю GROUP, который содержится в объектном словаре имен. Новая группа содержит список ID объектов, которые составляют группу.

Создании объектов в ObjectARX
Пример ObjectARX кода в этом разделе создает те же самые объекты как в предыдущем разделе (линия и круг). Показывается код для создания нового уровня, изменение цвета линии, и добавления группы к словарю GROUP.
Создание примитивов
Следующий код ObjectARX создает линию и прибавляет это к таблице блоков пространства модели:
AcDbObjectId
createLine()
{
AcGePoint3d startPt(4.0, 2.0, 0.0);
AcGePoint3d endPt(10.0, 7.0, 0.0);
AcDbLine *pLine = new AcDbLine(startPt, endPt);
AcDbBlockTable *pBlockTable;
acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pBlockTable, AcDb::kForRead);
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
AcDb::kForWrite);
pBlockTable->close();
AcDbObjectId lineId;
pBlockTableRecord->appendAcDbEntity(lineId, pLine);
pBlockTableRecord->close();
pLine->close();
return lineId;
}
CreateLine() получает блочную таблицу для текущего рисунка.
Тогда это открывает в модельном пространстве запись блочной таблицы. После закрытия блочной таблицы, это прибавляет объект к блочной таблице и затем закрывает таблицу и объект.
ОБРАТИТЕ ВНИМАНИЕ, когда Вы используете любые объекты ObjectARX, Вы должны их как можно скорее закрыть.
createCircle () создает круг и прибавляет это к блочной таблице пространства модели:
AcDbObjectId createCircle()
{
AcGePoint3d center(9.0, 3.0, 0.0);
AcGeVector3d normal(0.0, 0.0, 1.0);
AcDbCircle *pCirc = new AcDbCircle(center, normal, 2.0);
AcDbBlockTable *pBlockTable;
acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pBlockTable, AcDb::kForRead);
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
AcDb::kForWrite);
pBlockTable->close();
AcDbObjectId circleId;
pBlockTableRecord->appendAcDbEntity(circleId, pCirc);
pBlockTableRecord->close();
pCirc->close();
return circleId;
}
Создание Нового Уровня
Следующий код получает таблицу идентификаторов уровня от базы данных, создает новую запись таблицы уровня ASDK_MYLAYER.
void
createNewLayer()
{
AcDbLayerTable *pLayerTable;
acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pLayerTable, AcDb::kForWrite);
AcDbLayerTableRecord *pLayerTableRecord =
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |


