objectarx 反应器
程序中为数据库加载了数据库反应器,在数据库反应器的objectappended响应函数中为每个新添加的对象加对象反应器,用对象反应器来监视对象的修改及删除操作,问题是当对象修改时并不进对象反应器的objcetModified响应函数,这是为什么呢?但删除新添加的一个对象时会进对象反映器的删除响应函数,请问对象反应器加上了吗?为什么不进对象反应器的修改响应函数呢?还有请问监视AcDbBlockTableRecord被添加、修改、删除采用哪种反应器呢?
数据库反应器的objectAppended响应函数代码如下,
void AsdkDbReactor::objectAppended(const AcDbDatabase* db, const AcDbObject* pObj)
{
bool bentity=false;
if(pObj-> isKindOf(AcDbEntity::desc())) //判断是否是实体类,为实体对象添加对象反应器
{
bentity=true;
}
if(bentity)
{
pObj-> addReactor(pObjReactor);
}
}
从AcDbObjecReactor类中派生自己的对象反应器类AsdkObjectReactor类。代码如下:
class AsdkObjectReactor : public AcDbObjectReactor
{
public:
ACRX_DECLARE_MEMBERS(AsdkObjectReactor) ;
AsdkObjectReactor();
virtual ~AsdkObjectReactor();
virtual void objectModified (const AcDbObject* dbObj);
virtual void erased (const AcDbObject* dbObj, Adesk::Boolean pErasing=true);
};
void AsdkObjectReactor::objectModified (const AcDbObject* dbObj)
{
acutPrintf( "xiu gai\n ");
}
void AsdkObjectReactor::erased (const AcDbObject* dbObj, Adesk::Boolean pErasing)
{
acutPrintf( "shan chu \n ");
}
[解决办法]
没有响应 有可能是操作没有提交到实体数据库吧, 反应器没有问题,
实体删除后你在遍历块表记录看能否找得到你那个实体。
你可以上明经论坛上等二次开发论坛上问问,这里很少有人的,
我已经好久不做二次开发了 不能帮你调代码了。