ObjectARX反应器概述

来源:互联网 发布:淘宝便利店入口 编辑:程序博客网 时间:2024/04/26 13:48

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:不要在通知回调函数中使用任何用户交互函数

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


原文:http://www.cnblogs.com/DavidHsu/archive/2012/04/06/2435319.html

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 5岁宝宝咳嗽有痰怎么办 生川乌外贴中毒怎么办 7个月宝宝流鼻涕怎么办 脸上皮肤毛孔粗大有黑头怎么办 嗓子长了个囊肿怎么办 食管胃粘膜异位怎么办 狗狗肿瘤破了怎么办 婴儿胃食道反流怎么办 小儿胃食道反流怎么办 放疗后咳嗽痰多怎么办 胃息肉是恶性的怎么办 老是胃疼,胃胀怎么办 吃完饭之后胃胀怎么办 胃痛胃胀怎么办能缓解 胃胀不消化怎么办快速解决 便秘肛裂了好痛怎么办 胃消化慢还便秘怎么办 11个月婴儿便秘怎么办 80多岁老人便秘怎么办 狗狗便秘拉不出来怎么办 2个月幼犬便秘怎么办 狗狗便秘怎么办吃什么 痔疮又痛又痒怎么办 痔疮肉球特别痒怎么办 长了个小痔疮怎么办 产后4天没大便怎么办 7个月孕妇痔疮怎么办 运动完恶心想吐怎么办 跑步后恶心想吐怎么办 肠子不蠕动严重便秘怎么办 怀孕八个月严重便秘怎么办 怀孕七个月便秘严重怎么办 怀孕两个月便秘严重怎么办 3岁宝宝上火便秘怎么办 7个月的宝宝贫血怎么办 9个月婴儿贫血怎么办 肛裂大便有血怎么办 生完宝宝肛门痛怎么办 肛周脓肿出血了怎么办 胃胀怎么办简单的办法 吃多了胃胀难受怎么办