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

       

Получение ID Объектного Реактора


Каждый объект базы данных обслуживает{*поддерживает*} список реакторов на себе. Некоторые - переходные реакторы, и некоторые постоянны. Переходные реакторы - образцы классов, полученных из AcDbObjectReactor, принимая во внимание, что постоянные реакторы - объект IDs объектов резидента базы.

Следующий код показывает, как перерыть список реакторов, чтобы найти ваш переходный или постоянный реактор. Чрезвычайно важно, что Вы проверяете специфический вход в реакторном списке, чтобы быть постоянным реактором,  используя функцию AcDbIsPersistentReactor. Если это - постоянный реактор, Вы можете использовать соответствующую функцию, чтобы получить ее объект ID. Если это - не постоянный реактор, Вы можете приводить вход в AcDbObjectReactor.

AcDbVoidPtrArray *pReactors;

void *pSomething;

AcDbObjectReactor *pObjReactor;

AcDbObjectId persObjId;

AcDbObject *pPersReacObj;

pReactors = pEnt->reactors();

if (pReactors != NULL && pReactors->length() > 0) {

for (int i = 0; i < pReactors->length(); i++) {

pSomething = pReactors->at(i);

// Is it a persistent reactor?

//

if (acdbIsPersistentReactor(pSomething)) {

persObjId = acdbPersistentReactorObjectId(pSomething);

acutPrintf("\n\nPersistent reactor found.");

// Echo the keyname to the user.

//

char *keyname = NULL;

getPersReactorKey(keyname, persObjId);

if (keyname) {

acutPrintf("\nThis is the reactor named %s",keyname);

free (keyname);

}

// Open it up and see if it’s one of ours. If it is,

// fire the custom notification.

//

if ((retStat = acdbOpenAcDbObject(pPersReacObj, persObjId, AcDb::kForNotify))

!= Acad::eOk)

{

acutPrintf("\nFailure for"

" openAcDbObject: retStat==%d\n",

retStat);

return;

}

AsdkPersReactor *pTmpPers;

if ((pTmpPers = AsdkPersReactor::cast((AcRxObject*)

pPersReacObj)) != NULL)

{

pTmpPers->custom();

}

pPersReacObj->close();

} else {

// Or is it transient?

//

pObjReactor = (AcDbObjectReactor *)

(pReactors->at(i));

acutPrintf("\n\nTransient Reactor found");

// Report what kind we found.

//

if (pObjReactor->isKindOf(

AsdkSimpleObjReactor::desc()))

{

acutPrintf(" of type"

" AsdkSimpleObjReactor");

} else if (pObjReactor->isKindOf(AcDbEntityReactor::desc()))

{

acutPrintf(" of type"

" AcDbEntityReactor");

} else if (pObjReactor->isKindOf(AcDbObjectReactor::desc()))

{

acutPrintf(" of type"

" AcDbObjectReactor");

} else {

acutPrintf(" of unknown type.");

}

}

}

} else {

acutPrintf("\nThis entity has no reactors.\n");

}



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