ObjectARX完美实现一次拖动多个实体(上)

  我们知道,在ObjectARX中可以通过派生AcEdJig类来实现拖动过程。通常派生一个AcEdJig类必须重载以下三个成员函数:

    AcEdJig::sampler(),它获取几何值(角度、距离、点等)

    AcEdJig::update(),它分析几何值并且存储该值或更新实体

    AcEdJig::entity(),它返回要更新的实体的指针

  但在使用过程中发现有一个问题,就是AcEdJig::entity()只能返回单个实体的指针,也就是说使用AcEdJig类的派生类来实现拖动循环原则上只适用于单个实体,要使其适用于拖动多个实体,就不得不进行某些变通的处理。例如要对若干个新建的实体使用拖动,一种变通方法就是把新建的实体先加入CAD的数据库,在拖动过程中(即update()中)使用AcD::kForWrite模式打开并更新实体然后关闭。拖动结束后根据返回情况决定是保留还是删除实体。这样做显得很麻烦,一是要对新生成的实体作区别处理,entity()返回的实体和"其它"实体;二是先把实体加入数据库,然后再决定是否删除不应该是一种推荐的方式,总感觉有那么点不自在;拖动过程中频繁地用写方式打开实体也应该避免;而且这种方式并不适用数据库中已存在的实体,因为一旦取消拖动过程,实体可能已经不处在原来的位置了,当然可以通过复制临时实体的方式解决,但这就进一步使问题复杂化了

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值