From 5ad4ca4e02236dbd2a188789bfef196c62d9047e Mon Sep 17 00:00:00 2001 From: Johnny Matthews Date: Mon, 22 Nov 2021 12:07:59 -0600 Subject: [PATCH] CurveEval: Add total_length() and total_control_point_size() methods Add the following methods to the CurveEval class: total_length() : returns the total length of the curve without needing to allocate a new array total_control_point_size() : returns the total number of control points without needing to allocate a new array --- source/blender/blenkernel/BKE_spline.hh | 3 +++ source/blender/blenkernel/intern/curve_eval.cc | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/source/blender/blenkernel/BKE_spline.hh b/source/blender/blenkernel/BKE_spline.hh index c332e9a8dac..67eaa7c12c9 100644 --- a/source/blender/blenkernel/BKE_spline.hh +++ b/source/blender/blenkernel/BKE_spline.hh @@ -580,6 +580,9 @@ struct CurveEval { blender::Array evaluated_point_offsets() const; blender::Array accumulated_spline_lengths() const; + float total_length() const; + int total_control_point_size() const; + void mark_cache_invalid(); void assert_valid_point_attributes() const; diff --git a/source/blender/blenkernel/intern/curve_eval.cc b/source/blender/blenkernel/intern/curve_eval.cc index ff0478f2543..163f8b02b85 100644 --- a/source/blender/blenkernel/intern/curve_eval.cc +++ b/source/blender/blenkernel/intern/curve_eval.cc @@ -109,6 +109,24 @@ void CurveEval::bounds_min_max(float3 &min, float3 &max, const bool use_evaluate } } +float CurveEval::total_length() const +{ + float length = 0.0f; + for (const SplinePtr &spline : this->splines()) { + length += spline->length(); + } + return length; +} + +int CurveEval::total_control_point_size() const +{ + int count = 0; + for (const SplinePtr &spline : this->splines()) { + count += spline->size(); + } + return count; +} + /** * Return the start indices for each of the curve spline's control points, if they were part * of a flattened array. This can be used to facilitate parallelism by avoiding the need to