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



         

Использование Реактора Базы данных


Следующий пример использует реактор, полученный из AcDbDatabaseReactor, чтобы следить за числом объектов в настоящее время в базе данных. Это осуществляет три функции уведомления для реакторного класса: objectAppended (), objectModified (), и objectErased (). Watch_db () функция добавляет реактор к текущей базе данных. Clear_reactors () функция удаляет реактор из базы данных и удаляет реактор базы данных.

class AsdkDbReactor;

long gEntAcc = 0; // Global entity count

AsdkDbReactor *gpDbr = NULL; // Pointer to database reactor

// Custom AcDbDatabaseReactor class for database

// event notification.

//

class AsdkDbReactor : public AcDbDatabaseReactor

{

public:

virtual void objectAppended(const AcDbDatabase* dwg,

const AcDbObject* dbObj);

virtual void objectModified(const AcDbDatabase* dwg,

const AcDbObject* dbObj);

virtual void objectErased(const AcDbDatabase* dwg,

const AcDbObject* dbObj, Adesk::Boolean pErased);

};

// Called whenever an object is added to the database.

//

void

AsdkDbReactor::objectAppended(const AcDbDatabase* db,

const AcDbObject* pObj)

{

printDbEvent(pObj, "objectAppended");

acutPrintf(" Db==%lx\n", (long) db);

gEntAcc++;

acutPrintf("Entity Count = %d\n", gEntAcc);

}

// Called whenever an object in the database is modified.

//

void

AsdkDbReactor::objectModified(const AcDbDatabase* db, const AcDbObject* pObj)

{

printDbEvent(pObj, "objectModified");

acutPrintf(" Db==%lx\n", (long) db);

}

// Called whenever an object is erased from the database.

//

void

AsdkDbReactor::objectErased(const AcDbDatabase* db, const AcDbObject* pObj, Adesk::Boolean pErased)

{

if (pErased) {

printDbEvent(pObj, "objectErased");

gEntAcc--;

} else {

printDbEvent(pObj, "object(Un)erased");

gEntAcc++;

}

acutPrintf(" Db==%lx\n", (long) db);

acutPrintf("Entity Count = %d\n", gEntAcc);

}

// Prints the message passed in by pEvent; then




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