new AcDbLayerTableRecord;

pLayerTableRecord->setName("ASDK_MYLAYER");

// Defaults are used for other properties of

// the layer if they are not otherwise specified.

//

pLayerTable->add(pLayerTableRecord);

pLayerTable->close();

pLayerTableRecord->close();

}

Открытие и Закрытие объекта ObjectARX

Все примеры кода, показанные в этой главе иллюстрируют протокол для открытия и закрытия объектов, который вы будете должны соблюсти всякий раз, когда Вы работаете с объектами резидента-базы. Этот протокол гарантирует, что объекты - физически в памяти, когда к ним должны обращаться. Прежде, чем Вы можете изменять объект, Вы должны открыть его:

acdbOpenObject(pObject, objId, AcDb::kForWrite);

Открытые функции имеют параметр режима, который определяет, открываете ли Вы объект для чтения, записи или уведомления. В то время как объект открыт для записи, Вы можете изменять его. Когда Вы закончите, Вы должны явно закрыть объект как показано в следующем примере, независимо от режима, в котором это было открыто:

pObject->close();

Следующее - типовой код для изменения цвета объекта:

Acad::ErrorStatus

changeColor(AcDbObjectId entId, Adesk::UInt16 newColor)

{

AcDbEntity *pEntity;

acdbOpenObject(pEntity, entId, AcDb::kForWrite);

pEntity->setColorIndex(newColor);

pEntity->close();

return Acad::eOk;

}

ПРЕДУПРЕЖДЕНИЕ! Непосредственно удаление объекта, который был добавлен к базе, заставляет AutoCAD грохаться.

Добавление Группы к Словарю Группы

Cледующий код создает группу (pGroup) из линии и круга, созданного в createLine () и createCircle (), и помещает группу в словарь GROUP. Объект IDs линии и круга пропускают в функцию. Обратите внимание, как словарь GROUP открыт для записи, изменяется, и затем явно закрыт.

НЕ нашли? Не то? Что вы ищете?

void

createGroup(AcDbObjectIdArray& objIds, char* pGroupName)

{

AcDbGroup *pGroup = new AcDbGroup(pGroupName);

for (int i = 0; i < objIds. length(); i++) {

pGroup->append(objIds[i]);

}

// Put the group in the group dictionary that resides

// in the named object dictionary.

//

AcDbDictionary *pGroupDict;

acdbHostApplicationServices()->workingDatabase()

->getGroupDictionary(pGroupDict, AcDb::kForWrite);

AcDbObjectId pGroupId;

pGroupDict->setAt(pGroupName, pGroup, pGroupId);

pGroupDict->close();

pGroup->close();

}

Глава 3. Прикладные Основы ObjectARX

Эта глава описывает, как записывать и выполнить приложение ObjectARX. Это перечисляет сообщения, которые пропускает в соответствии с AutoCAD к приложению ObjectARX и показывает, как приложение типично отвечает на те сообщения. Эта глава также обсуждает регистрацию новых команд, как загружать и разгружать приложение по запросу AutoCAD, особенности загрузки и обработку ошибок.

·  Создание приложения ObjectARX

·  Пример приложения

·  Регистрация новых команд

·  Загрузка приложения ObjectARX

·  Разгрузка приложения ObjectARX

·  Запрос на загрузку

·  ARX Command

·  Выполнение приложения ObjectARX

Создание приложения ObjectARX

Приложение ObjectARX - DLL, который совместно использует адресное пространство AutoCAD и делает прямые функциональные запросы к AutoCAD. ObjectARX приложения типично осуществляют команды, к которым можно обращаться изнутри AutoCAD.

Эти команды часто осуществляются, используя заказные классы. Создание приложения ObjectARX подразумевает следующие общие шаги.

1.  Создайте заказные классы, чтобы осуществить новые команды.

Вы можете получать заказные классы из большинства таблиц идентификаторов иерархии классов ObjectARX.

2.  Определите, которые сообщения AutoCAD ваше приложение ObjectARX обработает. AutoCAD посылает разнообразие сообщений к приложениям ObjectARX, указывая, что специфические события произошли в пределах AutoCAD. Вы решаете, которым сообщениям ваше приложение ответит и которые действия будут вызваны.

3.  Осуществьте точку входа для AutoCAD.

AutoCAD звонит в приложение ObjectARX через AcrxEntryPoint(), которая заменяет функцию main() программы C++. Вы ответственны за осуществление acrxEntryPoint() в вашем приложении. AcrxEntryPoint() вызывает функции, которые вы связали с определенными сообщениями AutoCAD.

4.  Инициализация реализации.

В пределах вашего приложения ObjectARX, Вы будете должны инициализировать любые заказные классы, что Вы создали, и восстанавливаете ObjectARX дерево классов во время выполнения. Дополнительно, если Вы прибавляете команды, Вы должны регистрировать их в AutoCAD.

5.  Готовьтесь к разгрузке.

