何为反应器?

AutoCAD中提供了类似MFC消息机制的通知方式。用于处理以下情况:

执行AutoCAD命令、修改系统变量、保存和退出图形编辑器或者切换当前工作布局空间等等。

反应器机制是观察者模式的一种实现,在该机制下,有事件通知者和事件接收者,负责接收事件的称为反应器。在反应器可以从通知者处接收消息之前,必须显式地将反应器添加到通知者的反应器列表中(观察者模式中的通知对象列表)。

常见反应器类型:

编辑反应器:AcEditorReactor
实体反应器:AcDbEntityReactor
对象反应器:AcDbObjectReactor
图形数据库反应器:AcDbDatabaseReactor
文档管理反应器:AcApDocManagerReactor

根据反应器的基本性质,反应器被分为临时反应器和永久反应器。

临时反应器本身不是数据库对象,由开发者负责临时反应器的注册和卸载,用来监控数据库事件、用户操作以及其他的程序运行时的系统事件。

永久反应器是一个数据库的对象,由开发者创建并由AutoCAD负责删除,永久反应器可以接收及发送消息,可以被保存到DWG和DXF文件中,当图纸被加载的时候会重建永久反应器。用来实现对象之间的关联反应。

如何使用一个临时反应器

从ARX内建的一系列反应器类中挑选一个合适的类派生,实现相关函数并注册反应器。

注意:永久反应器由AutoCAD负责删除,而临时反应器由程序员来负责删除。

如何使用一个永久反应器

1:从AcDbObject派生一个新类,并且实现你需要使用的事件函数。

2:将反应器对象实例化。

3:将反应器对象添加到数据库中,并将其存储起来(一般是存到容器中)

4:将反应器对象通过addPersistentReactor函数添加到通知者的反应器列表中。这个函数需要使用到反应器对象的id。

另外,需要使用ObjectARX的类声明宏为它创建一个类描述符对象

如果不使用ObjectARX宏,当自定义类被保存时将会继承其父类的类描述,并且当它从文件中被读出时会丢失标识。

反应器使用原则

1:不要依赖激活的顺序

除了类似commandWillStart和commandEnded这样的先后关系,不能依赖其他的顺序,因为引入新的通知或已有通知被重新排序时都会改变通知的顺序。

2:不要依赖通知间操作的顺序

对于一个反应器,先接收到了A对象的操作通知,后接到了B对象的操作通知,这不能保证A对象是在B对象之前操作的。

3:不要在通知回调函数中使用任何用户交互函数

任何与用户交互的函数都不要调用(类似于获取点等操作)

最新文章

  1. java-base64编码和解码
  2. Python内置函数解析
  3. select 嵌套查询
  4. IOS多线程(一)
  5. 8-7-Exercise
  6. JavaScript下全选反选的Demo程序里实现checkmeonly函数 DOM
  7. Qt容器类(总结)(新发现的QQueue和QStack,注意全都是泛型)
  8. 详解 UIView 的 Tint Color 属性
  9. 多线程爬坑之路-J.U.C.atomic包下的AtomicInteger,AtomicLong等类的源码解析
  10. mysql安装过程
  11. mysql 8.0 密码加密方式的坑
  12. android build 编译打印详细过程
  13. [转]IISExpress配置使其能通过IP访问方法
  14. 用AOP拦截自定义注解并获取注解属性与上下文参数(基于Springboot框架)
  15. DOS 如何取当前时间做为文件名?
  16. SCWS中文分词,向xdb词库添加新词
  17. Effective C++ Item 10,11 Have assignment operators return a reference to *this Handle assignment to self in operator =
  18. springMVC的多文件的异步上传实现
  19. Android StickHeaderRecyclerView - 让recyclerview头部固定
  20. ACM解题之回文序列

热门文章

  1. 搭建mongoDB 配置副本集 replSet
  2. python staticmethod和classmethod(转载)
  3. IGP和EGP(转载)
  4. 隐私问题成O2O绊脚石,加强行业监管迫在眉睫
  5. 一堂C++课玩转rpm包的制作
  6. flume topology design . tier num 分层数目
  7. Memcached中的存取命令详解
  8. 编写灵活、稳定、高质量的 HTML 和 CSS 代码的规范。
  9. webpack4 中的最新 React全家桶实战使用配置指南!
  10. CentOS(Linux) - 安装软件笔记(一) - VPSMate(服务器可视化管理工具)安装