This document serves as an overview of the Active Tools system for Blender 2.8.
We will have two types of operations: Active Tools and Commands.
When activating an active tool, Blender does these things:
- Tool Button is highlighted
- (Optionally) Displays a widget in the 3D View
- Shows the relevant tool settings in the Top Bar
- It changes the input of LMB
- Changes the cursor to reflect stealing the input of LMB
These controls are persistent, until you pick a different tool, just like paint mode tools, hair mode tools and so on.
The tool always defaults to zero - ie, it doesn’t perform any changes to your object or mesh, until you either:
- Manipulate the widget
- Drag anywhere in the Viewport
- Change the numerical values
To perform the tool again (say to perform two extrusions in a row), there are two ways:
- The user taps the Extrude button or hotkey again to start anew
- The user can hold a modifier key while clicking and dragging to interpret it as a new operation
Only one active tool can be active at a time.
Shared Tool Options, such as Proportional Editing, Snapping and Pivot are a per-editor type setting. The Orientation setting appears in the top bar when the user has a transform active tool enabled.
When the user executes a command, the tool is not overridden, and therefore stays active.
IF that command has options, we display them in a way that’s clearly different from the ones pertaining to the active tool.
Here are some examples of how exactly the active tools will work:
The user hits the Move tool icon. It becomes highlighted, and we see the name of the tool in the Top Bar, with the tool settings next to it (XYZ) and the Orientation control. In the 3D View, we see a 3D manipulator. The orientation of the manipulator, as well as the XYZ controls, depend on the orientation control. The cursor shows a Move icon.
The user now starts to drag and move the cursor freely in the 3D View, which moves the selected items perpendicular to the view. As the user does this, the XYZ controls in the top bar update to reflect the distance moved since the tool was invoked. The user may choose to adjust those values in the top bar, for example to make a rough placement more exact.
While the user is dragging, tapping X, Y or Z will snap it to a single axis, the orientation of which depends on the orientation setting. This also highlights the corresponding field in the Top Bar, so that users can type in values quickly.
When the user is happy with the move operation, there’s nothing left to do. They simply switch to a different tool and continue working. No need for any OK operation or to ESCAPE or anything like that. The flow stays unbroken.
If the user wishes to start a new move operation, resetting the delta values, they can do so by hitting the Move tool icon again, which is the same thing as going to a different tool and back again.
Works just the same as the move tool, except:
We might want to add the ability to set the # of cuts on the extrusion. This would appear in the top bar.
Extrude Region and Extrude Individual should be presented as two separate tools, using the tool docking system in 2.8.
The user clicks the Knife tool icon. It becomes highlighted, and we see the name of the tool in the Top Bar, with these tool settings next to it: Snap, Midpoint Snap, Cut Through. The cursor shows a Knife icon.
As soon as the user clicks in the viewport, a line appears. When the user clicks a second time, a point is created and a new line appears, and so on.
The user can tap X or Y to constrain to each viewport orientation, or hold shift to constrain to 45* angles.
The Snap, Midpoint Snap and Cut Through top bar settings are available at any time.
When the user is done knifing, the user double-clicks to stop drawing lines. The user can then click and start creating new lines.
The user hits the Spin tool icon. It becomes highlighted, and we see the name of the tool in the Top Bar, with these tool settings next to it: Angle, Steps, Center and Axis (Axis being a vector may need a different representation than an XYZ) and Dupli (Or, should we make Spin Duplicate a separate tool in the UI?). A widget appears in the viewport with the ability to set the Centre point, angle and Axis, with some sort of pie chart style control.
When the user drags LMB anywhere in the 3D Viewport, they move the centre point (or not? Is it more useful to set the angle actually? You’ve may already have set the centre point location using the 3D Cursor anyway…)
Holding Ctrl snaps the angle to increments, and holding Shift makes in more sensitive, just like other transform operations.
The user hits the Select Border tool icon. All other tools and widgets disappear. In the top bar, we display the name of the tool and the following: Replace, Add or Remove radio buttons. The default is set to Replace.
The user can now click and drag in the 3D View to create box selections. LMB-clicking selects a single item.
Holding Shift sets the tool option to Add. Holding Alt sets it Remove.
The user hits the Inset Faces tool icon. It becomes highlighted, and we see the name of the tool in the Top Bar, with these tool settings next to it: Thickness, Depth, with check marks for Relative, Even etc.
In the viewport we see a manipulator which works just like a slider.
The user can now click and drag in the viewport to drag in the inset.
While the user is dragging, they can hold Ctrl to snap to increments, or Shift to increase sensitivity.
The user hits the Bevel tool icon. It becomes highlighted, and we see the name of the tool in the Top Bar, with these tool settings next to it: Amount (%), Segments, Profile, Vertex Only etc..
In the 3D View, we see a manipulator that lets users increase the Amount %.
When the user drags in the 3D Viewport, the Amount % is increased from zero.
The user hits the Bisect tool icon. It becomes highlighted, and we see the name of the tool in the Top Bar, with these tool settings next to it: Fill, Clear Inner, Clear Outer. We also see Plane Point and Plane Normal (Struggling with a good way to make vectors and normal numerical values make sense though? There must be a better way to do it)
In the Viewport, we see a manipulator that looks like a transparent plane, with points on it so that users can move it and rotate it to define the bisect plane.
When the user drags freely in the 3D Viewport, the entire bisect plane is offset.
The user hits the Add Cube tool icon. It becomes highlighted, and we see the name of the tool in the Top Bar, with these tool settings next to it: Radius, Location, Rotation.
When the user clicks and drags in the Viewport, a Cube appears and scales up or down depending on how much the user drags. Here we also see scale cage-style manipulators to set the size.
The user hits the Randomize tool icon. It becomes highlighted, and we see the name of the tool in the Top Bar, with these tool settings next to it: Amount, Uniform, Normal, Seed.
A slider-type manipulator appears in the viewport.
The user can drag in the viewport to randomise verts more or less
The user hits the Loop Cut tool icon. It becomes highlighted, and we see the name of the tool in the Top Bar, with these tool settings next to it: Cuts, Smoothness, Falloff, Factor.
As the user uses the viewport, loops are highlighted as they mouse over them. When the user clicks, a loop cut is added. If the user clicks and drags, they go directly to dragging the cut factor.
Other Edit Mode operators which make sense as Active Tools:
- Screw (Works similar to Spin)
- Edge Slide, Vertex Slide & Offset Edge Slide (The user can click and drag to offset the slide)
- Shrink/Fatten & Push/Pull (These are similar to transform)
These are separate from Active Tools. Commands are not tools that stay active. Instead, they are an atomic operation. After they are performed, the user can continue with whatever active tool they were using. Commands also have the ability to immediately affect the mesh without requiring additional user input.
Here’s a list of typical commands:
- Make Edge/Face
- Remove Doubles
- UV Unwrap
- Recalculate Normals
- Set Smooth
- Sharp Edges
Some commands may have some options users need to be able to set. These we separate from the settings that pertain to the active tool.
In the top bar, we put a popover menu with the last operator accessible. When expanded, you see the options pertaining to that command.
We are considering adding the ability to access the entire history stack from the top bar, with in the same popup, or next to it.
We also would like to add a way to keep these operator options persistent, so users don't have to constantly open and close the operator section.
Some of the tools described above have the ability to use certain modifier keys to tweak their behaviour. Transform tools let you constrain to axes while you are dragging, or snapping by holding Ctrl; the Knife tool allows users to snap to X and Y while drawing, and so on.
The way in which we communicate this, is by adding a status bar to Blender. This will make it completely clear, at any time, what mouse buttons do, and what modifier keys adjust. This way, there's no loss from removing the old 'header modal tips' feature.
This new active tools system creates a dilemma: Even though it makes sense for using the toolbar, how do we handle handle hotkeys? Do they work just like in earlier versions of Blender, or do they switch active tools?
Initially we could avoid this conflict by defaulting to either: 'Immediate Blender' and 'Active Blender' (names?)
It may be we have a single keymap which allows both, this requires careful design.
Immediate Blender Keymap
If the user is using this keymap, Blender's hotkeys are essentially the same as in earlier versions. Pressing G works just like it did before. However, the user might still want to be able to access active tools via a shortcut. We will support this using a consistent modifier.
Possible methods include:
*Holding G could activate the Move tool
*Holding a modifier (such as Space, Ctrl ...)
Active Blender Keymap
If the user is using this keymap, Blender's hotkeys are set to switch active tools. That means tapping G is exactly the same as pressing the Move tool icon in the toolbar: It switches to that active tool, and the user can then use manipulators, drag freely or enter numerical field values, and so on.
If users would like a more immediate way of interacting with tools, they can then use sticky keys: Holding G will allow you to immediately start moving. Users can release G to confirm.