This task is to collect a list of properties & tools that can take advantage of custom manipulators.
Feel free to post suggestions as comments so we can review them to include in this list, or suggest reasons why any of the suggestions should be rejected.
Note that this task is not intended to go into highly detailed design for each kind of manipulator, for this we can link to a separate design tasks if its needed.
Some rough description of design may be useful here just to communicate whats intended.
==== 3D View Clipping
Currently the only way to set the [[ https://docs.blender.org/manual/en/dev/editors/3dview/navigate/clip.html | view-port clipping ]] is with drawing a border in the view, there is no way to adjust it afterwards.
**Benefit:** If the initial border isn't accurate or the user wants to adjust it, they can adjust the box instead of re-drawing it each time.
**Design Summary:** Each plane of the clipping border can be rotated or translated on its axis (not sure //exactly// how this should work, some design is needed).
* We might want the ability to adjust this at any time. How to do this in a way that isn't too distracting, or how to set the manipulator as active?
==== Area Lamp Size
The rectangle defined by the area lamp could be adjusted by clicking on it.
**Benefit:** Simply allows direct editing of this setting in the viewport.
**Design Summary:** The area rectangle would be a hotspot that can be clicked on to adjust.
* Would we want a way to change between square and rectangle on-screen too?
==== Camera/Lamp Target
This would be a kind of transformation manipulator where you can point the lamp or camera onto the surface of an object to control what the camera looks at //(like having a temporary track-to constraint)//.
**Benefit:** Users could easily point cameras & spot lamps to a location without having to preview render or set it as the active camera.//
**Design Summary:** This would likely be handle on the camera/lamps view axis.
==== Camera Shift
**Benefit:** Currently adjusting shift buttons is quite indirect, this could be supported a little like //panning// the camera view.
**Design Summary:** Suggest this be a small *grab* widget in the camera corner, only visible from within the camera view. //(This could also have a key-binding associated with it)//
==== Bone Roll
This may be an addition to the existing transform-manipulator.
**Benefit:** Simply gives a more direct way of adjusting the bone roll, it could support snapping too, in a way the button value doesn't - snap to axis or parent axis for eg.
**Design Summary:** An outer ring could be used to adjust the bone roll in edit-mode.
==== Curve Vertex Attributes
Allow editing of `BezierSplinePoint.radius` & `tilt`.
**Benefit:** Radius and especially tilt are a little abstract when editing via buttons, direct manipulator access makes it clear what you're editing.
**Design Summary:** The active vertex would have a radius and tilt widget around it (possibly larger then the transform manipulators so they can co-exist).
* Would this edit only the active vertex or all vertices?
==== Edge Slide
While interactive edge slide doesn't especially require a manipulator, adjusting settings after using a number button is quite indirect.
**Benefit:** This allows tweaking edge slide input without using operator redo panel, though admittedly this isn't the most important use-case for manipulators.
**Design Summary:** The closest edge-rail to the cursor would be used as a manipulator //(Internally Blender is already defining an edge-rail for this tool, so its only a matter of highlighting it)//.
= Modifiers / Constraints
Note that its an open-topic if we even should support manipulators for modifiers, so making a short-list of possible uses here to see if its worth supporting.
* Array Modifier (center, rotation).
* Screw Modifier (axis, angle, offset).
* Wave (center, falloff, width)
* Pivot (center)
* Rigit Body Joint (center, rotation)
= Undecided Suggestions
Putting items here which may requite more design before we can tell if they are something that fit well as manipulators.
* Bezier curve extrusion value `Curve.extrude`, bonus points if it allowed snapping with the hypothetical widget snapping system
**Reason:** There are quite a few bevel settings for curves and text its not clear which you would show in the 3D view and I suspect if you are editing some of these settings you probably want to edit others. Another reason am unsure of this is there isn't an obvious place to show the manipulator. ~ ideasman42
* Group offset `Group.dupli_offset` currently only adjustable manually through coordinate input or from 3D cursor position
**Reason:** It's not clear what this setting would be attached to, when would you see this manipulator in the 3D view and how would you know which group you were editing. Also, since this often is left at zero, its likely any object with a group would show some manipulator at the view center. I think this might need its own design task - or have a general design task where we figure out how to expose arbitrary location settings as manipulators in a way that isn't annoying/distracting.
If this is added, I think it would need to be off by default, noted here: T47345#441258 ~ ideasman42
* Misc per-vertex data like Bezier curve radius `BezierSplinePoint.radius`, tilt `BezierSplinePoint.radius`, mesh bevel weight, skin modifier radius, custom normals, etc
= Postponed Suggestions
This is simply to list some ideas that may be useful but out-of-scope for this task, or too controversial //(where there is too much design needed or questionable if they should even be manipulators)//.
* If possible a "move-like" widget to manually place/snap the 3D cursor about the scene `SpaceView3D.cursor_location`
**Reason:** I think making the 3D cursor into its own widget would conflict with placing it, OTOH something like this functionality could be useful, so think this is more of a design task (see: T28451 T40952). ~ ideasman42.