diff options
author | Hans Goudey <h.goudey@me.com> | 2022-03-18 01:45:37 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2022-03-18 01:45:37 +0300 |
commit | d4bd9f6a278b70347d277d46a76a9a44ffc34caa (patch) | |
tree | 97207be4b0c0b67e4666f85dfcd0c0f06343586c /source/blender/nodes | |
parent | 7bdba5f1e058af75c0d9cc4f50369d0680d0fa04 (diff) |
Curves: Port convex hull node to new data-block
This uses the evaluated positions calculations from 8538c69921662164677.
Diffstat (limited to 'source/blender/nodes')
-rw-r--r-- | source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc | 46 |
1 files changed, 19 insertions, 27 deletions
diff --git a/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc b/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc index 412f35d62fd..87fc6bcbad4 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc @@ -4,9 +4,9 @@ #include "DNA_meshdata_types.h" #include "DNA_pointcloud_types.h" +#include "BKE_curves.hh" #include "BKE_material.h" #include "BKE_mesh.h" -#include "BKE_spline.hh" #include "node_geometry_util.hh" @@ -162,14 +162,12 @@ static Mesh *compute_hull(const GeometrySet &geometry_set) } if (geometry_set.has_curves()) { - const std::unique_ptr<CurveEval> curve = curves_to_curve_eval( - *geometry_set.get_curves_for_read()); - for (const SplinePtr &spline : curve->splines()) { - positions_span = spline->evaluated_positions(); - total_size += positions_span.size(); - count++; - span_count++; - } + count++; + span_count++; + const Curves &curves_id = *geometry_set.get_curves_for_read(); + const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry); + positions_span = curves.evaluated_positions(); + total_size += positions_span.size(); } if (count == 0) { @@ -203,13 +201,11 @@ static Mesh *compute_hull(const GeometrySet &geometry_set) } if (geometry_set.has_curves()) { - const std::unique_ptr<CurveEval> curve = curves_to_curve_eval( - *geometry_set.get_curves_for_read()); - for (const SplinePtr &spline : curve->splines()) { - Span<float3> array = spline->evaluated_positions(); - positions.as_mutable_span().slice(offset, array.size()).copy_from(array); - offset += array.size(); - } + const Curves &curves_id = *geometry_set.get_curves_for_read(); + const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry); + Span<float3> array = curves.evaluated_positions(); + positions.as_mutable_span().slice(offset, array.size()).copy_from(array); + offset += array.size(); } return hull_from_bullet(geometry_set.get_mesh_for_read(), positions); @@ -240,20 +236,16 @@ static void read_positions(const GeometryComponent &component, } } -static void read_curve_positions(const CurveEval &curve, +static void read_curve_positions(const Curves &curves_id, Span<float4x4> transforms, Vector<float3> *r_coords) { - const Array<int> offsets = curve.evaluated_point_offsets(); - const int total_size = offsets.last(); + const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry); + const int total_size = curves.evaluated_points_size(); r_coords->reserve(r_coords->size() + total_size * transforms.size()); - for (const SplinePtr &spline : curve.splines()) { - Span<float3> positions = spline->evaluated_positions(); - for (const float4x4 &transform : transforms) { - for (const float3 &position : positions) { - r_coords->append(transform * position); - } - } + r_coords->as_mutable_span().take_back(total_size).copy_from(curves.evaluated_positions()); + for (const float3 &position : curves.evaluated_positions()) { + r_coords->append(transform * postition); } } @@ -275,7 +267,7 @@ static Mesh *convex_hull_from_instances(const GeometrySet &geometry_set) read_positions(*set.get_component_for_read<MeshComponent>(), transforms, &coords); } if (set.has_curves()) { - read_curve_positions(*curves_to_curve_eval(*set.get_curves_for_read()), transforms, &coords); + read_curve_positions(*set.get_curves_for_read(), transforms, &coords); } } return hull_from_bullet(nullptr, coords); |