diff options
author | Hans Goudey <h.goudey@me.com> | 2022-03-18 06:47:42 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2022-03-18 06:47:56 +0300 |
commit | 389807624de8442459c06cba46b900b38c66ac31 (patch) | |
tree | f1d5c168e7bd87732386ab0bc57cf710b9cbc2b1 | |
parent | 0eb394af743a2ec3e7e2704e362348997d403b15 (diff) |
Curves: Port Bezier Segment node to the new data-block
Ref T95443
-rw-r--r-- | source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc | 42 |
1 files changed, 18 insertions, 24 deletions
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc index 78e1613b630..297674e11f4 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-or-later */ -#include "BKE_spline.hh" +#include "BKE_curves.hh" #include "UI_interface.h" #include "UI_resources.h" @@ -55,30 +55,26 @@ static void node_init(bNodeTree *UNUSED(tree), bNode *node) node->storage = data; } -static std::unique_ptr<CurveEval> create_bezier_segment_curve( - const float3 start, - const float3 start_handle_right, - const float3 end, - const float3 end_handle_left, - const int resolution, - const GeometryNodeCurvePrimitiveBezierSegmentMode mode) +static Curves *create_bezier_segment_curve(const float3 start, + const float3 start_handle_right, + const float3 end, + const float3 end_handle_left, + const int resolution, + const GeometryNodeCurvePrimitiveBezierSegmentMode mode) { - std::unique_ptr<CurveEval> curve = std::make_unique<CurveEval>(); - std::unique_ptr<BezierSpline> spline = std::make_unique<BezierSpline>(); - spline->set_resolution(resolution); + Curves *curves_id = bke::curves_new_nomain_single(2, CURVE_TYPE_BEZIER); + bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry); + curves.resolution().fill(resolution); - spline->resize(2); - MutableSpan<float3> positions = spline->positions(); - spline->handle_types_left().fill(BEZIER_HANDLE_ALIGN); - spline->handle_types_right().fill(BEZIER_HANDLE_ALIGN); - spline->radii().fill(1.0f); - spline->tilts().fill(0.0f); + MutableSpan<float3> positions = curves.positions(); + curves.handle_types_left().fill(BEZIER_HANDLE_ALIGN); + curves.handle_types_right().fill(BEZIER_HANDLE_ALIGN); positions.first() = start; positions.last() = end; - MutableSpan<float3> handles_right = spline->handle_positions_right(); - MutableSpan<float3> handles_left = spline->handle_positions_left(); + MutableSpan<float3> handles_right = curves.handle_positions_right(); + MutableSpan<float3> handles_left = curves.handle_positions_left(); if (mode == GEO_NODE_CURVE_PRIMITIVE_BEZIER_SEGMENT_POSITION) { handles_left.first() = 2.0f * start - start_handle_right; @@ -95,9 +91,7 @@ static std::unique_ptr<CurveEval> create_bezier_segment_curve( handles_right.last() = end - end_handle_left; } - curve->add_spline(std::move(spline)); - curve->attributes.reallocate(1); - return curve; + return curves_id; } static void node_geo_exec(GeoNodeExecParams params) @@ -106,14 +100,14 @@ static void node_geo_exec(GeoNodeExecParams params) const GeometryNodeCurvePrimitiveBezierSegmentMode mode = (const GeometryNodeCurvePrimitiveBezierSegmentMode)storage.mode; - std::unique_ptr<CurveEval> curve = create_bezier_segment_curve( + Curves *curves = create_bezier_segment_curve( params.extract_input<float3>("Start"), params.extract_input<float3>("Start Handle"), params.extract_input<float3>("End"), params.extract_input<float3>("End Handle"), std::max(params.extract_input<int>("Resolution"), 1), mode); - params.set_output("Curve", GeometrySet::create_with_curves(curve_eval_to_curves(*curve))); + params.set_output("Curve", GeometrySet::create_with_curves(curves)); } } // namespace blender::nodes::node_geo_curve_primitive_bezier_segment_cc |