Свойства Уровня

AcDbLayerTableRecord класс содержит функции члена для определения множества свойств уровня, которые затрагивают дисплей их связанных примитивов.

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

Следующие разделы перечисляют функции члена для установки и запроса свойств уровня.

Frozen/Thawed (Заморозить / таять)

Когда уровень закрепляется, графика не восстановлена.

void AcDbLayerTableRecord::setIsFrozen(Adesk::Boolean);

Adesk::Boolean

AcDbLayerTableRecord::isFrozen() const;

On/Off (Вкл\выкл)

Когда уровень ВЫКЛЮЧЕН, графический не отображены.

void AcDbLayerTableRecord::setIsOff(Adesk::Boolean);

Adesk::Boolean

AcDbLayerTableRecord::isOff() const;

Viewport (Область просмотра)

Этот setVPDFLT () функция определяет, является ли уровень по умолчанию видимым или невидимым в новых областях просмотра.

void AcDbLayerTableRecord::setVPDFLT(Adesk::Boolean);

Adesk::Boolean

AcDbLayerTableRecord::VPDFLT() const;

Locked/Unlocked (Блокировал / разблокировал)

Примитивы на блокированном уровне не могут изменяться пользователем AutoCAD или открыт для записи () функция в пределах программы.

void AcDbLayerTableRecord::setIsLocked(Adesk::Boolean);

Adesk::Boolean

AcDbLayerTableRecord::isLocked() const;

Color (Цвет)

Цвет, установленный setColor () функция используется, когда цвет примитива - BYLAYER.

void AcDbLayerTableRecord::setColor(const AcCmColor &color);

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

AcCmColor

AcDbLayerTableRecord::color() const;

Linetype

Linetype, установленный setLinetypeObjectId () функция используется, когда linetype примитива - BYLAYER.

void AcDbLayerTableRecord::setLinetypeObjectId(AcDbObjectId);

AcDbObjectId

AcDbLayerTableRecord::linetypeObjectId() const;

Создание и Изменение Записи Таблицы Уровня

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

Чтобы устанавливать linetype для уровня, этот пример открывает linetype таблицу для чтения и получает объект ID записи linetype желательный linetype (здесь, “DASHED” - “ПОДЧЕРКНУТЫЙ ШТРИХОВОЙ ЛИНИЕЙ”). Как только это имеет объект ID для linetype, это закрывает linetype таблицу и устанавливает linetype для новой записи таблицы уровня. Этот пример использует добавляющийся () функцию, чтобы добавить запись таблицы уровня на таблицу уровня. Наконец, это закрывает запись таблицы уровня и таблицу уровня непосредственно.

void

addLayer()

{

AcDbLayerTable *pLayerTbl;

acdbHostApplicationServices()->workingDatabase()

->getSymbolTable(pLayerTbl, AcDb::kForWrite);

if (!pLayerTbl->has("ASDK_TESTLAYER")) {

AcDbLayerTableRecord *pLayerTblRcd

= new AcDbLayerTableRecord;

pLayerTblRcd->setName("ASDK_TESTLAYER");

pLayerTblRcd->setIsFrozen(0);// layer to THAWED

pLayerTblRcd->setIsOff(0); // layer to ON

pLayerTblRcd->setVPDFLT(0); // viewport default

pLayerTblRcd->setIsLocked(0);// un-locked

AcCmColor color;

color. setColorIndex(1); // set color to red

pLayerTblRcd->setColor(color);

// For linetype, we need to provide the object ID of

// the linetype record for the linetype we want to

// use. First, we need to get the object ID.

//

AcDbLinetypeTable *pLinetypeTbl;

AcDbObjectId ltId;

acdbHostApplicationServices()->workingDatabase()

->getSymbolTable(pLinetypeTbl, AcDb::kForRead);

if ((pLinetypeTbl->getAt("DASHED", ltId))

!= Acad::eOk)

{

acutPrintf("\nUnable to find DASHED"

" linetype. Using CONTINUOUS");

// CONTINUOUS is in every drawing, so use it.

//

pLinetypeTbl->getAt("CONTINUOUS", ltId);

}

pLinetypeTbl->close();

pLayerTblRcd->setLinetypeObjectId(ltId);

pLayerTbl->add(pLayerTblRcd);

pLayerTblRcd->close();

pLayerTbl->close();

} else {

pLayerTbl->close();

acutPrintf("\nlayer already exists");

}

}

Iterators

Каждая таблица идентификаторов имеет передачу iterator, что Вы можете создавать с

AcDb##BASE_NAME##Table::newIterator () функция.

Acad::ErrorStatus

AcDb##BASE_NAME##Table::newIterator(

AcDb##BASE_NAME##TableIterator*& pIterator,

Adesk::Boolean atBeginning = Adesk::kTrue,

Adesk::Boolean skipErased = Adesk::kTrue) const;

