makeGroup(groupId);

removeAllButLines(groupId);

}

// Prompts the user to select objects to add to the group,

// opens the group identified by "groupId" passed in as

// an argument, then adds the selected objects to the group.

//

void

makeGroup(AcDbObjectId groupId)

{

ads_name sset;

int err = acedSSGet(NULL, NULL, NULL, NULL, sset);

if (err != RTNORM) {

return;

}

AcDbGroup *pGroup;

acdbOpenObject(pGroup, groupId, AcDb::kForWrite);

// Traverse the selection set, exchanging each ads_name

// for an object ID, then adding the object to the group.

//

long i, length;

ads_name ename;

AcDbObjectId entId;

acedSSLength(sset, &length);

for (i = 0; i < length; i++) {

acedSSName(sset, i, ename);

acdbGetObjectId(entId, ename);

pGroup->append(entId);

}

pGroup->close();

acedSSFree(sset);

}

// Accepts an object ID of an AcDbGroup object, opens it,

// then iterates over the group, removing all entities that

// are not AcDbLines and changing all remaining entities in

// the group to color red.

//

void

removeAllButLines(AcDbObjectId groupId)

{

AcDbGroup *pGroup;

acdbOpenObject(pGroup, groupId, AcDb::kForWrite);

AcDbGroupIterator *pIter = pGroup->newIterator();

AcDbObject *pObj;

for (; !pIter->done(); pIter->next()) {

pIter->getObject(pObj, AcDb::kForRead);

// If it is not a line or descended from a line,

// close it and remove it from the group. Otherwise,

// just close it.

//

if (!pObj->isKindOf(AcDbLine::desc())) {

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

// AcDbGroup::remove() requires that the object

// to be removed be closed, so close it now.

//

pObj->close();

pGroup->remove(pIter->objectId());

} else {

pObj->close();

}

}

delete pIter;

// Now change the color of all the entities in the group

// to red (AutoCAD color index number 1).

//

pGroup->setColorIndex(1);

pGroup->close();

}

MLINE Словарь Стиля

MLINE словарь стиля содержит объекты класса AcDbMlineStyle. Как показано в следующем рисунке, объекты класса AcDbMline каждый имеет связанный MLINE стиль, который определяет свойства мультилинии, типа смещения, цвета, и linetype.

Словарь Размещения

Словарь размещения - заданный по умолчанию словарь в пределах названного объектного словаря, который содержит объекты класса AcDbLayout. AcDbLayout объектно-ориентированные памяти характеристики размещения пространства листа, включая графические параметры настройки. Каждый объект AcDbLayout также содержит объект ID связанной записи таблицы блоков, которая сохраняет примитивы, связанные с размещением.

Создание Словаря

Следующий пример создает новый словарь (ASDK_DICT) и добавляет это к словари имен объектов. Тогда это создает два новых объекта класса пользователя AsdkMyClass (полученный из AcDbObject) и добавляет их к словарю, используя setAt () функция.

ОБРАТИТЕ ВНИМАНИЕ, что Вы должны закрыть объекты после добавления их с setAt () функция.

// This function creates two objects of class AsdkMyClass.

// It fills them in with the integers 1 and 2, and then adds

// them to the dictionary associated with the key ASDK_DICT. If this

// dictionary doesn’t exist, it is created and added to the named

// object dictionary.

//

void

createDictionary()

{

AcDbDictionary *pNamedobj;

acdbHostApplicationServices()->workingDatabase()->

getNamedObjectsDictionary(pNamedobj, AcDb::kForWrite);

// Check to see if the dictionary we want to create is

// already present. If not, create it and add

// it to the named object dictionary.

//

AcDbDictionary *pDict;

if (pNamedobj->getAt("ASDK_DICT", (AcDbObject*&) pDict,

AcDb::kForWrite) == Acad::eKeyNotFound)

{

pDict = new AcDbDictionary;

AcDbObjectId DictId;

pNamedobj->setAt("ASDK_DICT", pDict, DictId);

}

pNamedobj->close();

if (pDict) {

// Create new objects to add to the new dictionary,

// add them, then close them.

//

AsdkMyClass *pObj1 = new AsdkMyClass(1);

AsdkMyClass *pObj2 = new AsdkMyClass(2);

AcDbObjectId rId1, rId2;

pDict->setAt("OBJ1", pObj1, rId1);

pDict->setAt("OBJ2", pObj2, rId2);

pObj1->close();

pObj2->close();

pDict->close();

}

}

Выполнение итераций по Входам Словаря

Iterator класс для словарей - AcDbDictionaryIterator. Следующая выборка кода получает словарь (ASDK_DICT) от названного объектного словаря.

Это тогда использует словарь iterator, чтобы шагнуть через входы словаря и печатать значение сохраненного целого числа. Наконец, это удаляет iterator и закрывает словарь.

void

iterateDictionary()

