Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Goudey <h.goudey@me.com>2022-03-18 06:47:42 +0300
committerHans Goudey <h.goudey@me.com>2022-03-18 06:47:56 +0300
commit389807624de8442459c06cba46b900b38c66ac31 (patch)
treef1d5c168e7bd87732386ab0bc57cf710b9cbc2b1 /source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc
parent0eb394af743a2ec3e7e2704e362348997d403b15 (diff)
Curves: Port Bezier Segment node to the new data-block
Ref T95443
Diffstat (limited to 'source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc')
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc42
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