35 r_positions.
resize(r_positions.
size() + positions.size());
36 positions.materialize(r_positions.
as_mutable_span().take_back(positions.size()));
39static void gather_radii_from_component(
const GeometryComponent &component,
40 const Field<float> radius_field,
41 Vector<float> &r_radii)
43 if (component.is_empty()) {
47 const bke::GeometryFieldContext field_context{component, AttrDomain::Point};
48 const int domain_num = component.attribute_domain_size(AttrDomain::Point);
50 r_radii.resize(r_radii.size() + domain_num);
51 fn::FieldEvaluator evaluator{field_context, domain_num};
52 evaluator.add_with_destination(radius_field, r_radii.as_mutable_span().take_back(domain_num));
60static bke::VolumeGrid<float> points_to_grid(
const GeometrySet &geometry_set,
61 const Field<float> &radius_field,
62 const float voxel_size)
64 const double determinant = std::pow(
double(voxel_size), 3.0);
69 Vector<float3> positions;
75 if (
const GeometryComponent *component = geometry_set.get_component(type)) {
76 gather_positions_from_component(*component, positions);
77 gather_radii_from_component(*component, radius_field, radii);
81 if (positions.is_empty()) {
85 return geometry::points_to_sdf_grid(positions, radii, voxel_size);
95 params.extract_input<
float>(
"Voxel Size"));
97 params.set_output(
"SDF Grid", std::move(grid));
100 params.set_default_remaining_outputs();