{

AcDbDictionary *pNamedobj;

acdbHostApplicationServices()->workingDatabase()

->getNamedObjectsDictionary(pNamedobj, AcDb::kForRead);

// Get a pointer to the ASDK_DICT dictionary.

//

AcDbDictionary *pDict;

pNamedobj->getAt("ASDK_DICT", (AcDbObject*&)pDict,

AcDb::kForRead);

pNamedobj->close();

// Get an iterator for the ASDK_DICT dictionary.

//

AcDbDictionaryIterator* pDictIter = pDict->newIterator();

AsdkMyClass *pMyCl;

Adesk::Int16 val;

for (; !pDictIter->done(); pDictIter->next()) {

// Get the current record, open it for read, and

// print its data.

//

pDictIter->getObject((AcDbObject*&)pMyCl,

AcDb::kForRead);

pMyCl->getData(val);

pMyCl->close();

acutPrintf("\nintval is: %d", val);

}

delete pDictIter;

pDict->close();

}

Размещения

AutoCAD первоначально содержит три размещения: размещение пространства модели и два размещения пространства листа. К этим размещениям можно обращаться позициями табуляции внизу окна рисунка в AutoCAD. Позиции табуляции первоначально названы Моделью, Layout1, и Layout2.

Позиция табуляции Model - заданная по умолчанию позиция табуляции и представляет пространство модели, в котором Вы вообще создаете ваш рисунок. Позиции табуляции Layout1 и Layout2 представляют пространство листа и вообще используются для размещения вашего рисунка для печати. Размещения пространства листа отображают бумажное изображение{*образ*}, которое показывает печатаемой границе для конфигурированного устройства печати.

Рекомендуется, чтобы Вы использовали размещения пространства листа для подготовки конечных{*заключительных*} рисунков для вывода, но печать может быть выполнена от любого размещения, включая размещение пространства модели. Для получения дополнительной информации при использовании размещений в AutoCAD, см. Руководство программиста AutoCAD.

ObjectARX Классы Размещения

Основные классы, вовлеченные в создание и управление размещениями - следующее:

    AcDbLayout AcDbPlotSettings AcDbPlotSettingsValidator AcDbLayoutManager AcApLayoutManager AcDbLayoutManagerReactor

AcDbLayout, AcDbPlotSettings, и AcDbPlotSettingsValidator используются, чтобы создавать и установить атрибуты на объектах размещения. AcDbLayoutManager, AcApLayoutManager, и AcDbLayoutManagerReactor используются, чтобы управлять объектами размещения и исполнять другие связанные размещением задачи. Следующие разделы обеспечивают краткий обзор некоторых из этих классов. Для получения дополнительной информации, см. ObjectARX Ссылку. Для примера использования ObjectARX классов размещения, см., что lmgrtest. arx производит выборку приложения в ObjectARX, производит выборку каталога.

Объекты Размещения

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

AcDbLayout объекты сохранены в ACAD_LAYOUT словаре в пределах словари имен объектов базы данных. Имеется один объект AcDbLayout в размещение пространства листа, также как сингл AcDbLayout для пространства модели. Каждый объект AcDbLayout содержит объект ID его связанного AcDbBlockTableRecord. Это заставит это облегчить, чтобы найти запись таблицы блоков, в которой фактическая геометрия размещения постоянно находится. Если AcDbBlockTableRecord представляет размещение, то это содержит объект ID его связанного объекта AcDbLayout.

Большинство графической информации для объектов размещения сохранено в AcDbPlotSettings, базовый класс AcDbLayout. Вы можете создавать названные графические параметры настройки и использовать их, чтобы инициализировать другие объекты AcDbLayout. Это позволяет Вам экспортировать и импортировать графические параметры настройки от одного размещения до другого. Эти названные графические параметры настройки сохранены в образцах AcDbPlotSettings класса. Имеется один объект AcDbPlotSettings для каждой названной установки графика, и они сохранены в ACAD_PLOTSETTINGS словаре в пределах словари имен объектов.

ОБРАТИТЕ ВНИМАНИЕ, что не имеется никакого прямого подключения{*связи*} между объектами AcDbLayout в ACAD_LAYOUT словаре и объектах AcDbPlotSettings в ACAD_PLOTSETTINGS словаре.

Менеджер Размещения

Вы можете управлять объектами AcDbLayout, используя AcApLayoutManager класс.

AcApLayoutManager класс позволяет Вам

§  Создают размещения

§  Удаляют размещения

§  Переименовывают размещения

§  Копия и размещения аналога

§  Набор текущее размещение

§  Находят специфическое размещение

§  Набор графические характеристики размещения

Имеется один образец менеджера размещения в приложение. Менеджер размещения всегда работает на текущем размещении.

Xrecords

Xrecords дают возможность Вам добавить произвольные, специфические для приложения данные. Поскольку они - альтернатива к определению вашего собственного объектного класса, они особенно полезны для программистов AutoLISP. Xrecord - образец класса AcDbxrecord, который является подклассом AcDbObject. Xrecord государство{*состояние*} определен как содержание resbuf цепочки, которая является списком групп данных, каждая из которых в свою очередь содержит код группы DXF плюс связанные данные. Значение кода группы определяет связанный тип данных. Коды Группы для xrecords находятся в диапазоне от 1 до 369. Следующий раздел описывает доступную группу DXF коды.

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