The main idea of this patch is to create a generic snap gizmo that can be used in different tools.
In this case, the ruler was the chosen tool.
**technical information:**
- The Gizmo can be configured initially by the following properties -> `"snap_elements_force"`, `"active_on"`, `"prev_point"`
- The following properties can be read as return -> `"location"`, `"normal"`, `"snap_elem_index"`
- This property can be linked to another (tool_setting.snap_elements) -> `"snap_elements"`
- 3 extra utilities have been created -> `ED_gizmotypes_snap_3d_draw_util`, `ED_gizmotypes_snap_3d_context_get`, `ED_gizmotypes_snap_3d_update`.