During dragging, the top level network is evaluated on every drag sample. When the dragged entities have dependencies attached to them, the dependencies are notified. The AcDbAssocStatus of the dependencies, of the actions owning the dependencies, and of the networks owning the actions, is changed to kChangedDirectlyAssocStatus, as explained in the previous section. This marks these actions and possibly other actions as requiring evaluation when the top level network is evaluated. The network evaluation may change other entities and these other changed entities also need to be displayed in real time while dragging.
The AutoCAD dragging mechanism is based on a simple concept of creating non database resident clones of the dragged entities on every drag sample, changing the clones, displaying the clones and deleting the clones. The database resident entities are not changed in the middle of dragging; they are only changed at the very end.
In order to hide this creation and manipulation of non database resident clones of the dragged entities from the action code, a template class AcDbAssocObjectPointer is provided. The action is expected to use this template class to open all entities that it needs to use or modify during the action evaluation. The action passes an AcDbObjectId of the object to be opened to the AcDbAssocObjectPointer object. If not dragging, the AcDbAssocObjectPointer object represents the AcDbObject of the provided AcDbObjectId. However, during dragging, the AutoCAD dragging mechanism creates a non database resident clone of the original entity and AcDbAssocObjectPointer then represents this non database resident entity. The action code then uses or modifies this entity the same way it would modify the original database resident entity; it does not need to do anything special to support dragging.