找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1308|回复: 5

[求助]:关于AcDbDatabaseReactor的几个问题

[复制链接]
发表于 2004-6-11 14:41:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
ARX所带的例子dbreact中采用反应器对数据库监视,但
我发现有个问题当向数据库中添加一个对象(例如线)时怎么会有三个消息
1.Appended,2.Modified,3.Modified对于第一个和第三个消息可以理解,怎么第二各消息(何第一个消息相同)为什么会出现,在实际应用中我只想得到Append消息并提取对象的坐标信息,如果
处理两个同样的信息会怎加额外的重复工作,怎样才可以避免?

还有一个问题是当我修改某一对象时在objectModified函数中得到的是修改后的对象指针,那么在修改之前的信息(坐标等)怎样才能知道?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-6-13 19:50:35 | 显示全部楼层
请高手们说说
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-13 21:47:27 | 显示全部楼层
一个时实体的Modified,另一个是模型空间的Modified
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-22 21:06:08 | 显示全部楼层
我看到的情况更复杂。我用不同方法画出同样一个圆时
AcDbDatabaseReactor 触发的消息情况如下:
(下面的 ObjectName 指的是回调函数中参数 const  AcDbObject * dbObj 所代表的 "物体" 名称)

  1. 1) 在Command下直接画圆:
  2. objectAppended
  3. objectModified      -->>    ObjectName:  AcDbCircle
  4. objectModified      -->>    ObjectName:  AcDbBlockTableRecord

  5. 2)用LISP 的 (entmake)构造一个圆:
  6. objectModified      -->>    ObjectName:  AcDbBlockTableRecord
  7. objectAppended
  8. objectModified      -->>    ObjectName:  AcDbCircle

  9. 3)用ActiveX COM 接口画圆 Thisdrawing.ModelSpace.AddCircle(....):
  10. objectModified      -->>    ObjectName:  AcDbBlockTableRecord
  11. objectAppended
  12. objectModified      -->>    ObjectName:  AcDbCircle
  13. objectModified      -->>    ObjectName:  AcDbCircle
  14. objectModified      -->>    ObjectName:  AcDbCircle

  15. 4)在Command下用 Copy命令复制一个圆:
  16. objectAppended
  17. objectModified      -->>    ObjectName:  AcDbCircle
  18. objectModified      -->>    ObjectName:  AcDbCircle

复制代码


有趣,但是,却很无奈。。。
---------------
AcDbDatabaseReactor 应该有一个objectForModify消息才可以方便解
决楼主提出的后面那个问题。如果AutoDesk有知,应该很容易加上
这个功能。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-23 10:43:22 | 显示全部楼层
1。Modified函数是修改当前数据库任意实体都调用,加载实体,修改实体等都会调用
2。Modified函数中得到的指针就是你原来的指针,用原来的指针得到原来的信息
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-1 10:22:21 | 显示全部楼层
在AcDbDatabaseReactor中只响应objectModified函数,判断该对象是否是你要的,如果是则加如一个ID列表中;添加AcEdInputContextReactor反应器监视命令的状态,当命令结束时修改ID列表里的对象。因为如果在objectModified里修改对象可能会发生冲突。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 20:47 , Processed in 0.381381 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表