From 4987b7d347a885916916a888c18401ea2fe552f4 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 5 Nov 2020 18:15:45 +1100 Subject: 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. --- source/blender/blenkernel/intern/curve.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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) { -- cgit v1.2.3