diff options
author | Campbell Barton <ideasman42@gmail.com> | 2020-11-05 10:15:45 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2020-11-05 10:15:45 +0300 |
commit | 4987b7d347a885916916a888c18401ea2fe552f4 (patch) | |
tree | e691beed7b8b7d479aeeb31a3b5824d15c179baf /source/blender/blenkernel/intern/curve.c | |
parent | 60c3ef3d61836a5b05ef7796544c256fb5e15c74 (diff) |
Fix T80742: curve bevel fails with zero length handles at end-point
Initialize the direction on the first/last points of the curve.
The fix from 23a4149778c87 exposed this error.
Diffstat (limited to 'source/blender/blenkernel/intern/curve.c')
-rw-r--r-- | source/blender/blenkernel/intern/curve.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c index b2ebb56d828..bc4cb231153 100644 --- a/source/blender/blenkernel/intern/curve.c +++ b/source/blender/blenkernel/intern/curve.c @@ -2202,6 +2202,22 @@ static void bevel_list_calc_bisect(BevList *bl) bevp1 = bevp2; bevp2++; } + + if (is_cyclic == false) { + bevp0 = &bl->bevpoints[0]; + bevp1 = &bl->bevpoints[1]; + sub_v3_v3v3(bevp0->dir, bevp1->vec, bevp0->vec); + if (normalize_v3(bevp0->dir) == 0.0f) { + copy_v3_v3(bevp0->dir, bevp1->dir); + } + + bevp0 = &bl->bevpoints[bl->nr - 2]; + bevp1 = &bl->bevpoints[bl->nr - 1]; + sub_v3_v3v3(bevp1->dir, bevp1->vec, bevp0->vec); + if (normalize_v3(bevp1->dir) == 0.0f) { + copy_v3_v3(bevp1->dir, bevp0->dir); + } + } } static void bevel_list_flip_tangents(BevList *bl) { |