diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc index 3170d0aecac..5e551ff66e8 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc @@ -528,29 +528,33 @@ static void node_geo_exec(GeoNodeExecParams params) mode == GEO_NODE_CURVE_SAMPLE_FACTOR ? "Factor" : "Length"); GField src_values_field = get_input_attribute_field(params, data_type); - auto sample_fn = std::make_unique( - std::move(geometry_set), mode, std::move(src_values_field)); - std::shared_ptr sample_op; if (curves.curves_num() == 1) { - sample_op = FieldOperation::Create(std::move(sample_fn), - {fn::make_constant_field(0), std::move(length_field)}); + sample_op = FieldOperation::Create( + std::make_unique( + std::move(geometry_set), mode, std::move(src_values_field)), + {fn::make_constant_field(0), std::move(length_field)}); } else { - Field curve_index; - Field length_in_curve; if (storage.use_all_curves) { auto index_fn = std::make_unique( curve_accumulated_lengths(curves), mode); auto index_op = FieldOperation::Create(std::move(index_fn), {std::move(length_field)}); - curve_index = Field(index_op, 0); - length_in_curve = Field(index_op, 1); + Field curve_index = Field(index_op, 0); + Field length_in_curve = Field(index_op, 1); + sample_op = FieldOperation::Create( + std::make_unique( + std::move(geometry_set), GEO_NODE_CURVE_SAMPLE_LENGTH, std::move(src_values_field)), + {std::move(curve_index), std::move(length_in_curve)}); } else { - curve_index = params.extract_input>("Curve Index"); - length_in_curve = std::move(length_field); + Field curve_index = params.extract_input>("Curve Index"); + Field length_in_curve = std::move(length_field); + sample_op = FieldOperation::Create( + std::make_unique( + std::move(geometry_set), mode, std::move(src_values_field)), + {std::move(curve_index), std::move(length_in_curve)}); } - sample_op = FieldOperation::Create(std::move(sample_fn), {curve_index, length_in_curve}); } params.set_output("Position", Field(sample_op, 0));