diff options
Diffstat (limited to 'source/blender/nodes/geometry/nodes/node_geo_set_point_radius.cc')
-rw-r--r-- | source/blender/nodes/geometry/nodes/node_geo_set_point_radius.cc | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/source/blender/nodes/geometry/nodes/node_geo_set_point_radius.cc b/source/blender/nodes/geometry/nodes/node_geo_set_point_radius.cc index 571bead9743..28d07b31218 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_set_point_radius.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_set_point_radius.cc @@ -1,5 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0-or-later */ +#include "DNA_pointcloud_types.h" + #include "node_geometry_util.hh" namespace blender::nodes::node_geo_set_point_radius_cc { @@ -16,25 +18,24 @@ static void node_declare(NodeDeclarationBuilder &b) b.add_output<decl::Geometry>(N_("Points")); } -static void set_radius_in_component(GeometryComponent &component, +static void set_radius_in_component(PointCloud &pointcloud, const Field<bool> &selection_field, const Field<float> &radius_field) { - GeometryComponentFieldContext field_context{component, ATTR_DOMAIN_POINT}; - const int domain_num = component.attribute_domain_num(ATTR_DOMAIN_POINT); - if (domain_num == 0) { + if (pointcloud.totpoint == 0) { return; } + MutableAttributeAccessor attributes = pointcloud.attributes_for_write(); + AttributeWriter<float> radii = attributes.lookup_or_add_for_write<float>("radius", + ATTR_DOMAIN_POINT); - OutputAttribute_Typed<float> radii = component.attribute_try_get_for_output_only<float>( - "radius", ATTR_DOMAIN_POINT); - - fn::FieldEvaluator evaluator{field_context, domain_num}; + bke::PointCloudFieldContext field_context{pointcloud}; + fn::FieldEvaluator evaluator{field_context, pointcloud.totpoint}; evaluator.set_selection(selection_field); - evaluator.add_with_destination(radius_field, radii.varray()); + evaluator.add_with_destination(radius_field, radii.varray); evaluator.evaluate(); - radii.save(); + radii.finish(); } static void node_geo_exec(GeoNodeExecParams params) @@ -44,10 +45,8 @@ static void node_geo_exec(GeoNodeExecParams params) Field<float> radii_field = params.extract_input<Field<float>>("Radius"); geometry_set.modify_geometry_sets([&](GeometrySet &geometry_set) { - if (geometry_set.has_pointcloud()) { - set_radius_in_component(geometry_set.get_component_for_write<PointCloudComponent>(), - selection_field, - radii_field); + if (PointCloud *pointcloud = geometry_set.get_pointcloud_for_write()) { + set_radius_in_component(*pointcloud, selection_field, radii_field); } }); |