From 7042db684f2a9fbad4f068a5b0464083ab585757 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 1 Feb 2024 12:43:35 +0100 Subject: [PATCH] Cleanup: move some geometry field inputs to more correct header --- .../blender/blenkernel/BKE_geometry_fields.hh | 41 ++++++ .../blenkernel/intern/geometry_fields.cc | 126 ++++++++++++++++++ .../nodes/geometry/node_geometry_util.hh | 39 ------ .../node_geo_curve_topology_curve_of_point.cc | 4 +- ...node_geo_curve_topology_points_of_curve.cc | 2 +- .../nodes/node_geo_evaluate_at_index.cc | 40 +----- .../nodes/node_geo_evaluate_on_domain.cc | 67 +--------- .../node_geo_mesh_topology_corners_of_edge.cc | 2 +- .../node_geo_mesh_topology_corners_of_face.cc | 2 +- ...ode_geo_mesh_topology_corners_of_vertex.cc | 2 +- .../node_geo_mesh_topology_edges_of_corner.cc | 4 +- .../node_geo_mesh_topology_edges_of_vertex.cc | 2 +- .../node_geo_mesh_topology_face_of_corner.cc | 4 +- ...node_geo_mesh_topology_vertex_of_corner.cc | 2 +- .../geometry/nodes/node_geo_sample_index.cc | 33 +---- .../nodes/node_geo_set_curve_normal.cc | 14 +- 16 files changed, 189 insertions(+), 195 deletions(-) diff --git a/source/blender/blenkernel/BKE_geometry_fields.hh b/source/blender/blenkernel/BKE_geometry_fields.hh index 103e0837cbf..acc40546629 100644 --- a/source/blender/blenkernel/BKE_geometry_fields.hh +++ b/source/blender/blenkernel/BKE_geometry_fields.hh @@ -422,6 +422,47 @@ class CurveLengthFieldInput final : public CurvesFieldInput { std::optional preferred_domain(const bke::CurvesGeometry &curves) const final; }; +class EvaluateAtIndexInput final : public bke::GeometryFieldInput { + private: + fn::Field index_field_; + fn::GField value_field_; + AttrDomain value_field_domain_; + + public: + EvaluateAtIndexInput(fn::Field index_field, + fn::GField value_field, + AttrDomain value_field_domain); + + GVArray get_varray_for_context(const bke::GeometryFieldContext &context, + const IndexMask &mask) const final; + + std::optional preferred_domain(const GeometryComponent & /*component*/) const final + { + return value_field_domain_; + } +}; + +void copy_with_checked_indices(const GVArray &src, + const VArray &indices, + const IndexMask &mask, + GMutableSpan dst); + +class EvaluateOnDomainInput final : public bke::GeometryFieldInput { + private: + fn::GField src_field_; + AttrDomain src_domain_; + + public: + EvaluateOnDomainInput(fn::GField field, AttrDomain domain); + + GVArray get_varray_for_context(const bke::GeometryFieldContext &context, + const IndexMask & /*mask*/) const final; + void for_each_field_input_recursive(FunctionRef fn) const override; + + std::optional preferred_domain( + const GeometryComponent & /*component*/) const override; +}; + bool try_capture_field_on_geometry(MutableAttributeAccessor attributes, const fn::FieldContext &field_context, const AttributeIDRef &attribute_id, diff --git a/source/blender/blenkernel/intern/geometry_fields.cc b/source/blender/blenkernel/intern/geometry_fields.cc index b9eab26b581..e9d25f942a9 100644 --- a/source/blender/blenkernel/intern/geometry_fields.cc +++ b/source/blender/blenkernel/intern/geometry_fields.cc @@ -594,6 +594,132 @@ std::optional NamedLayerSelectionFieldInput::preferred_domain( return AttrDomain::Layer; } +template +void copy_with_checked_indices(const VArray &src, + const VArray &indices, + const IndexMask &mask, + MutableSpan dst) +{ + const IndexRange src_range = src.index_range(); + devirtualize_varray2(src, indices, [&](const auto src, const auto indices) { + mask.foreach_index(GrainSize(4096), [&](const int i) { + const int index = indices[i]; + if (src_range.contains(index)) { + dst[i] = src[index]; + } + else { + dst[i] = {}; + } + }); + }); +} + +void copy_with_checked_indices(const GVArray &src, + const VArray &indices, + const IndexMask &mask, + GMutableSpan dst) +{ + bke::attribute_math::convert_to_static_type(src.type(), [&](auto dummy) { + using T = decltype(dummy); + copy_with_checked_indices(src.typed(), indices, mask, dst.typed()); + }); +} + +EvaluateAtIndexInput::EvaluateAtIndexInput(fn::Field index_field, + fn::GField value_field, + AttrDomain value_field_domain) + : bke::GeometryFieldInput(value_field.cpp_type(), "Evaluate at Index"), + index_field_(std::move(index_field)), + value_field_(std::move(value_field)), + value_field_domain_(value_field_domain) +{ +} + +GVArray EvaluateAtIndexInput::get_varray_for_context(const bke::GeometryFieldContext &context, + const IndexMask &mask) const +{ + const std::optional attributes = context.attributes(); + if (!attributes) { + return {}; + } + + const bke::GeometryFieldContext value_context{context, value_field_domain_}; + fn::FieldEvaluator value_evaluator{value_context, attributes->domain_size(value_field_domain_)}; + value_evaluator.add(value_field_); + value_evaluator.evaluate(); + const GVArray &values = value_evaluator.get_evaluated(0); + + fn::FieldEvaluator index_evaluator{context, &mask}; + index_evaluator.add(index_field_); + index_evaluator.evaluate(); + const VArray indices = index_evaluator.get_evaluated(0); + + GArray<> dst_array(values.type(), mask.min_array_size()); + copy_with_checked_indices(values, indices, mask, dst_array); + return GVArray::ForGArray(std::move(dst_array)); +} + +EvaluateOnDomainInput::EvaluateOnDomainInput(fn::GField field, AttrDomain domain) + : bke::GeometryFieldInput(field.cpp_type(), "Evaluate on Domain"), + src_field_(std::move(field)), + src_domain_(domain) +{ +} + +GVArray EvaluateOnDomainInput::get_varray_for_context(const bke::GeometryFieldContext &context, + const IndexMask & /*mask*/) const +{ + const AttrDomain dst_domain = context.domain(); + const int dst_domain_size = context.attributes()->domain_size(dst_domain); + const CPPType &cpp_type = src_field_.cpp_type(); + + if (context.type() == GeometryComponent::Type::GreasePencil && + (src_domain_ == AttrDomain::Layer) != (dst_domain == AttrDomain::Layer)) + { + /* Evaluate field just for the current layer. */ + if (src_domain_ == AttrDomain::Layer) { + const bke::GeometryFieldContext src_domain_context{context, AttrDomain::Layer}; + const int layer_index = context.grease_pencil_layer_index(); + + const IndexMask single_layer_mask = IndexRange(layer_index, 1); + fn::FieldEvaluator value_evaluator{src_domain_context, &single_layer_mask}; + value_evaluator.add(src_field_); + value_evaluator.evaluate(); + + const GVArray &values = value_evaluator.get_evaluated(0); + + BUFFER_FOR_CPP_TYPE_VALUE(cpp_type, value); + BLI_SCOPED_DEFER([&]() { cpp_type.destruct(value); }); + values.get_to_uninitialized(layer_index, value); + return GVArray::ForSingle(cpp_type, dst_domain_size, value); + } + /* We don't adapt from curve to layer domain currently. */ + return GVArray::ForSingleDefault(cpp_type, dst_domain_size); + } + + const bke::AttributeAccessor attributes = *context.attributes(); + + const bke::GeometryFieldContext other_domain_context{context, src_domain_}; + const int64_t src_domain_size = attributes.domain_size(src_domain_); + GArray<> values(cpp_type, src_domain_size); + fn::FieldEvaluator value_evaluator{other_domain_context, src_domain_size}; + value_evaluator.add_with_destination(src_field_, values.as_mutable_span()); + value_evaluator.evaluate(); + return attributes.adapt_domain(GVArray::ForGArray(std::move(values)), src_domain_, dst_domain); +} + +void EvaluateOnDomainInput::for_each_field_input_recursive( + FunctionRef fn) const +{ + src_field_.node().for_each_field_input_recursive(fn); +} + +std::optional EvaluateOnDomainInput::preferred_domain( + const GeometryComponent & /*component*/) const +{ + return src_domain_; +} + } // namespace blender::bke /* -------------------------------------------------------------------- */ diff --git a/source/blender/nodes/geometry/node_geometry_util.hh b/source/blender/nodes/geometry/node_geometry_util.hh index ca2064185bc..ab42f9fb838 100644 --- a/source/blender/nodes/geometry/node_geometry_util.hh +++ b/source/blender/nodes/geometry/node_geometry_util.hh @@ -61,45 +61,6 @@ void get_closest_in_bvhtree(BVHTreeFromMesh &tree_data, int apply_offset_in_cyclic_range(IndexRange range, int start_index, int offset); -class EvaluateAtIndexInput final : public bke::GeometryFieldInput { - private: - Field index_field_; - GField value_field_; - AttrDomain value_field_domain_; - - public: - EvaluateAtIndexInput(Field index_field, GField value_field, AttrDomain value_field_domain); - - GVArray get_varray_for_context(const bke::GeometryFieldContext &context, - const IndexMask &mask) const final; - - std::optional preferred_domain(const GeometryComponent & /*component*/) const final - { - return value_field_domain_; - } -}; - -class EvaluateOnDomainInput final : public bke::GeometryFieldInput { - private: - GField src_field_; - AttrDomain src_domain_; - - public: - EvaluateOnDomainInput(GField field, AttrDomain domain); - - GVArray get_varray_for_context(const bke::GeometryFieldContext &context, - const IndexMask & /*mask*/) const final; - void for_each_field_input_recursive(FunctionRef fn) const override; - - std::optional preferred_domain( - const GeometryComponent & /*component*/) const override; -}; - -void copy_with_checked_indices(const GVArray &src, - const VArray &indices, - const IndexMask &mask, - GMutableSpan dst); - void mix_baked_data_item(eNodeSocketDatatype socket_type, void *prev, const void *next, diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_topology_curve_of_point.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_topology_curve_of_point.cc index c13d7518d67..ac39cecd3a3 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_topology_curve_of_point.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_topology_curve_of_point.cc @@ -100,12 +100,12 @@ static void node_geo_exec(GeoNodeExecParams params) if (params.output_is_required("Curve Index")) { params.set_output( "Curve Index", - Field(std::make_shared( + Field(std::make_shared( point_index, Field(std::make_shared()), AttrDomain::Point))); } if (params.output_is_required("Index in Curve")) { params.set_output("Index in Curve", - Field(std::make_shared( + Field(std::make_shared( point_index, Field(std::make_shared()), AttrDomain::Point))); diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc index 0665e505057..26eedbfe834 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_topology_points_of_curve.cc @@ -223,7 +223,7 @@ static void node_geo_exec(GeoNodeExecParams params) const Field curve_index = params.extract_input>("Curve Index"); if (params.output_is_required("Total")) { params.set_output("Total", - Field(std::make_shared( + Field(std::make_shared( curve_index, Field(std::make_shared()), AttrDomain::Curve))); diff --git a/source/blender/nodes/geometry/nodes/node_geo_evaluate_at_index.cc b/source/blender/nodes/geometry/nodes/node_geo_evaluate_at_index.cc index 638635f7f1f..d1d0f79177a 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_evaluate_at_index.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_evaluate_at_index.cc @@ -17,44 +17,6 @@ #include "NOD_socket_search_link.hh" -namespace blender::nodes { - -EvaluateAtIndexInput::EvaluateAtIndexInput(Field index_field, - GField value_field, - AttrDomain value_field_domain) - : bke::GeometryFieldInput(value_field.cpp_type(), "Evaluate at Index"), - index_field_(std::move(index_field)), - value_field_(std::move(value_field)), - value_field_domain_(value_field_domain) -{ -} - -GVArray EvaluateAtIndexInput::get_varray_for_context(const bke::GeometryFieldContext &context, - const IndexMask &mask) const -{ - const std::optional attributes = context.attributes(); - if (!attributes) { - return {}; - } - - const bke::GeometryFieldContext value_context{context, value_field_domain_}; - FieldEvaluator value_evaluator{value_context, attributes->domain_size(value_field_domain_)}; - value_evaluator.add(value_field_); - value_evaluator.evaluate(); - const GVArray &values = value_evaluator.get_evaluated(0); - - FieldEvaluator index_evaluator{context, &mask}; - index_evaluator.add(index_field_); - index_evaluator.evaluate(); - const VArray indices = index_evaluator.get_evaluated(0); - - GArray<> dst_array(values.type(), mask.min_array_size()); - copy_with_checked_indices(values, indices, mask, dst_array); - return GVArray::ForGArray(std::move(dst_array)); -} - -} // namespace blender::nodes - namespace blender::nodes::node_geo_evaluate_at_index_cc { static void node_declare(NodeDeclarationBuilder &b) @@ -109,7 +71,7 @@ static void node_geo_exec(GeoNodeExecParams params) const bNode &node = params.node(); const AttrDomain domain = AttrDomain(node.custom1); - GField output_field{std::make_shared( + GField output_field{std::make_shared( params.extract_input>("Index"), params.extract_input("Value"), domain)}; params.set_output("Value", std::move(output_field)); } diff --git a/source/blender/nodes/geometry/nodes/node_geo_evaluate_on_domain.cc b/source/blender/nodes/geometry/nodes/node_geo_evaluate_on_domain.cc index 5d131959f49..4086ff5fb3d 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_evaluate_on_domain.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_evaluate_on_domain.cc @@ -19,71 +19,6 @@ #include "NOD_socket_search_link.hh" -namespace blender::nodes { - -EvaluateOnDomainInput::EvaluateOnDomainInput(GField field, AttrDomain domain) - : bke::GeometryFieldInput(field.cpp_type(), "Evaluate on Domain"), - src_field_(std::move(field)), - src_domain_(domain) -{ -} - -GVArray EvaluateOnDomainInput::get_varray_for_context(const bke::GeometryFieldContext &context, - const IndexMask & /*mask*/) const -{ - const AttrDomain dst_domain = context.domain(); - const int dst_domain_size = context.attributes()->domain_size(dst_domain); - const CPPType &cpp_type = src_field_.cpp_type(); - - if (context.type() == GeometryComponent::Type::GreasePencil && - (src_domain_ == AttrDomain::Layer) != (dst_domain == AttrDomain::Layer)) - { - /* Evaluate field just for the current layer. */ - if (src_domain_ == AttrDomain::Layer) { - const bke::GeometryFieldContext src_domain_context{context, AttrDomain::Layer}; - const int layer_index = context.grease_pencil_layer_index(); - - const IndexMask single_layer_mask = IndexRange(layer_index, 1); - FieldEvaluator value_evaluator{src_domain_context, &single_layer_mask}; - value_evaluator.add(src_field_); - value_evaluator.evaluate(); - - const GVArray &values = value_evaluator.get_evaluated(0); - - BUFFER_FOR_CPP_TYPE_VALUE(cpp_type, value); - BLI_SCOPED_DEFER([&]() { cpp_type.destruct(value); }); - values.get_to_uninitialized(layer_index, value); - return GVArray::ForSingle(cpp_type, dst_domain_size, value); - } - /* We don't adapt from curve to layer domain currently. */ - return GVArray::ForSingleDefault(cpp_type, dst_domain_size); - } - - const bke::AttributeAccessor attributes = *context.attributes(); - - const bke::GeometryFieldContext other_domain_context{context, src_domain_}; - const int64_t src_domain_size = attributes.domain_size(src_domain_); - GArray<> values(cpp_type, src_domain_size); - FieldEvaluator value_evaluator{other_domain_context, src_domain_size}; - value_evaluator.add_with_destination(src_field_, values.as_mutable_span()); - value_evaluator.evaluate(); - return attributes.adapt_domain(GVArray::ForGArray(std::move(values)), src_domain_, dst_domain); -} - -void EvaluateOnDomainInput::for_each_field_input_recursive( - FunctionRef fn) const -{ - src_field_.node().for_each_field_input_recursive(fn); -} - -std::optional EvaluateOnDomainInput::preferred_domain( - const GeometryComponent & /*component*/) const -{ - return src_domain_; -} - -} // namespace blender::nodes - namespace blender::nodes::node_geo_evaluate_on_domain_cc { static void node_declare(NodeDeclarationBuilder &b) @@ -130,7 +65,7 @@ static void node_geo_exec(GeoNodeExecParams params) const AttrDomain domain = AttrDomain(node.custom1); GField src_field = params.extract_input("Value"); - GField dst_field{std::make_shared(std::move(src_field), domain)}; + GField dst_field{std::make_shared(std::move(src_field), domain)}; params.set_output("Value", std::move(dst_field)); } diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_edge.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_edge.cc index e1c46f8e0df..2c659b6ee24 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_edge.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_edge.cc @@ -173,7 +173,7 @@ static void node_geo_exec(GeoNodeExecParams params) const Field edge_index = params.extract_input>("Edge Index"); if (params.output_is_required("Total")) { params.set_output("Total", - Field(std::make_shared( + Field(std::make_shared( edge_index, Field(std::make_shared()), AttrDomain::Edge))); diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_face.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_face.cc index eca2e777a0c..13abbba0e23 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_face.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_face.cc @@ -175,7 +175,7 @@ static void node_geo_exec(GeoNodeExecParams params) const Field face_index = params.extract_input>("Face Index"); if (params.output_is_required("Total")) { params.set_output("Total", - Field(std::make_shared( + Field(std::make_shared( face_index, Field(std::make_shared()), AttrDomain::Face))); diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_vertex.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_vertex.cc index e69623738e9..82eef5b7d1d 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_vertex.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_corners_of_vertex.cc @@ -181,7 +181,7 @@ static void node_geo_exec(GeoNodeExecParams params) const Field vert_index = params.extract_input>("Vertex Index"); if (params.output_is_required("Total")) { params.set_output("Total", - Field(std::make_shared( + Field(std::make_shared( vert_index, Field(std::make_shared()), AttrDomain::Point))); diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_edges_of_corner.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_edges_of_corner.cc index a11b3183c37..184a8f8069d 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_edges_of_corner.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_edges_of_corner.cc @@ -103,14 +103,14 @@ static void node_geo_exec(GeoNodeExecParams params) const Field corner_index = params.extract_input>("Corner Index"); if (params.output_is_required("Next Edge Index")) { params.set_output("Next Edge Index", - Field(std::make_shared( + Field(std::make_shared( corner_index, Field(std::make_shared()), AttrDomain::Corner))); } if (params.output_is_required("Previous Edge Index")) { params.set_output("Previous Edge Index", - Field(std::make_shared( + Field(std::make_shared( corner_index, Field(std::make_shared()), AttrDomain::Corner))); diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_edges_of_vertex.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_edges_of_vertex.cc index 3408332ffcd..62de4e19840 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_edges_of_vertex.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_edges_of_vertex.cc @@ -186,7 +186,7 @@ static void node_geo_exec(GeoNodeExecParams params) const Field vert_index = params.extract_input>("Vertex Index"); if (params.output_is_required("Total")) { params.set_output("Total", - Field(std::make_shared( + Field(std::make_shared( vert_index, Field(std::make_shared()), AttrDomain::Point))); diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_face_of_corner.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_face_of_corner.cc index 1023d435c90..00214bb7b8a 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_face_of_corner.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_face_of_corner.cc @@ -93,14 +93,14 @@ static void node_geo_exec(GeoNodeExecParams params) const Field corner_index = params.extract_input>("Corner Index"); if (params.output_is_required("Face Index")) { params.set_output("Face Index", - Field(std::make_shared( + Field(std::make_shared( corner_index, Field(std::make_shared()), AttrDomain::Corner))); } if (params.output_is_required("Index in Face")) { params.set_output("Index in Face", - Field(std::make_shared( + Field(std::make_shared( corner_index, Field(std::make_shared()), AttrDomain::Corner))); diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_vertex_of_corner.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_vertex_of_corner.cc index 4194c7d5673..62daa3d6588 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_vertex_of_corner.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_topology_vertex_of_corner.cc @@ -56,7 +56,7 @@ class CornerVertFieldInput final : public bke::MeshFieldInput { static void node_geo_exec(GeoNodeExecParams params) { params.set_output("Vertex Index", - Field(std::make_shared( + Field(std::make_shared( params.extract_input>("Corner Index"), Field(std::make_shared()), AttrDomain::Corner))); diff --git a/source/blender/nodes/geometry/nodes/node_geo_sample_index.cc b/source/blender/nodes/geometry/nodes/node_geo_sample_index.cc index 8a88910c779..314e0573b1d 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_sample_index.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_sample_index.cc @@ -15,37 +15,6 @@ namespace blender::nodes { -template -void copy_with_checked_indices(const VArray &src, - const VArray &indices, - const IndexMask &mask, - MutableSpan dst) -{ - const IndexRange src_range = src.index_range(); - devirtualize_varray2(src, indices, [&](const auto src, const auto indices) { - mask.foreach_index(GrainSize(4096), [&](const int i) { - const int index = indices[i]; - if (src_range.contains(index)) { - dst[i] = src[index]; - } - else { - dst[i] = {}; - } - }); - }); -} - -void copy_with_checked_indices(const GVArray &src, - const VArray &indices, - const IndexMask &mask, - GMutableSpan dst) -{ - bke::attribute_math::convert_to_static_type(src.type(), [&](auto dummy) { - using T = decltype(dummy); - copy_with_checked_indices(src.typed(), indices, mask, dst.typed()); - }); -} - } // namespace blender::nodes namespace blender::nodes::node_geo_sample_index_cc { @@ -220,7 +189,7 @@ class SampleIndexFunction : public mf::MultiFunction { }); } else { - copy_with_checked_indices(*src_data_, indices, mask, dst); + bke::copy_with_checked_indices(*src_data_, indices, mask, dst); } } }; diff --git a/source/blender/nodes/geometry/nodes/node_geo_set_curve_normal.cc b/source/blender/nodes/geometry/nodes/node_geo_set_curve_normal.cc index caf61fdf7ab..d97c8561b69 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_set_curve_normal.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_set_curve_normal.cc @@ -57,13 +57,13 @@ static void set_curve_normal(bke::CurvesGeometry &curves, fn::make_constant_field(mode)); if (mode == NORMAL_MODE_FREE) { - bke::try_capture_field_on_geometry( - curves.attributes_for_write(), - point_context, - "custom_normal", - AttrDomain::Point, - Field(std::make_shared(selection_field, AttrDomain::Curve)), - custom_normal); + bke::try_capture_field_on_geometry(curves.attributes_for_write(), + point_context, + "custom_normal", + AttrDomain::Point, + Field(std::make_shared( + selection_field, AttrDomain::Curve)), + custom_normal); } curves.tag_normals_changed();