From 67b657f07c96c5782ebf603ab36af607168d7acb Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Tue, 14 Dec 2021 18:57:45 -0600 Subject: Fix T94082: Curve to point empty evaluated NURBS crash This is basically the same as rBee4ed99866fbb7ab04, the fix is simply to check if the spline has evaluated points when deciding the offsets into the result points array. --- .../nodes/geometry/nodes/node_geo_curve_to_points.cc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc index 5c12a4bf7bd..2f9dfa8158b 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc @@ -94,9 +94,14 @@ static Array calculate_spline_point_offsets(GeoNodeExecParams ¶ms, return {0}; } Array offsets(size + 1); - for (const int i : offsets.index_range()) { - offsets[i] = count * i; + int offset = 0; + for (const int i : IndexRange(size)) { + offsets[i] = offset; + if (splines[i]->evaluated_points_size() > 0) { + offset += count; + } } + offsets.last() = offset; return offsets; } case GEO_NODE_CURVE_RESAMPLE_LENGTH: { @@ -106,7 +111,9 @@ static Array calculate_spline_point_offsets(GeoNodeExecParams ¶ms, int offset = 0; for (const int i : IndexRange(size)) { offsets[i] = offset; - offset += splines[i]->length() / resolution + 1; + if (splines[i]->evaluated_points_size() > 0) { + offset += splines[i]->length() / resolution + 1; + } } offsets.last() = offset; return offsets; -- cgit v1.2.3