User:Zachman/GSoC2019/Proposal

Name
Nathan Craddock

Contact

 * Email: nzcraddock@gmail.com
 * IRC/blender.chat: natecraddock
 * Twitter: @natecraddock
 * Github: https://github.com/natecraddock

Synopsis
With the addition of collections in Blender 2.80, using the outliner has become more necessary for maintaining a Blender project; therefore, many functional and visual improvements could be implemented to increase the outliner’s capabilities. For example, it is currently impossible to assign multiple objects as children of another object through dragging and dropping. I will implement fixes and features to make the outliner a more useful and powerful tool.

Benefits
This project will allow artists to use the outliner in more standard and intuitive ways.
 * Selection highlighting will be simplified and be kept in sync with the 3D view and other editors selections by default, with a toggle to disable synced selection.
 * Menus and operators will be simplified and renamed to make actions more clear.
 * The keymap will be improved to simplify navigation.
 * Mouse interaction will be improved and new features added.

Deliverables

 * Simplified outliner selection and highlighting:
 * Synced selection between outliners and editors.
 * Merging outliner (blue highlight) and viewport (circle highlight) selection indicators into one selection mode within the outliner.
 * Indication (muted highlight) for which collection the currently selected object(s) are in. If that collection is collapsed in the outliner, it will still be visible which collection the object is part of.
 * Improved mouse and keyboard interaction:
 * Box select by click+drag rather than only by hotkey.
 * Arrow keys for navigation.
 * Shift-click range selection.
 * Improved drag-and-drop capabilities. For example, it is currently impossible to assign multiple objects as a child of another object through dragging and dropping.
 * All other ideas generated by the community that are approved for inclusion.
 * User documentation for the outliner in the manual.

Project Details
Because this project involves relying on the community to generate some of the ideas for improvement, only some of the many possible improvements can be explained in detail at this point.

Syncing Outliner Selection
Confusion with selecting data in the outliner comes because it currently supports two selection modes, editor selection and outliner selection. I will merge these into a single selection state (discussed below in “Highlighting”) and sync the selection between editors and the outliner by default. Merging the two selection states removes the benefit of having an outliner-only selection. This useful feature will be maintained by having a per-outliner setting for syncing the selection. It will be enabled by default, and when disabled, that outliner’s selection state will be isolated.

Synced selection will keep the outliner and other editors in harmony; what is selected in one will always be selected in the other. Any operators and tools that modify the selection in an editor (like select all, box select, and add object/sequence) will reflect that new selection in the outliner.

Disabling synced selection in an outliner will make that outliner an independent editor. This will be useful for organizing the structure of a scene, moving objects into collections, setting parents, and exploring the data of a blend file. By disabling synced selection, any selections in the outliner will not affect the selection state in the 3D view, sequence editor, and other editors.

When toggling on synced selection, the outliner state will update to represent selected and active elements in the scene. When toggling off, the outliner will show the current selected state within the outliner. The toggle could be implemented as a simple button.



The goal is to preserve how the outliner functions currently, with the addition of splitting the selection modes into two distinct states (synced or not synced selection). I don’t expect that I have covered all design issues that will need to be addressed by implementing synced selection in this proposal, but this shows at the core how it would function.

Highlighting
Two indications of selection exist in the current outliner: a blue highlight for outliner selected items, and an additional circle drawn under the object type icon for 3D view selection. I will merge these into a single selection state, removing the circle highlight in favor of more visible blue highlights. A quick hack in the sources to remove the circle drawing and use the blue highlight instead led to the following:



Removing the circle removes visual clutter and makes it more clear what object is active. A short video showing this implementation can be seen here. The video also shows how this makes the selection between the viewport and the outliner more intuitive and consistent.

Additionally, it is currently possible to select objects exclusively within the outliner (using “A” to select all, or “B” to box select”) which uses only the blue highlights. Because the highlight is much more noticeable it can become confusing as to what is really selected in the viewport, and what object is selected in the outliner. Merging the two highlights will fix this.

Highlighting in the outliner will also indicate which collection the selected object is part of. This will help to indicate where the currently selected object is when collections are collapsed.



This shows how selecting Door.002 in the viewport could be represented in the outliner even when many of the collections are collapsed.

Keymap and Mouse Interaction

 * Add the ability to box select by clicking and dragging from the empty space in the left margin
 * Adding common list features (like ctrl and shift click for range selection) will increase ease-of-use in the outliner
 * Add and improve shortcut key map for features like delete and duplicate (mirror keyboard shortcuts from the 3D view as much as possible)

Drag and Drop

 * Implement setting the parent for multiple objects simultaneously.

Community
Many other improvements and fixes will be implemented from user feedback during the course of the program.

Project Schedule
I will use the Community Bonding period to gather ideas for outliner improvements from the community. I will make threads on forums and ask for feedback on different social media platforms. I will also read through the existing Paper Cut thread to gather more ideas on features to implement.

I will compile these ideas (and ideas from myself and developers) into a list organized by priority to implement into the schedule.

Additionally, I will use this time to become more familiar with the code for the outliner. In this time I will only have one class at school so I will have plenty of time to learn and experiment, potentially fixing a few “papercut” problems in the outliner to prepare for the main coding portion of the summer.

I will also spend this time “stress-testing” the outliner to gain an understanding of all of the currently implemented features so I can find areas to improve.

View the updated Schedule

I will be enrolled in Computer Science course from April 30 to June 17, with one final exam on June 19th. As this is only one course that meets three times a week I am confident that I will be able to manage the three-and-a-half week overlap between this course and the coding time that starts May 27th.

Because this project has the potential to generate more ideas for outliner improvements than the summer allows time to code, I also plan on working on the outliner and other areas of Blender after the summer ends.

Bio
I am Nathan Craddock, a 21-year-old student studying Computer Science and Information Technology at Brigham Young University in Utah, USA. In my free time I enjoy hiking and playing the piano.er user since version 2.61 and I am proficient in C, C++, and Python. I have enjoyed creating art, addons, and participating in the Blender community. Some of my scripts and addons can be found on my Github profile, linked above. Throughout this time I have always desired to contribute to the development of Blender. Recently, I have submitted patches for various fixes to become more familiar with Blender’s code and it has been an amazing experience to contribute to Blender.

I am a driven, hard working individual, and I am very motivated to complete this project. Working on the outliner this summer will allow me to learn Blender’s sources more thoroughly so I can make more meaningful contributions after the summer of code ends. I have been involved with a few patches so far:
 * Add Object Dimension Label Tweaks (D3949)
 * Remove Report Color Fade (D4197)
 * Remove Confirmation Dialogs for Save and Delete (D3953)