Fix #128018: BMesh: Single vert selection history for box/circle/lasso #128033

Closed
YimingWu wants to merge 1 commits from ChengduLittleA/blender:fix-128018 into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
Member

In box/circle/lasso selection, newly selected vertices won't be registered
as a BMEditSelection even if there's only 1 vertex selected. This patch
changes the logic into: If there's only one vertex selected additionally
using box/circle/lasso tool, then also record selection history using
BM_select_history_store. This makes it more convenient for people who
would like to use those selection tools to select and isolate one vertex at
a time. If there's more than one vertices selected with those tools, no
new history would be added since the selection order would be arbitrary.

Note: this requires meshobject_foreachScreenVert and similar iteration
helper funcitions to be single threaded (which existing code also relies on)
to work correctly. If selection code needs to be multi-threaded in the
future then atomics can be used.

In box/circle/lasso selection, newly selected vertices won't be registered as a `BMEditSelection` even if there's only 1 vertex selected. This patch changes the logic into: If there's only one vertex selected additionally using box/circle/lasso tool, then also record selection history using `BM_select_history_store`. This makes it more convenient for people who would like to use those selection tools to select and isolate one vertex at a time. If there's more than one vertices selected with those tools, no new history would be added since the selection order would be arbitrary. Note: this requires `meshobject_foreachScreenVert` and similar iteration helper funcitions to be single threaded (which existing code also relies on) to work correctly. If selection code needs to be multi-threaded in the future then atomics can be used.
YimingWu added the
Module
Modeling
label 2024-09-23 14:47:53 +02:00
YimingWu added 1 commit 2024-09-23 14:48:03 +02:00
In box/circle/lasso selection, newly selected vertices won't be registered
as a `BMEditSelection` even if there's only 1 vertex selected. This patch
changes the logic into: If there's only one vertex selected additionally
using box/circle/lasso tool, then also record selection history using
`BM_select_history_store`. This makes it more convenient for people who
would like to use those selection tools to select and isolate one vertex at
a time. If there's more than one vertices selected with those tools, no
new history would be added since the selection order would be arbitrary.

Note: this requires `meshobject_foreachScreenVert` and similar iteration
helper funcitions to be single threaded (which existing code also relies on)
to work correctly. If selection code needs to be multi-threaded in the
future then atomics can be used.
YimingWu added this to the Modeling project 2024-09-23 14:48:08 +02:00

This feature was intentionally not supported and I think it would be better not not to support it because it means using box select sometimes sets elements active. If this were to be followed consistently, it would mean box selecting an object or pose-bone would activate it too, which has other implications regarding selecting objects for parenting or applying active settings to other objects.

This feature was intentionally not supported and I think it would be better not not to support it because it means using box select *sometimes* sets elements active. If this were to be followed consistently, it would mean box selecting an object or pose-bone would activate it too, which has other implications regarding selecting objects for parenting or applying active settings to other objects.
Author
Member

Hummm... consistency-wise indeed it would be best to not support history for box select. Thanks for the explanation :D I guess we can close this PR for now.

Hummm... consistency-wise indeed it would be best to not support history for box select. Thanks for the explanation :D I guess we can close this PR for now.
YimingWu closed this pull request 2024-09-24 11:26:46 +02:00
First-time contributor

Indeed, there is such kind of a problem in software that set box selection by default - workflow-wise box selection blocks picking actions, delimiting them by threshold, and thresholds is not motorics-friendly mechanics in general.

Which has several consequences - for example, such a mechanics forces users to select single elements with pressholding-driven mIcRoBox selection instead of a proper singleclick picking (could be noticed in 3dsMax, for example) which cause a slowdown and also is critical for a software which is build around an active element paradigm.

Active element paradigm assumes nice picking selections being available most of the time, so the best way to use it is to use Tweak tool and B C and Ctrl+Rmb for Box, Circle and Lasso respectively.

Indeed, there is such kind of a problem in software that set box selection by default - workflow-wise box selection blocks picking actions, delimiting them by threshold, and thresholds is not motorics-friendly mechanics in general. Which has several consequences - for example, such a mechanics forces users to select single elements with pressholding-driven mIcRoBox selection instead of a proper singleclick picking (could be noticed in 3dsMax, for example) which cause a slowdown and also is critical for a software which is build around an active element paradigm. Active element paradigm assumes nice picking selections being available most of the time, so the best way to use it is to use Tweak tool and `B` `C` and `Ctrl+Rmb` for Box, Circle and Lasso respectively.

Indeed, there is such kind of a problem in software that set box selection by default - workflow-wise box selection blocks picking actions, delimiting them by threshold, and thresholds is not motorics-friendly mechanics in general.

@1D_Inc picking with a single click (even when box selection is enabled) will set active.

> Indeed, there is such kind of a problem in software that set box selection by default - workflow-wise box selection blocks picking actions, delimiting them by threshold, and thresholds is not motorics-friendly mechanics in general. @1D_Inc picking with a single click (even when box selection is enabled) will set active.
First-time contributor

picking with a single click (even when box selection is enabled) will set active.

@ideasman42 this is true, it is technically possible.

However, in practice there is quite a deep difference between "technically possible" and "the most efficient" solution types.

In Box selection tool picking action is delimited with a threshold which forms an input speed barrier which is impossible to break due to incompatibility with human motorics, also such a system forces users to use microbox selections in order to achieve predictable result in any software where it is used. After 10 years of using such a system, the user's work speed is close to the speed of the first day, each time you'll try to speed up trying to produce more actions in given time threshold delimiting system will hit your hands with a ruler of an input mistakes.

