Differential D13571 Diff 46024 source/blender/nodes/geometry/nodes/node_geo_distribute_points_on_faces.cc
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/geometry/nodes/node_geo_distribute_points_on_faces.cc
| Show First 20 Lines • Show All 393 Lines • ▼ Show 20 Lines | |||||
| static Array<float> calc_full_density_factors_with_selection(const MeshComponent &component, | static Array<float> calc_full_density_factors_with_selection(const MeshComponent &component, | ||||
| const Field<float> &density_field, | const Field<float> &density_field, | ||||
| const Field<bool> &selection_field) | const Field<bool> &selection_field) | ||||
| { | { | ||||
| const AttributeDomain attribute_domain = ATTR_DOMAIN_CORNER; | const AttributeDomain attribute_domain = ATTR_DOMAIN_CORNER; | ||||
| GeometryComponentFieldContext field_context{component, attribute_domain}; | GeometryComponentFieldContext field_context{component, attribute_domain}; | ||||
| const int domain_size = component.attribute_domain_size(attribute_domain); | const int domain_size = component.attribute_domain_size(attribute_domain); | ||||
| fn::FieldEvaluator selection_evaluator{field_context, domain_size}; | |||||
| selection_evaluator.add(selection_field); | |||||
| selection_evaluator.evaluate(); | |||||
| const IndexMask selection_mask = selection_evaluator.get_evaluated_as_mask(0); | |||||
| Array<float> densities(domain_size, 0.0f); | Array<float> densities(domain_size, 0.0f); | ||||
| fn::FieldEvaluator density_evaluator{field_context, &selection_mask}; | fn::FieldEvaluator evaluator{field_context, domain_size}; | ||||
| density_evaluator.add_with_destination(density_field, densities.as_mutable_span()); | evaluator.set_selection(selection_field); | ||||
| density_evaluator.evaluate(); | evaluator.add_with_destination(density_field, densities.as_mutable_span()); | ||||
| evaluator.evaluate(); | |||||
| return densities; | return densities; | ||||
| } | } | ||||
| static void distribute_points_random(const MeshComponent &component, | static void distribute_points_random(const MeshComponent &component, | ||||
| const Field<float> &density_field, | const Field<float> &density_field, | ||||
| const Field<bool> &selection_field, | const Field<bool> &selection_field, | ||||
| const int seed, | const int seed, | ||||
| Vector<float3> &positions, | Vector<float3> &positions, | ||||
| ▲ Show 20 Lines • Show All 169 Lines • Show Last 20 Lines | |||||