[Bf-blender-cvs] [f8738024939] temp-T96710-pbvh-pixels: Fix: Curve parameter node broken for Bezier curves after refactor

Hans Goudey noreply at git.blender.org
Fri Apr 8 11:07:45 CEST 2022


Commit: f873802493952eb05db8a1733d161680d8f44068
Author: Hans Goudey
Date:   Wed Apr 6 16:13:06 2022 -0500
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rBf873802493952eb05db8a1733d161680d8f44068

Fix: Curve parameter node broken for Bezier curves after refactor

The last length value was not initialized, and all length values were
moved one position towards the front of each curve incorrectly.
Also fix an assert when a curve only had a single point.

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

M	source/blender/blenkernel/BKE_curves.hh
M	source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc

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

diff --git a/source/blender/blenkernel/BKE_curves.hh b/source/blender/blenkernel/BKE_curves.hh
index b233a89c56d..4117f8b9bdc 100644
--- a/source/blender/blenkernel/BKE_curves.hh
+++ b/source/blender/blenkernel/BKE_curves.hh
@@ -643,7 +643,9 @@ inline Span<float> CurvesGeometry::evaluated_lengths_for_curve(const int curve_i
 inline float CurvesGeometry::evaluated_length_total_for_curve(const int curve_index,
                                                               const bool cyclic) const
 {
-  return this->evaluated_lengths_for_curve(curve_index, cyclic).last();
+  const Span<float> lengths = this->evaluated_lengths_for_curve(curve_index, cyclic);
+  /* Check for curves that have no evaluated segments. */
+  return lengths.is_empty() ? 0.0f : lengths.last();
 }
 
 /** \} */
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc
index 62fae8b8eca..be17918609f 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_spline_parameter.cc
@@ -75,8 +75,8 @@ static Array<float> curve_length_point_domain(const bke::CurvesGeometry &curves)
       switch (types[i_curve]) {
         case CURVE_TYPE_CATMULL_ROM: {
           const int resolution = resolutions[i_curve];
-          for (const int i : IndexRange(points.size()).drop_front(1).drop_back(1)) {
-            lengths[i] = evaluated_lengths[resolution * i - 1];
+          for (const int i : IndexRange(points.size()).drop_back(1)) {
+            lengths[i + 1] = evaluated_lengths[resolution * i - 1];
           }
           break;
         }
@@ -85,8 +85,8 @@ static Array<float> curve_length_point_domain(const bke::CurvesGeometry &curves)
           break;
         case CURVE_TYPE_BEZIER: {
           const Span<int> offsets = curves.bezier_evaluated_offsets_for_curve(i_curve);
-          for (const int i : IndexRange(points.size()).drop_front(1).drop_back(1)) {
-            lengths[i] = evaluated_lengths[offsets[i] - 1];
+          for (const int i : IndexRange(points.size()).drop_back(1)) {
+            lengths[i + 1] = evaluated_lengths[offsets[i] - 1];
           }
           break;
         }



More information about the Bf-blender-cvs mailing list