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: Camera DOF distance~~ (done)
DOF distance manipulator can be edited when "Limits" are enabled.
==== ~~3D View: Camera/Lamp Focal-Length/Spot-Size~~ (done)
Support using the spot axis or camera frame to adjust the angle of the spot / focal length.
==== ~~3D View: Force Field~~ (done)
Support using an arrow to adjust wind strength.
==== 3D View: Clipping Border
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?
==== 3D View: 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?
==== 3D View: 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.
==== 3D View: 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)//
==== 3D View: Empty Image
**Benefit:** This is positioned in 3D space but currently only editable via buttons.
**Design Summary:** Would use a rectangle cage (corners and center-point) to edit the placement of the image empty.
==== 3D View: 3D Text-Box
**Benefit:** This is positioned in 3D space but currently only editable via buttons.
**Design Summary:** Would use a rectangle cage (same as empty image).
==== 3D View: 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.
==== 3D View: 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?
==== Nodes (Compositor): Box/Ellipse Mask
It should be possible to change size and position of the Box/Ellipse Mask borders per widget.
==== ~~Nodes (Compositor): Viewer Node ~~ (done)
The tile ordering center (which already looks like a widget) should be a draggable widget too.
==== Nodes (Compositor): Viewer Border (CTRL+B)
Adjust the border bounds
==== Nodes (Compositor): Translate/Transform/Scale/Crop Nodes
It should be possible to perform all transforms through a widget, like in any other image editing program.
==== Nodes (Compositor): Sun Beams
There is a position input for the sub beams node, which could be widgetified as well.
==== Nodes (Compositor): Corner Pin node
This node desperately needs a widget. Pretty simple widget, just four corners. I suppose it could also have the soon-to-be-standard transform widget in the center of it, as well (that would be a nice bonus!)
==== Movie Clip Editor: Track Transform
Transform manipulator for aspect ratio, width and height and rotating.
==== Movie Clip Editor: Transform (Cage)
It would be great to have a box widget that appeared when ever more than one control point was selected. This widget would let you move, rotate, scale, and warp the selected control point positions.
Also, there should be a hotkey to turn on/off widget visibility, at least in the compositor. This is necessary to get a clear, unobstructed view of the composited image.
==== 3D View: ~~Edit Mesh Spin~~ (done)
Modify the center axis, and angle.
==== 3D View: Edit Mesh Screw
Modify the center axis, and turns.
==== 3D View: Edit Mesh 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)
* Simple deform (center, limits, angle)
* Mirror (symmetry plane)
* Cast (center)
* Hook (center, radius, strength)
* 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.
* 3D View: 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
* 3D View: Proportional Editing, Vector would be a moved arrow for translation and scaling. There would be a circle for proportional size. And between both an horizontal line could be modified used as a curve widget to adjust falloff.
**Reason:** I worry this conflicts with existing transform manipulator. ~ ideasman42
3D View: Move Object Origin
**Reason:** Object origin isn't a property, the manipulator would be moving all object data. This is another example of a manipulator that you would probably want to keep disabled, the effort to enable, access & disable seems like it might not be worth the hassle, although I can see this point is disputable too. ~ ideasman42
= 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)//.
* 3D View: 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.
* 3D View: 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
* 3D View: Texture Mapping, For a mapping node taking as an entry generated or world coordinates (an origin that correspond to point easy to identify in 3DView) , we can think of a manipulator in 3D view to set offset, scale or rotation of the coordinates. There could be a manipulator visible only in camera view for Window or Camera coordinates.
**Reason:** Blender's texturing pipeline is likely to move to using nodes, this means we will likely end up needing a way to display a manipulator for a node in the 3D-View. Thats fine but not a straightforward task.
* 3D View: Rotate Edge or UVs or Colors. When dealing with Ngons, we can need to do several iteration of Rotate Edges. And for rotating UVs and colors, we have another operator to Reverse UVs and Reverse Colors. An interactive manipulator could decrease number of calls and number of operators.
**Reason:** Nothing wrong with this suggestion but it seems a bit obscure. Also we would need to add the option to set the number of steps for this tool.