I would like to add a direct geometry manipulation object for 3D interaction (sometimes refered to as "gizmo"). See attached screenshot for the visual representation.
The object will support the folloing interactions:
- dragging a central sphere (not visible in screenshot): move the object's center freely on a plane parallel to the camera plane
- dragging one of the axes: move the object along the used axis
- dragging one of the cones at the end of an axis: scale the object (equally in all directions)
- dragging one of the circles: rotate the object around the corresponding axis
Some features would be logical extensions but are not yet implemented:
- scaling along a single axis (perhaps with a modifier-key during dragging)
- rotating around the camera's view axis (trigger?)
- rotating freely around the center:"pick a point on a sphere" interaction as for the VTK camera at the moment, but movement applied to the object, not the camera (would require a distinction between this mode and the regular camera rotation mode when the user clicks in the 3D background. A good option could be the distance to the object's center, where any click inside the gizmo rotates the object, any click outside rotates the camera)
In a first version, this object has been developed in a module that contains a BaseData sub-class and a DataInteractor sub-class. I requested the
Needs_Core_Modification?
in order to get an opinion whether this feature could/should be part of core. In my opionion it would be well-placed there.