明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1674|回复: 1

如何监控删除实体的操作?

[复制链接]
发表于 2007-11-5 01:22:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2007-11-6 11:47:55 编辑

想法是:
       监视每一个删除操作,通过被删除的objectId获取被删实体的属性,再根据属性判断是否有不应被删除的实体在内,执行其它操作

发表于 2007-11-6 17:47:00 | 显示全部楼层

派生一个类

// DbReactor.cpp: implementation of the CDbReactor class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "resource.h"
#include "DbReactor.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CDbReactor::CDbReactor()
{

}

CDbReactor::~CDbReactor()
{

}

void CDbReactor::objectAppended(const AcDbDatabase *db,const AcDbObject *pObj)
{
  ads_alert("APPEND");
}

void CDbReactor::objectModified(const AcDbDatabase *db,const AcDbObject *pObj)
{
  ads_alert("MODIFY");
}

void CDbReactor::objectErased(const AcDbDatabase *db,const AcDbObject *pObj,Adesk::Boolean pErased)
{
  if(pErased) ads_alert("DELETE");
}

// DbReactor.h: interface for the CDbReactor class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_DBREACTOR_H__ED11D52E_E8ED_43A0_90CE_8BB65D78A51A__INCLUDED_)
#define AFX_DBREACTOR_H__ED11D52E_E8ED_43A0_90CE_8BB65D78A51A__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CDbReactor : public AcDbDatabaseReactor 
{
public:
 CDbReactor();
 virtual ~CDbReactor();

  void objectAppended(const AcDbDatabase *db,const AcDbObject *pObj);
  void objectModified(const AcDbDatabase *db,const AcDbObject *pObj);
  void objectErased(const AcDbDatabase *db,const AcDbObject *pObj,Adesk::Boolean pErased);

};

#endif // !defined(AFX_DBREACTOR_H__ED11D52E_E8ED_43A0_90CE_8BB65D78A51A__INCLUDED_)


增加监控函数

void WatchDb()
{
  if(gpDbr==NULL) gpDbr = new CDbReactor();

  AcDbDatabase *pCur=acdbHostApplicationServices()->workingDatabase();
  pCur->addReactor(gpDbr);
}

//清除监控函数

void ClearReactors()
{
  AcDbDatabase *pCur=acdbHostApplicationServices()->workingDatabase();

  if(pCur!=NULL) pCur->removeReactor(gpDbr);
  delete gpDbr;
  gpDbr=NULL;
}

在初始化时增加监控

void InitApplication()
{
  // TODO: add your initialization functions

  WatchDb();

}

// Unload this application. Unregister all objects
// registered in InitApplication.

//在退出时清除监控
void UnloadApplication()
{
 // NOTE: DO NOT edit the following lines.
 //{{AFX_ARX_EXIT
 //}}AFX_ARX_EXIT

  ClearReactors();


  //deleteAcRxClass(CPersistentReactor::desc());
 // TODO: clean up your application
}

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 18:31 , Processed in 0.173633 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表