ObjectARX反应器概述[转载]
何为反应器?
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:不要在通知回调函数中使用任何用户交互函数
任何与用户交互的函数都不要调用(类似于获取点等操作)
ObjectARX反应器概述[转载]的更多相关文章
- IOS中的多线程和NSRunLoop概述(转载)
线程概述 有些程序是一条直线,从起点到终点,如Hello World,运行打印完,它的生命周期便结束了:有些程序是一个圆,不断循环,直到将它切断,如操作系统,一直运行直到你关机. 一个运行着的程序就 ...
- Java三大主流框架概述(转载)
转自:http://www.douban.com/note/320140839/ Struts.Hibernate和Spring是我们Java开发中的常用关键,他们分别针对不同的应用场景给出最合适的解 ...
- Intellij IDEA 2017 详细图文教程之概述
天天编码 , 版权所有丨本文标题:Intellij IDEA 2017 详细图文教程之概述 转载请保留页面地址:http://www.tiantianbianma.com/intellij-idea- ...
- web服务器工作原理
Web服务器工作原理概述 转载自http://www.importnew.com/15020.html 很多时候我们都想知道,web容器或web服务器(比如Tomcat或者jboss)是怎样工作的?它 ...
- SD-WAN技术分析
1.概述 转载须注明来自 SDNLAB并附上本文链接. 本文链接:http://www.sdnlab.com/17810.html 宽带接入以及Internet骨干网容量的持续提升,促使企业WAN技术 ...
- FreeCommander 学习手册
概述 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3470728.html FreeCommander(下文简称FC),是Windows下面比较强大的文 ...
- [转]WPF中的导航框架
有的时候,我们需要一个支持页面跳转的UI,例如文件浏览器,开始向导等.对于这样的界面,简单的可以使用ContentControl + ContentTemplateSelector的方式来实现,但是有 ...
- Unicode编码解析
概述 转载自博文浅谈Unicode编码 参考博文,结合自己实际情况进行部分内容添加修改 一 需求 java源码中尤其是数字部分用到了很多Unicode方面知识,如果不懂,看源码的时候会很懵逼 java ...
- AutoCAD开发选择----ObjectARX还是.net API(转载)
本文基于AutoCAD 2006新推出的.NET API为工具,介绍了在.NET平台下对AutoCAD进行二次开发的技术,并与目前常用的VBA.ObjectARX作了对比.同时讨论了如何弥补.NET ...
随机推荐
- 侧边打赏-html
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- 您的安全性偏好设置仅允许安装来自 App Store 和被认可的开发者的应用
您的安全性偏好设置仅允许安装来自 App Store 和被认可的开发者的应用. 安装macOS Sierra后,会发现系统偏好设置的“安全与隐私”中默认已经去除了允许“任何来源”App的选项,无法运行 ...
- 通过css选择器class给元素添加cursor的坑
笔者在chrome中遇到了奇特的问题,在通过class给元素添加cursor的自定义图片时.出现了"Invald property value"提示,crosshair.help等 ...
- EasyDarwin开源云平台接入海康威视EasyCamera摄像机之快照获取与上传
本文转自EasyDarwin团队成员Alex的博客:http://blog.csdn.net/cai6811376 EasyCamera开源摄像机拥有获取摄像机实时快照并上传至EasyDarwin云平 ...
- 九度OJ 1088:剩下的树 (线段树)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5791 解决:2649 题目描述: 有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点 ...
- Codeforces 724C Ray Tracing 扩展欧几里得
吐槽:在比赛的时候,压根就没想到这题还可以对称: 题解:http://blog.csdn.net/danliwoo/article/details/52761839 比较详细: #include< ...
- [RK3288][Android6.0] 调试笔记 --- eMMC分区号和名字的对应【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/77318410 Platform: Rockchip OS: Android 6.0 Kern ...
- Ubuntu下安装Android studio【转】
本文转载自:http://blog.csdn.net/walleit/article/details/65696712 版权声明:本文为博主原创文章,未经博主允许不得转载. 一,软件准备 1. Lin ...
- iap 应用内购买相关的解释
应用范围app Store Review Guidelines : https://developer.apple.com/app-store/review/guidelines/ 中 11.12 ...
- Jmeter创建一个简单的http接口用例
1.新建线程组 添加->Threads(Users)->线程组 线程组用来模拟用户进程. 2.添加http信息头管理器 添加->配置元件->http信息头管理器 Systemi ...