acutPrintf("Invalid input\n");
if (acedGetString(TRUE, "\nEnter hyperlink description: ", sDescription) != RTNORM)
acutPrintf("Invalid input\n");
// Add hyperlink or exit prompting.
if (strcmp(sName, "") || strcmp(sLocation, "") || strcmp(sDescription, ""))
pcHCL->addTail(sName, sDescription, sLocation);
else
break;
}
// Add these hyperlinks to the selected entity (opened above).
ACRX_X_CALL(pEnt, AcDbEntityHyperlinkPE)->
setHyperlinkCollection(pEnt, pcHCL);
// Delete the collection. The collection will delete all its
// contained hyperlink objects.
delete pcHCL;
// Close the object.
pEnt->close();
}
Глава 7.Контейнерные Объекты
Эта глава описывает контейнерные объекты, используемые в операциях базы данных AutoCAD: таблицы идентификаторов, словари, группы, и xrecords. Как часть любого рисунка, AutoCAD создает установленный набор таблиц идентификаторов и названного объектного словаря, который содержит два других словаря, MLINE стиль и словари ГРУПП.
Примеры главы демонстрируют, как добавить входы к таблицам идентификаторов, словарям, и группам, и как сделать запрос содержания этих контейнеров, использующих iterators.
Они также показывают, как создавать и использовать ваши собственные словари и xrecords, чтобы управлять данными прикладной программы и объектами. Для описания словаря расширения объекта AcDbObject, см. главу 5, “ Объекты Базы данных. ”
§ Сравнение Таблиц идентификаторов и Словарей
§ Таблицы идентификаторов (Symbol Tables)
§ Словари (Dictionaries)
§ Размещения (Layouts)
§ Xrecords
Сравнение Таблиц идентификаторов и Словарей
Таблицы идентификаторов и словари исполняют по существу ту же самую функцию; они содержат входы, которые являются базой данных, возражает, что можно искать, используя текстовую строковую клавишу{*ключ*}. Вы можете добавлять входы к этим контейнерным объектам, и Вы можете использовать iterator, чтобы шагнуть через входы и сделать запрос их содержания.
База данных AutoCAD всегда содержит установленный набор девяти таблиц идентификаторов, описанных в следующем разделе. Вы не можете создавать или удалять таблицу идентификаторов, но Вы можете добавлять или изменять{*заменять*} входы в таблице идентификаторов, которые вызваны{*названы*} записи. Каждая таблица идентификаторов содержит только специфический тип объекта.
Например, AcDbLayerTable содержит только объекты типа AcDbLayerTableRecord. Таблицы идентификаторов определены этим способом главным образом для совместимости с Выпуском AutoCAD 12 и предыдущих выпусков AutoCAD.
Словари обеспечивают подобный механизм для сохранения и восстановления{*поиска*} объектов со связанными клавишами{*ключами*} имени. База данных AutoCAD создает названный объектный словарь всякий раз, когда это создает новый рисунок. Названный объектный словарь может рассматриваться как главное “оглавление” для структур объекта небытия в рисунке. Этот словарь, по умолчанию, содержит четыре словаря: словарь ГРУППЫ, MLINE словарь стиля, словарь размещения, и графический стиль называет словарь. Вы можете создавать любое число дополнительных объектов и добавлять их к названному объектному словарю. Однако, лучшая практика должна добавить один объект непосредственно к названному объектному словарю и иметь тот объект, в свою очередь имеют другие объекты, связанные с вашим приложением. Как правило, объект обладания - контейнерный класс типа словаря. Используйте ваш назначенный Зарегистрированный Символ Разработчика с четырьмя символами для имени этого класса.
Объект AcDbDictionary может содержать любой тип AcDbObject, включая другие словари. Объект словаря не исполняет контроль соответствия типов входов. Однако, MLINE словарь стиля должен содержать только образцы класса AcDbMlineStyle, и словарь ГРУППЫ должен содержать только образцы AcDbGroup. Приложение может требовать определенного печатания для входов в словаре, который это создает и обслуживает{*поддерживает*}.
Иерархия классов для таблиц идентификаторов, записей таблицы идентификаторов, словарей, и iterators следующие.

