Add dynamic snapping