From b43077ba3a2991096aa6484fcccd94d68998fb11 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Thu, 28 Oct 2021 18:23:55 -0500 Subject: Fix T92552: Spline evaluation with all points at the origin In this case, the uniform index sampling loop would fail to assign any data to the samples, so fill the rest with the largest value possible, corresponding to the end of the spline. Animation Nodes has the same fix for this case. --- source/blender/blenkernel/intern/spline_base.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/blender/blenkernel/intern/spline_base.cc b/source/blender/blenkernel/intern/spline_base.cc index 663c1951ba3..bbe4e0aab7b 100644 --- a/source/blender/blenkernel/intern/spline_base.cc +++ b/source/blender/blenkernel/intern/spline_base.cc @@ -486,6 +486,12 @@ Array Spline::sample_uniform_index_factors(const int samples_size) const prev_length = length; } + /* Zero lengths or float innacuracies can cause invalid values, or simply + * skip some, so set the values that weren't completed in the main loop. */ + for (const int i : IndexRange(i_sample, samples_size - i_sample)) { + samples[i] = float(samples_size); + } + if (!is_cyclic_) { /* In rare cases this can prevent overflow of the stored index. */ samples.last() = lengths.size(); -- cgit v1.2.3