Чтобы создавать хорошее приложение ObjectARX, Вы должны удалить любые заказные классы и команды, когда ваше приложение разгружено.

Следующие разделы обсуждают общие шаги разработки приложения ObjectARX более подробно.

ОБРАТИТЕ ВНИМАНИЕ, что ObjectARX Мастер доступен для создания ObjectARX проекты. См. objectarx\utils каталог в ObjectARX SDK.

Создание Заказных Классов

Вы можете получать заказные классы из большинства ObjectARX иерархии классов.

Это позволяет Вам усиливать функциональные возможности классов ObjectARX при создании ваших собственных объектов. Определение заказных классов обсуждено подробно в гл. 11, "Получении Заказного ObjectARX Класса".

Ответ на Сообщения AutoCAD

Имеются четыре категории сообщений, что AutoCAD посылает приложениям ObjectARX:

·  Сообщения, которые посланы всем приложениям

·  Сообщения, которые посланы только если приложение имеет зарегистрированную Alisp-функцию с acedDefun()

·  Сообщения, которые посланы приложениям, которые зарегистрированы как сервисы ObjectARX

·  Сообщения, отвечающие приложениям, которые используют ActiveX Автоматизацию

Следующие пять таблиц описывают сообщения, что AutoCAD посылает toObjectARX приложению. Первая таблица перечисляет сообщения, посланные всем приложениям.

Сообщения, посланные всем приложениям Message

Сообщение

Описание

KInitAppMsg

Посланный, когда приложение ObjectARX загружено, чтобы открыть связь между AutoCAD и приложением.

KUnloadAppMsg

Посланный, когда приложение ObjectARX разгруженно (или когда пользователь разгружает приложение или когда сам AutoCAD закончен). Закрывает файлы и исполняет операции очистки.

KLoadDwgMsg

Посланным однажды, когда рисунок открыт. Тогда, если приложение регистрируется, любые функции с Автошепелявят, AutoCAD посылает это сообщение однажды за каждый рисунок, загруженный в редактора. Редактор AutoCAD полностью инициализирован в этом точке, и все глобальные функции доступны. Однако, Вы не можете использовать acedCommand () функция от kLoadDwgMsg

KPreQuitMsgSent,

когда AutoCAD выходит, но прежде, чем это начинает разгружать все приложения ObjectARX..

Следующая таблица перечисляет сообщения, что AutoCAD посылает приложениям, которые имеют буферизованный функцию AutoLISP с acedDefun ():

Сообщение

Описание

kUnloadDwgMsg

Посланный, когда пользователь выходит из сеанса рисунка.

kInvkSubrMsg

Посланным, чтобы вызвать функции буферизованное использование acedDefun ().

kEendMsg

Посланным только, когда команда END введена и имеются изменения(замены), которые должны быть сохранены (когда dbmod! = 0). KEndMsg не послан для НОВОГО или ОТКРЫТОГО, вместо этого, kSaveMsg и kLoadDwgMsg посланы. В течение КОНЦА, если dbmod = 0, то kQuitMsg послан вместо kEndMsg.

kQuitMsg

когда выход из AutoCAD (заканчивается без того, чтобы сохранить рисунок потому что QUIT команда была введена. KQuitMsg может также быть получен с командой END, как отмечено выше.

Если команда END послана и dbmod = 0, то kQuitMsg послан.

kSaveMsg

когда AutoCAD сохраняет рисунок потому что SAVE

SAVEAS, NEW или команда OPEN введены.

kCcfgMsgSent

когда AutoCAD возвращается от программы конфигурации, и используемый только для изменения драйвера дисплея.

Следующая таблица перечисляет сообщения, что приложение получает, если это имеет зарегистрированный сервис с ObjectARX.

Сообщение

Описание

KDependencyMsg

когда приложение ObjectARX имеет буферизованный объект AcRxService и индекс зависимости на тех сервисных изменениях от 0 до 1.

KNoDependencyMsgSent

когда приложение ObjectARX имеет буферизованный объект AcRxService и индекс зависимости на тех сервисных изменениях от 1 до 0.

Следующая таблица перечисляет сообщения, что приложение должно ответить к тому, если это использует ActiveX Автоматизацию. См. главу 23, “ ОБЩАЯ ОБЪЕКТНАЯ МОДЕЛЬ, ActiveX Автоматизация, и Объектный Менеджер Свойства. ”

Сообщение

Описание

kOleUnloadAppMsg

Посылается, чтобы определить, может ли приложение быть выгружено (то есть ни один из его объектов ActiveX или интерфейсов не упомянут другими приложениями).

См. rxdefs. h файл, где эти константы перечисления определены в соответствии с объявлением типа AppMsgCode. Вы будете должны решить, на которые сообщения ваше приложение ObjectARX ответит.

Следующая таблица описывает рекомендуемые действия после получения данного сообщения. ObjectARX прикладные реакции на сообщения AutoCAD

Из за большого объема этот материал размещен на нескольких страницах:
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