diff options
Diffstat (limited to 'source/blender/blenkernel/intern/curve_eval.cc')
-rw-r--r-- | source/blender/blenkernel/intern/curve_eval.cc | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/curve_eval.cc b/source/blender/blenkernel/intern/curve_eval.cc index ea84766943d..8eec7f5dfab 100644 --- a/source/blender/blenkernel/intern/curve_eval.cc +++ b/source/blender/blenkernel/intern/curve_eval.cc @@ -143,6 +143,23 @@ blender::Array<int> CurveEval::evaluated_point_offsets() const return offsets; } +/** + * Return the accumulated length at the start of every spline in the curve. + * + * \note The result is one longer than the spline count; the last element is the total length. + */ +blender::Array<float> CurveEval::accumulated_spline_lengths() const +{ + Array<float> spline_lengths(splines_.size() + 1); + float spline_length = 0.0f; + for (const int i : splines_.index_range()) { + spline_lengths[i] = spline_length; + spline_length += splines_[i]->length(); + } + spline_lengths.last() = spline_length; + return spline_lengths; +} + static BezierSpline::HandleType handle_type_from_dna_bezt(const eBezTriple_Handle dna_handle_type) { switch (dna_handle_type) { |