Here is a video with short workflow speed comparison of a quality of a picking actions in Tweak and Box tools.
Even on a primitive use case it is easy to detect how much slower, less predictable and less efficient picking actions became being delimited by threshold during using Box tool. On a complex use cases it is predictably even worse. For sure it also influences and massively slows down everything which depends on picking actions - like loops/rings selection, shortest path picking, vertex path connecting and active element picking.

This is why threshold delimited actions belongs to the group of a speed breaking/jamming solutions , alongside with doubleclicks, doubletaps, timing actions, pressholdings (endurance consuming actions), motorics actions, low feedback actions, etc, and it is better to avoid using them in general, especially in the areas where workflow speed (measured by the number of actions per minute) is important.

> picking with a single click (even when box selection is enabled) will set active. @ideasman42 this is true, it is technically possible. However, in practice there is quite a deep difference between "technically possible" and "the most efficient" solution types. In Box selection tool picking action is delimited with a threshold which forms an input speed barrier which is impossible to break due to incompatibility with human motorics, also such a system forces users to use microbox selections in order to achieve predictable result in any software where it is used. After 10 years of using such a system, the user's work speed is close to the speed of the first day, each time you'll try to speed up trying to produce more actions in given time threshold delimiting system will hit your hands with a ruler of an input mistakes. Here is a video with short workflow speed comparison of a quality of a picking actions in Tweak and Box tools. Even on a primitive use case it is easy to detect how much slower, less predictable and less efficient picking actions became being delimited by threshold during using Box tool. On a complex use cases it is predictably even worse. For sure it also influences and massively slows down everything which depends on picking actions - like loops/rings selection, shortest path picking, vertex path connecting and active element picking. This is why threshold delimited actions belongs to the group of a speed breaking/jamming solutions , alongside with doubleclicks, doubletaps, timing actions, pressholdings (endurance consuming actions), motorics actions, low feedback actions, etc, and it is better to avoid using them in general, especially in the areas where workflow speed (measured by the number of actions per minute) is important.
First-time contributor

@ideasman42 updated the post.
I am trying to explain how did it happen that despite the fact that picking selections are technically available for Box tool, users fall into using microbox selections for selecting single elements, and trying to resolve issues inherent to using it.
Picking selections are simply not very... usable in that way.

This threshold delimeting box selecting mechanics speedbreaking issue has been known since 90's, we spent several years in order to find a solution to workflow accelerating problem before discovering it in 2009 in Blender.

Upd
(When we learned Blender, we discovered that it was composed in a way that excludes threshold delimiting problem instead of cloning existing solution that contains it, so we thought that person who designed Blender in that way is aware of this issue, so he tried to aviod it on purpose and succeed)

@ideasman42 updated the post. I am trying to explain how did it happen that despite the fact that picking selections are technically available for Box tool, users fall into using microbox selections for selecting single elements, and trying to resolve issues inherent to using it. Picking selections are simply not very... usable in that way. This threshold delimeting box selecting mechanics speedbreaking issue has been known since 90's, we spent several years in order to find a solution to workflow accelerating problem before discovering it in 2009 in Blender. Upd (When we learned Blender, we discovered that it was composed in a way that excludes threshold delimiting problem instead of cloning existing solution that contains it, so we thought that person who designed Blender in that way is aware of this issue, so he tried to aviod it on purpose and succeed)
Author
Member

I personally won't have problems with keeping selection history for box select on 1 element and to me it's convenient & easier to use for the reasons above...

I personally won't have problems with keeping selection history for box select on 1 element and to me it's convenient & easier to use for the reasons above...
First-time contributor

Just wanted to mention that this local problem is just a part of a more global well known problem.

Just wanted to mention that this local problem is just a part of a more global well known problem.
Author
Member

I'll put the summary of the discussion with @ideasman42 in chat about this problem:

  • The "accidental box select" may be handled in the event level, could be coupled with a timer to determine whether this is really a drag or click.
  • Box selection should not be needed to perform single select since single select works well.
  • If we need visual confirmation before selecting via box/circle/lasso select, it's basically a related topic of this anti-feature "Pre Selection Highlighting" . The selection mechanism in Blender should be determinant enough to not require pre-visual confirmation.

For future discussion of this particular problem, considering posting on right click select or blender artists. Thanks!

I'll put the summary of the discussion with @ideasman42 in chat about this problem: - The "accidental box select" may be handled in the event level, could be coupled with a timer to determine whether this is really a drag or click. - Box selection should not be needed to perform single select since single select works well. - If we need visual confirmation before selecting via box/circle/lasso select, it's basically a related topic of [this anti-feature "Pre Selection Highlighting"](https://web.archive.org/web/20230209120223/https://wiki.blender.org/wiki/Reference/AntiFeatures) . The selection mechanism in Blender should be determinant enough to not require pre-visual confirmation. For future discussion of this particular problem, considering posting on right click select or blender artists. Thanks!
First-time contributor

A "timer"?
Do you mean - to delimit box selection from picking, making it secondary with timing in literally Box selection tool which primary goal is providing comfortable Box selecting? )

Where such a mechanics could be seen being successfully applied?

Also not sure how jamming picking issue could be related to preselection highlighting - even if an element will be highlighted, jamming picking will still not allow to pick it in a predictable way

A "timer"? Do you mean - to delimit box selection from picking, making it secondary with timing in literally Box selection tool which primary goal is providing comfortable Box selecting? ) Where such a mechanics could be seen being successfully applied? Also not sure how jamming picking issue could be related to preselection highlighting - even if an element will be highlighted, jamming picking will still not allow to pick it in a predictable way

Pull request closed

Sign in to join this conversation.
No reviewers
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset System
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Code Documentation
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Viewport & EEVEE
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Asset Browser Project
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Module
Viewport & EEVEE
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Severity
High
Severity
Low
Severity
Normal
Severity
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
3 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#128033
No description provided.