Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2020-12-08 04:14:27 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-12-08 04:20:27 +0300
commit5f1a155a5ef39a4db144b38a607c19b763f965a3 (patch)
tree09b4783476e0e65a2d6410c48d3b06ef3df46921 /source/blender/blenkernel/intern/curve.c
parentab9952e55fe1bfe84e157cd25c90f9bed3bea6aa (diff)
Fix T83117: Curve bevel not handle aligned at end-points
Caused by fix for T80742, 4987b7d347a885916916a888c18401ea2fe552f4. Keep the fix that calculates the start/end direction from adjacent points but only use it as a fallback.
Diffstat (limited to 'source/blender/blenkernel/intern/curve.c')
-rw-r--r--source/blender/blenkernel/intern/curve.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index 2df9f362b9c..ebce28c4e23 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -2185,19 +2185,28 @@ static void bevel_list_calc_bisect(BevList *bl)
bevp2++;
}
+ /* In the unlikely situation that handles define a zeroed direction,
+ * calculate it from the adjacent points, see T80742.
+ *
+ * Only do this as a fallback since we typically want the end-point directions
+ * to be exactly aligned with the handles at the end-point, see T83117. */
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);
+ if (UNLIKELY(is_zero_v3(bevp0->dir))) {
+ 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);
+ if (UNLIKELY(is_zero_v3(bevp1->dir))) {
+ sub_v3_v3v3(bevp1->dir, bevp1->vec, bevp0->vec);
+ if (normalize_v3(bevp1->dir) == 0.0f) {
+ copy_v3_v3(bevp1->dir, bevp0->dir);
+ }
}
}
}