Snap edges to edges, faces to faces, and corners to corners depending on what the user wants
Move by the set increment
Have the classic dragging feature where the surface of the part being dragged that is closest to the surface behind that part is oriented towards the latter surface and dragged relative to it.
The ideal dragging feature should: