diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-12-28 10:17:55 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-12-28 10:23:59 +0400 |
commit | 6f5ced4a3028875e1d90b6d2f93af557e4fa16fe (patch) | |
tree | 6438830cfbdf59bb5829337744a7a2a10e1d4e2f /source/blender/blenlib/intern/freetypefont.c | |
parent | 114284b1fbec7c01092ade3ade2bae5464c7f7ac (diff) |
Math Lib: add dist_squared_to_line_v2, avoids sqrt in scanfill and 3d-text
Diffstat (limited to 'source/blender/blenlib/intern/freetypefont.c')
-rw-r--r-- | source/blender/blenlib/intern/freetypefont.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/source/blender/blenlib/intern/freetypefont.c b/source/blender/blenlib/intern/freetypefont.c index 10d574e56b4..4f703d2d148 100644 --- a/source/blender/blenlib/intern/freetypefont.c +++ b/source/blender/blenlib/intern/freetypefont.c @@ -64,6 +64,8 @@ static FT_Error err; static void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vfd) { + const float eps = 0.0001f; + const float eps_sq = eps * eps; /* Blender */ struct Nurb *nu; struct VChar *che; @@ -260,18 +262,19 @@ static void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vf } /* get the handles that are aligned, tricky... - * dist_to_line_v2, check if the three beztriple points are on one line - * len_squared_v2v2, see if there's a distance between the three points - * len_squared_v2v2 again, to check the angle between the handles - * finally, check if one of them is a vector handle */ + * - check if one of them is a vector handle. + * - dist_squared_to_line_v2, check if the three beztriple points are on one line + * - len_squared_v2v2, see if there's a distance between the three points + * - len_squared_v2v2 again, to check the angle between the handles + */ if ((bezt->h1 != HD_VECT && bezt->h2 != HD_VECT) && - (dist_to_line_v2(bezt->vec[0], bezt->vec[1], bezt->vec[2]) < 0.001f) && - (len_squared_v2v2(bezt->vec[0], bezt->vec[1]) > 0.0001f * 0.0001f) && - (len_squared_v2v2(bezt->vec[1], bezt->vec[2]) > 0.0001f * 0.0001f) && - (len_squared_v2v2(bezt->vec[0], bezt->vec[2]) > 0.0002f * 0.0001f) && + (dist_squared_to_line_v2(bezt->vec[0], bezt->vec[1], bezt->vec[2]) < (0.001f * 0.001f)) && + (len_squared_v2v2(bezt->vec[0], bezt->vec[1]) > eps_sq) && + (len_squared_v2v2(bezt->vec[1], bezt->vec[2]) > eps_sq) && + (len_squared_v2v2(bezt->vec[0], bezt->vec[2]) > eps_sq) && (len_squared_v2v2(bezt->vec[0], bezt->vec[2]) > max_ff(len_squared_v2v2(bezt->vec[0], bezt->vec[1]), - len_squared_v2v2(bezt->vec[1], bezt->vec[2])))) + len_squared_v2v2(bezt->vec[1], bezt->vec[2])))) { bezt->h1 = bezt->h2 = HD_ALIGN; } |