ObjectARX, AutoCAD. Среда программирования библиотеки C++

       

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


Следующие показы примера, получающие таблицу уровня для текущей базы данных и открытия этого для записи. Это создает новую запись таблицы уровня (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");

}

}



Содержание раздела