[Bf-blender-cvs] [5ad4ca4e022] master: CurveEval: Add total_length() and total_control_point_size() methods

Johnny Matthews noreply at git.blender.org
Mon Nov 22 19:08:42 CET 2021


Commit: 5ad4ca4e02236dbd2a188789bfef196c62d9047e
Author: Johnny Matthews
Date:   Mon Nov 22 12:07:59 2021 -0600
Branches: master
https://developer.blender.org/rB5ad4ca4e02236dbd2a188789bfef196c62d9047e

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

===================================================================

M	source/blender/blenkernel/BKE_spline.hh
M	source/blender/blenkernel/intern/curve_eval.cc

===================================================================

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<int> evaluated_point_offsets() const;
   blender::Array<float> 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



More information about the Bf-blender-cvs mailing list