Важное различие между таблицами идентификаторов и словарями - те записи таблицы идентификаторов, не может быть стерт непосредственно Приложением ObjectArx.
Эти записи могут быть стерты только с командой PURGE или выборочно фильтрован из с wblock операциями. Объекты, принадлежащие словарю могут быть стерты.
ПРЕДУПРЕЖДЕНИЕ! Стирание словарей или входов словаря (см. “ Обязательные Объекты Базы данных ” на странице 22) вероятно, заставит AutoCAD или другие приложения терпеть неудачу.
Другое важное различие - те записи таблицы идентификаторов, сохраняют их связанное имя поиска в поле на их определении класса. Словари, с другой стороны, сохраняют клавишу{*ключ*} имени как часть словаря, независимого от объекта, это связано с, как показано в ниже.
Symbol Table -------> Symbol table record <name> <other class-specific members>
Dictionary <name> -------> Object <class-specific fields>
Таблицы идентификаторов
Имена, используемые в записях таблицы идентификаторов и в словарях должны следовать за этими правилами:
§ Имена может быть любая длина в ObjectARX, но имена символа, введенные пользователями в AutoCAD ограничены 255 символами.
§ AutoCAD сохраняет регистр имен, но не использует регистр на сравнениях. Например, AutoCAD полагает ", что “этаж" будет тем же самым символом как “ЭТАЖ”.
§ Имена может быть составлен из всех символов, позволенных в именах файла Windows NT, кроме запятой (,), backquote (‘), точка с запятой (;), и знак "=" (=).
База данных AutoCAD содержит следующие таблицы идентификаторов (в круглых скобках - имя класса и команда AutoCAD, используемая для добавления входов):
§ N Таблица блоков (AcDbBlockTable; BLOCK)
§ N таблица Уровня (AcDbLayerTable; LAYER)
§ N Текстовая таблица стиля (AcDbTextStyleTable; STYLE)
§ N Linetype таблица (AcDbLinetypeTable; LTYPE)
§ N таблица Представления{*вида*} (AcDbViewTable; VIEW)
§ N таблица ВЕРХНИХ РЕГИСТРОВ (AcDbUCSTable; UCS)
§ N таблица Области просмотра (AcDbViewportTable; VPORT)
§ N таблица приложений Registered (AcDbRegAppTable)
§ N таблица стилей Измерения (AcDbDimStyleTable; DIMSTYLE)
Каждая таблица содержит объекты соответствующего подкласса AcDbSymbolTableRecord.
Каждый класс таблицы идентификаторов обеспечивает getAt () функцией для поиска записи, указанной по имени. Сигнатуры для перезагруженных форм getAt () функция следующие. (##BASE_NAME## Замещает любой из девяти типов класса таблицы идентификаторов.)
Acad::ErrorStatus
AcDb##BASE_NAME##Table::getAt(const char* pEntryName,
AcDb::OpenMode mode,
AcDb##BASE_NAME##TableRecord*&
pRecord,
Adesk::Boolean openErasedRecord =
Adesk::kFalse) const;
или
Acad::ErrorStatus
AcDb##BASE_NAME##Table::getAt(const char* pEntryName,
AcDbObjectId& recordId,
Adesk::Boolean getErasedRecord =
Adesk::kFalse) const;
Эта первая версия этой функции возвращает указатель на открытую запись в pRecord, если запись соответствия найдена, и операция открытия (с указанным режимом) преуспевает. Если openErasedRecord - kTrue, функция возвращает объект, даже если это было стерто. Если openErasedRecord - kFalse, функция возвращает указатель NULL и состояние ошибки eWasErased для стертых объектов.
Вторая версия getAt () функция возвращает AcDbObjectId записи, указанной по имени в значении recordId, если запись соответствия найдена.
Если getErasedRecord - kTrue, функция возвращает объект соответствия, даже если это было стерто. Объект не открыт.
Как только Вы получили запись и открыли это, Вы можете получить и устанавливать различные значения члена. Для определенного класса записи таблицы идентификаторов для законченного списка компонентных функций класса, см. ObjectARX Ссылку.
Другие важные функции, обеспеченные всеми классами таблицы идентификаторов -, has() и add() функции. См. пример в “ Создание и Изменение Записи Таблицы Уровня ” на странице 150.
Сигнатура для has()
Adesk::Boolean
AcDb##BASE_NAME##Table::has(const char* pName) const;
has() возвращает kTrue, если таблица содержит запись с именем, которое соответствует pName.
add() имеет следующие сигнатуры:
Acad::ErrorStatus
AcDb##BASE_NAME##Table::add(AcDb##BASE_NAME##TableRecord*
pRecord);
Acad::ErrorStatus
AcDb##BASE_NAME##Table::add(AcDbObjectId& recordId,
AcDb##BASE_NAME##TableRecord*
pRecord);
Эта функция добавляет запись, указанную pRecord, и к базе данных, содержащей таблицу и таблицу непосредственно. Если добавления преуспевают, и параметр pId - не-NULL, это установлено в AcDbObjectId записи в базе данных.
Таблица блоков
Примитивы в базе данных типично принадлежат записи таблицы блоков. Таблица блоков содержит три записи по умолчанию, *MODEL_SPACE, *PAPER_SPACE, и *PAPER_SPACE0, которые соответствуют трем начальным пространствам рисунка, которые могут быть отредактированы непосредственно пользователями AutoCAD. Для примеров добавления примитивов к записи таблицы блоков пространства модели, см. главу 2, “ Учебник для начинающих Базы данных, ” и глава 6, “примитивы”.
*PAPER_SPACE и записи *PAPER_SPACE0 соответствуют двум предопределенным размещениям пространства листа в AutoCAD. Вы можете добавлять, изменять, и удалять размещения пространства листа.
Новые записи таблицы блоков созданы, когда пользователь выпускает команду BLOCK или команду INSERT, чтобы вставить внешний рисунок. Новые записи таблицы блоков также созданы с acdbEntMake () функция. БЛОК? Списки команд содержание таблицы блоков, за исключением *MODEL_SPACE и записей *PAPER_SPACE. См. главу 6, “ примитивы, ” для примеров создания блок-ссылки и записи таблицы блоков. (Блочная ссылка - примитив, который обращается{*относится*} к данной записи таблицы блоков.)
Таблица Уровня
Таблица уровня содержит один уровень, уровень 0, по умолчанию. Пользователь добавляет уровни к этой таблице с командой LAYER.
|
Из за большого объема этот материал размещен на нескольких страницах:
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 |


