乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 20|回复: 1

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

[复制链接]

15

主题

32

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
92
发表于 2007-11-5 01:22:00 | 显示全部楼层 |阅读模式
想法是:
       监视每一个删除操作,通过被删除的objectId获取被删实体的属性,再根据属性判断是否有不应被删除的实体在内,执行其它操作
回复

使用道具 举报

2

主题

7

帖子

1

银币

初来乍到

Rank: 1

铜币
15
发表于 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:bjectAppended(const AcDbDatabase *db,const AcDbObject *pObj)
{
  ads_alert("APPEND");
}
void CDbReactor:bjectModified(const AcDbDatabase *db,const AcDbObject *pObj)
{
  ads_alert("MODIFY");
}
void CDbReactor:bjectErased(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
}
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-6 04:31 , Processed in 0.277484 second(s), 56 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表