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

本文介绍如何在ObjectARX中通过派生AcEdJig类,结合自定义临时实体CMultiCircleJigEntity,实现一次拖动多个实体的功能。详细讲解了AcEdJig的sampler()、update()和entity()方法,以及如何处理拖动多个新建实体的逻辑。通过创建一个辅助实体类,解决了AcEdJig::entity()只能返回单个实体指针的问题,实现了完美的拖动效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

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

  既然AcEdJig::entity()只能返回一个实体,最好的办法当然是从这个实体上入手了,我们使用一个自定义的临时实体,完美解决了这个问题,今天先来看新建实体的例子:

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值