diff options
Diffstat (limited to 'source/blender/blenlib/intern/math_geom_inline.c')
-rw-r--r-- | source/blender/blenlib/intern/math_geom_inline.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/source/blender/blenlib/intern/math_geom_inline.c b/source/blender/blenlib/intern/math_geom_inline.c index ba9770e1bd1..f32b477787b 100644 --- a/source/blender/blenlib/intern/math_geom_inline.c +++ b/source/blender/blenlib/intern/math_geom_inline.c @@ -158,4 +158,31 @@ MINLINE int min_axis_v3(const float vec[3]) ((y < z) ? 1 : 2)); } +/** + * Simple method to find how many tri's we need when we already know the corner+poly count. + * + * Formula is: + * + * tri = ((corner_count / poly_count) - 2) * poly_count; + * + * Use doubles since this is used for allocating and we + * don't want float precision to give incorrect results. + * + * \param poly_count The number of ngon's/tris (1-2 sided faces will give incorrect results) + * \param corner_count - also known as loops in BMesh/DNA + */ +MINLINE int poly_to_tri_count(const int poly_count, const int corner_count) +{ + if (poly_count != 0) { + const double poly_count_d = (double)poly_count; + const double corner_count_d = (double)corner_count; + BLI_assert(poly_count > 0); + BLI_assert(corner_count > 0); + return (int)((((corner_count_d / poly_count_d) - 2.0) * poly_count_d) + 0.5); + } + else { + return 0; + } +} + #endif /* __MATH_GEOM_INLINE_C__ */ |