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