NewIterator () функция создает объект, который может использоваться, чтобы шагнуть через содержание таблицы и заставляет pIterator указывать на iterator объект. Если atBeginning - kTrue, запуски iterator в начале таблицы; если kFalse, это начинается в конце таблицы. Если skipErased параметр - kTrue, iterator позиционирован первоначально в первый (или последний{*прошлый*}) нестертая запись; если kFalse, это позиционировано в первый (или последний{*прошлый*}) запись, независимо от того, было ли это стерто. Для описания функций, доступных для каждого iterator класса, см. ObjectARX Ссылку.

Когда Вы создаете новый iterator, Вы также ответствены за удаление этого. Таблица идентификаторов не должна быть закрыта, пока все iterators, который это создало, не были удалены.

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

Выполнение итераций по Таблицам

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

void

iterateLinetypes()

{

AcDbLinetypeTable *pLinetypeTbl;

acdbHostApplicationServices()->workingDatabase()

->getSymbolTable(pLinetypeTbl, AcDb::kForRead);

// Create a new iterator that starts at table

// beginning and skips deleted.

//

AcDbLinetypeTableIterator *pLtIterator;

pLinetypeTbl->newIterator(pLtIterator);

// Walk the table, getting every table record and

// printing the linetype name.

//

AcDbLinetypeTableRecord *pLtTableRcd;

char *pLtName;

for (; !pLtIterator->done(); pLtIterator->step()) {

pLtIterator->getRecord(pLtTableRcd, AcDb::kForRead);

pLtTableRcd->getName(pLtName);

pLtTableRcd->close();

acutPrintf("\nLinetype name is: %s", pLtName);

free(pLtName);

}

delete pLtIterator;

pLinetypeTbl->close();

}

Словари

Чтобы создавать новый словарь, Вы должны создать образец AcDbDictionary, добавлять это к базе данных, и регистрировать это с ее объектом владельца. Используйте setAt () функция AcDbDictionary, чтобы добавить объекты к словарю и базе данных.

Сигнатура этой функции

Acad::ErrorStatus

AcDbDictionary::setAt(const char* pSrchKey,

AcDbObject* pNewValue,

AcDbObjectId& retObjId);

SetAt () функция добавляет новый вход, указанный newValue к словарю. Если вход уже существует, это заменено новым значением. Имя объекта определено srchKey. Объект ID входа возвращен в retObjId.

Когда Вы добавляете вход в словарь, словарь автоматически присоединяет{*придает*} реактор к входу. Если объект стерт, словарь уведомлен и удаляет это из словаря.

Группы и Словарь Группы

Группа - контейнерный объект, который обслуживает{*поддерживает*} упорядоченную{*заказанную*} коллекцию примитивов базы данных. О группах можно думать как названный постоянными наборами выбора. Они не имеют связи{*ссылки*} монопольных использований к примитивам, которые они содержат.

Когда примитив стерт, это автоматически удалено из групп, которые содержат это. Если примитив нестерт, это автоматически повторно вставлено в группу.

Используйте AcDbGroup:: newIterator () функция, чтобы получить iterator и шаг через примитивы в группе. AcDbGroup класс также обеспечивает функции для добавления в конец и prepending примитивов к группе, вставка примитивов по специфическому индексу в группе, удаление примитивов, и передачи примитивов от одной позиции в группе к другому. См. AcDbGroup в ObjectARX Ссылке.

Вы можете также назначать свойства на всех членов группы, использующей setColor (), setLayer (), setLinetype (), setVisibility (), и setHighlight () функции AcDbGroup класса. Эти операции имеют тот же самый эффект как открытие каждого примитива в группе и установке ее свойства непосредственно.

Группы должны всегда сохраняться в словаре ГРУППЫ, который может быть получен следующим образом:

AcDbDictionary* pGrpDict =

acdbHostApplicationServices()->working Database()->

getGroupDictionary(pGroupDict, AcDb::kForWrite);

Альтернативный способ получить словарь ГРУППЫ состоит в том, чтобы искать “ACAD_GROUP” в словаре имен объектов.

Следующие функции - часть приложения, что первые подсказки пользователь, чтобы выбрать некоторые примитивы, которые помещены в группу по имени “ASDK_GROUPTEST”. Тогда это вызывает функцию removeAllButLines () чтобы выполнить итерации по группе и удалять все примитивы, которые - не линии. Наконец, это изменяет{*заменяет*} остающиеся примитивы в группе к красному.

void

groups()

{

AcDbGroup *pGroup = new AcDbGroup("grouptest");

AcDbDictionary *pGroupDict;

acdbHostApplicationServices()->workingDatabase()

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

AcDbObjectId groupId;

pGroupDict->setAt("ASDK_GROUPTEST", pGroup, groupId);

pGroupDict->close();

pGroup->close();

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