Since D3284 was inactive for a long time, I figured I could finish this.
This revision also gives warning when there are no selected faces or when
selected faces are invalid.
Changes from reviewer (Dalai Felinto) :
* Code style
* Fix checking for ngons (BM_ITER_MESH is a for loop, you need to break from it
before continuing the object iteration loop).
Differential Revision: https://developer.blender.org/D3659
- Add orientation option (defaults to local, as 2.7x does)
can optionally use global, cursor, view... etc.
- Fix typo which caused select flush to fail.
- Fix for instanced objects (was only checking one instance).
- Only tag for changes if a change is made.
- Skip meshes with all vertices selected.
Now that this operator is working properly (in world space axis), it can
be ported for multi object support.
The issue of only running on redo is still present though, to be investigated
later.
Not, I tried using `dist_signed_squared_to_plane_v3` but profiling showed that
it is 50% slower than using regular `mul_v3_m4v3` for the verts.
I managed to get this number closer when manually inlining all the functions
called by `dist_signed_squared_to_plane_v3`. But still `mul_v3_m4v3` was better
and it makes the code simpler to understand.
Also I'm changing the default mode to positive, no idea why it was negative as
default in the first place.
Last but not least, the operator only works well on redo. This was a problem
before, not introduced by this patch.
This fully works as "expected", however it seems strange when
there is no selected vertex in the non-active object.
In 2.7x if you join two monkeys, select a vertex in one of them and
try to use this operator in the other it will select the lonely newly
selected vertex.
If you split both monkeys and do this in 2.8 while multi-editing them
you won't get nothing when trying to ctrl+RMB any vertex in the monkey
object that has nothing selected yet.
I propose to have this addressed in an upcoming patch where we always
select a vertex if no vertex was previously selected.
Supporting the ctrl+click operator for multiple objects.
When no vertex is selected we only add a new vertex for the active object.
I'm using all the selected vertices to calculate the center of transformation
regardless of the object they come from. This way we have the same effect if the
meshes are joined together or kept as individual objects.
Thanks Campbell Barton for reviewing the patch.
The loop cut tool now works as expected for the tool-system,
where hovering previews the loop and clicking activates.
This uses a new gizmo type to pre-select the edge.
Add tool options to control how select operates (add/sub/set/and/xor).
Note: edit mode armature select still needs to support all options,
this is complicated by how it handles partial end-point selection.
To get consistent, user-expected results here, we need to 'fake'
starting immediately after a 'skip' block (such that we start with a
full block of selected elements).
Same issue affected vertices and edges selection of course, did not
check the other usages of WM_operator_properties_checker_interval_test()
though.
This also include a small optimisation (remove of a double loop and half of
the memory allocation for hit points)
This should fix T55946 Crash using knife tool on mesh with large number of
vertices.
Tried with a 500K vert suzanne and it seems fine.