From 21de669141dc8cde86eb8edfb18ab614c2b3109e Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Wed, 2 Jun 2021 09:11:35 -0400 Subject: Splines: Function to copy spline settings without data Often you need to copy a spline to do an operation, but don't want to manually copy over all of the settings. I've already forgotten to do it once anyway. These functions copy a spline's "settings" into a new spline, but not the data. I tried to avoid duplicating any copying so this is easier to extend in the future. Differential Revision: https://developer.blender.org/D11463 --- source/blender/blenkernel/BKE_spline.hh | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'source/blender/blenkernel/BKE_spline.hh') diff --git a/source/blender/blenkernel/BKE_spline.hh b/source/blender/blenkernel/BKE_spline.hh index ef76c699cbb..fc1292e3620 100644 --- a/source/blender/blenkernel/BKE_spline.hh +++ b/source/blender/blenkernel/BKE_spline.hh @@ -101,15 +101,14 @@ class Spline { Spline(const Type type) : type_(type) { } - Spline(Spline &other) - : normal_mode(other.normal_mode), - attributes(other.attributes), - type_(other.type_), - is_cyclic_(other.is_cyclic_) + Spline(Spline &other) : attributes(other.attributes), type_(other.type_) { + copy_base_settings(other, *this); } virtual SplinePtr copy() const = 0; + /** Return a new spline with the same type and settings like "cyclic", but without any data. */ + virtual SplinePtr copy_settings() const = 0; Spline::Type type() const; @@ -183,6 +182,12 @@ class Spline { protected: virtual void correct_end_tangents() const = 0; + /** Copy settings stored in the base spline class. */ + static void copy_base_settings(const Spline &src, Spline &dst) + { + dst.normal_mode = src.normal_mode; + dst.is_cyclic_ = src.is_cyclic_; + } }; /** @@ -236,6 +241,7 @@ class BezierSpline final : public Spline { public: virtual SplinePtr copy() const final; + SplinePtr copy_settings() const final; BezierSpline() : Spline(Type::Bezier) { } @@ -377,6 +383,7 @@ class NURBSpline final : public Spline { public: SplinePtr copy() const final; + SplinePtr copy_settings() const final; NURBSpline() : Spline(Type::NURBS) { } @@ -444,6 +451,7 @@ class PolySpline final : public Spline { public: SplinePtr copy() const final; + SplinePtr copy_settings() const final; PolySpline() : Spline(Type::Poly) { } -- cgit v1.2.3