找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1310|回复: 5

谁能说一下移动自定义的实体的过程

[复制链接]
发表于 2005-11-10 14:12:35 | 显示全部楼层 |阅读模式

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

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

×
今天搞得有点迷糊,我重载了这三个函数
        Acad::ErrorStatus moveGripPointsAt(const AcDbVoidPtrArray&,const AcGeVector3d&,const int);
        Acad::ErrorStatus moveGripPointsAt(const AcDbIntArray&,const AcGeVector3d&);
        Acad::ErrorStatus getGripPoints(AcGePoint3dArray&,AcDbIntArray&,AcDbIntArray&)const;


移动的时候看不到实体跟随鼠标,不过在移动结束之后移动的结果倒是对的。
我觉得应该生成一个当前实体的拷贝。但我在调试的时候发现只是调用了默认构造函数创建了一个空对象,而没有调用拷贝构造函数或者operator=,我还需要重载那些函数?

另外moveGripPointsAt的两个重载函数有什么区别?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-11-10 21:00:49 | 显示全部楼层
我想问题很有可能是你的wordDraw函数不正确,没有对每个夹点的移动进行绘图的具体处理,
然而拖动后又是正确的,那是因为你的wordDraw函数对整个类进行绘图,所以是正确的。举个例子:
定义一个矩形类:
实体只需要两个数据就可以确定此类:LeftDownPt    RightUpPt;
此类有两个数据:左下角点和右上角点,在这里为了问题简单假设就这样定义该类,
当你拖动左上角点和右下角点时,你可能没有对实体的两个数据进行更新,其实是要更新的,
往往会忽略这一点,觉得这个操作并没有改变类的数据,但如果拖动左下角或右上角那就正确了。我是这样猜测仅供参考
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-11 10:56:18 | 显示全部楼层
还是没弄明白,我只返回了一个夹点。在moveGripPointsAt函数里更新,但这个更新只能控制到移动结束的时候。而不能控制中间过程。
今天调试了arx自带的一个例子AcGrip,发现例子中移动过程中的更新是在dwgInFields和dwgOutFields中进行的。但是这两个函数使用起来很别扭。



我现在的问题似乎是这样的:
我定义了一个实体A,产生一个实体a1并显示。移动实体的时候,cad自动产生了一个实体a2,我可以通过a2.moveGripPointsAt来更新实体,移动结束之后,acad自动调用a1.moveGripPointsAt来移动a1
现在的问题是,我需要a2生成之后的初始值等于a1来保证实体形状不变,而且我的实体太复杂了,不能简单地通过dwgOutFields,dwgInFields来传递,有没有哪个函数是干这个的?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-14 14:23:00 | 显示全部楼层
必须重载dwgInFields,dwgOutFields,transformBy,transformCopy等函数,并且要把相关数据的读写正确
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-16 10:59:39 | 显示全部楼层
vager说得对的,移动的过程其实也是一个不断构造实体和析构实体的过程, 再这个过程中需要不断的写入和读取数据,  getGripPoints  和 moveGripPointsAt  不是用来移动实体的,是得到实体的关键点和移动它的关键点的, 比如 直线的两端点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-20 14:54:49 | 显示全部楼层
移动任意一个实体时
1.原有实体调用 dwgOutFields 把当前数据保存
2。构造一个新的实体
3。新实体读取原有实体写出的数据 dwgInFields
4。新实体worldDraw()
5。不停的移动,不停的 dwgOutFields , dwgInFields
6。当移动完毕后,新实体 dwgOutFields, 原有实体dwgInFields 读取移动后的值,并重新worlddraw
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 03:28 , Processed in 0.205108 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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