Deformation - Procedural local deformers

Path of the scene: [03_manual_deformers]
The objective of this scene is to model interactive deformers allowing to locally grap and pull/push, scale, and bend/twist some part of the surface.

Current state of the code

In the current state of the program a vertex \(p_0\) of the surface can be selected while pressing the key SHIFT and moving the mouse.
A left click on the mouse followed by a drag-and-drop allow to select a sub-part of the surface around \(p_0\), and translate it along the mouse displacement. The size of this sub-part is parameterized by a falloff distance visualized as the red circle around the selected vertex. This distance can be interactively modified using the scroll of the mouse, or directly using the corresponding slider in the GUI.
Different surfaces can be loaded in selecting in the GUI: plane, cylinder, sphere, cube, or a pre-defined mesh.
The type and direction of deformer do not have any effect yet.
The deformation of the surface is computed in the function apply_deformation located in the file deformation.cpp. This function is called every time a vertex is selected and the mouse is dragged.
So far, the current deformation implements a translation in the view space with a local linear profile.

Translation in the camera plane

Translation in the surface normal direction

Twist

Scale

Extra - Noise magnitude