前面的废话:
最近因为一个业务需要实现两个实体之间的拖动联动,大牛建议用反应器实现,查找资料发现是需要用对象反应器实现。后来就找到了这篇文章
https://blog.csdn.net/biggerass/article/details/21020465 对象反应器的使用
跟着照做,一步一步终于实现了联动。发现一个问题:虽然修改modefied时候有效,但是dwgOutFileds函数根本不被调用!!!网上到处都是这个帖子,但是却不能用。图纸中的关联关系不能被保存,关联关系只能当时有效,这肯定是要被产品小哥哥追着打的,没办法,只能继续开拓寻找别的道路走了。
后来大牛建议集成AcDbEntity实现,重载subworlddraw实现。
后来搜索资料找到方法,重新实现。
附件中的例子是可以实现的,其中的理论与objectarx.chm上对于AcDbObjectReactor类的介绍相符:
(以下是从文档上copy过来的,方便与代码相对应参照)
- AcDbObjectReactor类
AcDbObjectReactor类作为反应器类的基类,在反应器类中重载方法对于需要通知的事件被调用。当这些派生类之一的一个对象被实例化且增加至需要通知的对象的反应器链中时,反应器对象中适当的方法在访问“通知的”对象时被调用。
继承自
AcRxObject
包含文件
dbmain.h
提示
定义一个继承自AcDbObjectReactor的类使用这个类。实例化从AcDbObjectReactor派生的类的一个对象,并通过调用希望通知定位的对象的addReactor方法将新创建的反应器对象增加至反应器链中。
参见
AcDbEntity, AcDbObject, AcDbDatabase, AcDbEntityReactor
成员
AcDbObjectReactor::AcDbObjectReactor 函数 AcDbObjectReactor(); 这个默认建构器声明为保护的,因此这个类只能作为一个基类使用。 这个建构器有一个空的执行。
|