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


         

Словарь Расширения


Каждый объект может иметь словарь расширения{*продления*}, который может содержать произвольный набор объектов AcDbObject. При использовании этого механизма, несколько приложений могут прикреплять данные к тому же самому объекту. Словарь расширения{*продления*} требует более верхний чем xdata, но это также обеспечивает более гибкий механизм более высокой способностью{*вместимостью*} для добавляющихся данных.

Для примера использования словаря расширения{*продления*}, чтобы прикрепить произвольную строку к любому AcDbObject, см. программу edinvent в каталоге выборок.

Следующий пример показывает instantiating xrecord и добавление этого к словарю расширения{*продления*} в названном объектном словаре:

void

createXrecord()

{

AcDbXrecord *pXrec = new AcDbXrecord;

AcDbObject *pObj;

AcDbObjectId dictObjId, xrecObjId;

AcDbDictionary* pDict;

pObj = selectObject(AcDb::kForWrite);

if (pObj == NULL) {

return;

}

// Try to create an extension dictionary for this

// object. If the extension dictionary already exists,

// this will be a no-op.

//

pObj->createExtensionDictionary();

// Get the object ID of the extension dictionary for the

// selected object.

//

dictObjId = pObj->extensionDictionary();

pObj->close();

// Open the extension dictionary and add the new

// xrecord to it.

//

acdbOpenObject(pDict, dictObjId, AcDb::kForWrite);

pDict->setAt("ASDK_XREC1", pXrec, xrecObjId);

pDict->close();

// Create a resbuf list to add to the xrecord.

//

struct resbuf* head;

ads_point testpt = {1.0, 2.0, 0.0};

head = acutBuildList(AcDb::kDxfText,

"This is a test Xrecord list",

AcDb::kDxfXCoord, testpt,

AcDb::kDxfReal, 3.14159,

AcDb::kDxfAngle, 3.14159,

AcDb::kDxfColor, 1,

AcDb::kDxfInt16, 180,

0);

// Add the data list to the xrecord. Notice that this

// member function takes a reference to a resbuf NOT a

// pointer to a resbuf, so you must dereference the

// pointer before sending it.

//

pXrec->setFromRbChain(*head);



Содержание  Назад  Вперед