Commit Graph

22 Commits

Author SHA1 Message Date
Dalai Felinto
c32b63f8fd Multi-Objects: Select similar face SIMFACE_AREA and SIMFACE_PERIMETER
Note: Not doing worldspace comparison for now. We would need to create new
BM_face_calc_area and BM_face_calc_perimeter equivalent functions for that.

Not sure if it is worth the trouble.
2018-09-25 19:18:30 -03:00
Dalai Felinto
3618646e71 Multi-Objects: Select similar face SIMFACE_MATERIAL
Note: Unlike 2.79 we are not comparing face->mat_nr, but the material itself.
On top og that, if the material slot is empty we are just ignoring this face.
2018-09-25 19:18:30 -03:00
Dalai Felinto
8990ad1b9c Multi-Objects: Select similar face SIMFACE_SIDES 2018-09-25 19:18:30 -03:00
Dalai Felinto
b75648694c Cleanup comments on select similar edge 2018-09-25 19:18:30 -03:00
Dalai Felinto
75eb947275 Multi-Objects: Select similar edge SIMEDGE_CREASE and SIMEDGE_CREASE
All edge options are done now.
2018-09-25 16:36:02 -03:00
2abbe1d125 Cleanup: skip translation to calculate length 2018-09-24 08:34:05 +10:00
0e65c4839c Cleanup: style 2018-09-24 08:25:51 +10:00
Dalai Felinto
502dbcf404 Select Similar: Cleanup - WITH_FREESYTLE 2018-09-21 16:32:24 -03:00
Dalai Felinto
09616c3f2f Multi-Objects: Select similar edge SIMEDGE_FREESTYLE
I'm not happy with #ifdef WITH_FREESTYLE everywhere.
But I will remove them in an upcoming commit
2018-09-21 16:28:25 -03:00
Dalai Felinto
eeeb469db2 Select Similar: Cleanup 2018-09-21 15:42:07 -03:00
Dalai Felinto
c2582bfc63 Select Similar: Skip hidden elements 2018-09-21 15:39:36 -03:00
Dalai Felinto
e8ec01dbb5 Multi-Objects: Select similar edge SIMEDGE_SEAM/SIMEDGE_SHARP
I'm not sure why we may want to sample both a sharp and an unsharp edges at the
same time, maybe to see if the selected edges all have the same values?

Either way, implemented as in 2.79. I also believe we may have a faster way to
select all the edges, but let's file this under optimizations to be done later.
2018-09-21 15:33:09 -03:00
Dalai Felinto
438e09dbbe MESH_OT_select_similar: Cleanup 2018-09-21 14:46:50 -03:00
Dalai Felinto
e406a9f305 Multi-objects: Select similar edge SIMEDGE_FACE_ANGLE
I'm not sure why the original implementation was only checking for equal
comparison but I'm doing the same here. It is a one line change if we
want to support LT/GT anyways.

Also "technically" we should compare the angles in the worldspace, since
different scales will result in different angles. Added as a TODO but
honestly I think this is overkill.
2018-09-21 14:46:50 -03:00
Dalai Felinto
35f659aeb4 Rename bm_sel_similar_cmp_short > select_similar_compare_LONG 2018-09-21 14:46:50 -03:00
Dalai Felinto
3e46bea46b Multi-objects: Select similar edge SIMEDGE_LENGTH
I'm using kdtree here but there is nothing preventing us from using a simple
float linked list with a sorting and finding "nearest" equivalents.

At least we are benefitting from bisecting as oppose to the original solution.

Also we need epsilon for the float comparisons.
2018-09-21 14:46:50 -03:00
Dalai Felinto
b38be90515 Multi-objects: Select similar edge SIMEDGE_DIR 2018-09-21 14:46:50 -03:00
Dalai Felinto
acc6c50d8a Multi-objects: Select similar edge SIMEDGE_FACE 2018-09-21 14:46:50 -03:00
Dalai Felinto
850fda2358 Select similar edge: Granular error message
This way we can implement them onw by one
2018-09-21 14:46:50 -03:00
4597589503 Cleanup: replace pointer/int casts with macros 2018-09-19 12:22:48 +10:00
Dalai Felinto
c0fb90ff9a Multi-Objects: Initial select similar support
Note: I had to add an epsilon on top of the threshould for SIMVERT_NORMAL.
Otherwise I was getting differences such as 0.000000something when comparing
supposed-to-be-identical normals.

The way I see it, the Threshold option is a user feature, where users can
control more or less what they want selected. While the epsilon is a
non-negotiable requirement for our float comparison here.

This includes support for:
* SIMVERT_NORMAL
* SIMVERT_FACE
* SIMVERT_EDGE

Not included and currently not supported/disabled:
* SIMVERT_VGROUP
* SIMEDGE_*
* SIMFACE_*

While we are working on this, we prevent users from using the non-ported modes.
Note: the bmo_similar.c file is still around, to be removed in the near future.

Everyone: Please fell free to jump in and help tackling the missing modes.

For details on the implementation discussion:
https://developer.blender.org/D3674
2018-09-18 22:42:07 -03:00
Dalai Felinto
a1acff5459 Move select similar to its own file 2018-09-18 22:42:07 -03:00