From 0521272ab3817b599dec64639d081e04c236bddd Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Tue, 6 Jul 2021 20:42:21 -0500 Subject: Fix: Curve Resample Node: Copy attributes to 1 point results The curve resample node neglected to copy attributes to single point result splines. That could have caused errors if some of the splines in the result had only one point but others had more. --- .../nodes/geometry/nodes/node_geo_curve_resample.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_resample.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_resample.cc index fc65d1754e9..ad0c453c2af 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_resample.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_resample.cc @@ -87,6 +87,23 @@ static SplinePtr resample_spline(const Spline &input_spline, const int count) input_spline.tilts().first(), input_spline.radii().first()); output_spline->attributes.reallocate(1); + input_spline.attributes.foreach_attribute( + [&](StringRefNull name, const AttributeMetaData &meta_data) { + std::optional src = input_spline.attributes.get_for_read(name); + BLI_assert(src); + if (!output_spline->attributes.create(name, meta_data.data_type)) { + BLI_assert_unreachable(); + return false; + } + std::optional dst = output_spline->attributes.get_for_write(name); + if (!dst) { + BLI_assert_unreachable(); + return false; + } + src->type().copy_assign(src->data(), dst->data()); + return true; + }, + ATTR_DOMAIN_POINT); return output_spline; } -- cgit v1.2.3