Fix T87823: Select similar doesn't work with small faces

FLT_EPSILON was added to the threshold when comparing values,
this caused problems selecting similar small faces since the areas
can be very small in this case.

Also increase the displayed precision so it's easier to use
smaller numbers.
This commit is contained in:
Campbell Barton 2021-04-29 17:16:23 +10:00
parent d83f5f0f01
commit 7a475a89eb
Notes: blender-bot 2023-02-14 02:30:10 +01:00
Referenced by issue #87823, Select Similar: Area precission problem in small scale geometry (should take Units into account?)
2 changed files with 6 additions and 4 deletions

View File

@ -1325,7 +1325,9 @@ void MESH_OT_select_similar(wmOperatorType *ot)
RNA_def_enum(ot->srna, "compare", prop_similar_compare_types, SIM_CMP_EQ, "Compare", "");
RNA_def_float(ot->srna, "threshold", 0.0f, 0.0f, 1.0f, "Threshold", "", 0.0f, 1.0f);
prop = RNA_def_float(ot->srna, "threshold", 0.0f, 0.0f, 1.0f, "Threshold", "", 0.0f, 1.0f);
/* Very small values are needed sometimes, similar area of small faces for e.g: see T87823 */
RNA_def_property_ui_range(prop, 0.0, 1.0, 0.01, 5);
}
/** \} */

View File

@ -88,11 +88,11 @@ int ED_select_similar_compare_float(const float delta, const float thresh, const
{
switch (compare) {
case SIM_CMP_EQ:
return (fabsf(delta) < thresh + FLT_EPSILON);
return (fabsf(delta) <= thresh);
case SIM_CMP_GT:
return ((delta + thresh) > -FLT_EPSILON);
return ((delta + thresh) >= 0.0);
case SIM_CMP_LT:
return ((delta - thresh) < FLT_EPSILON);
return ((delta - thresh) <= 0.0);
default:
BLI_assert_unreachable();
return 0;