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>2021-06-02 16:11:35 +0300
committerHans Goudey <h.goudey@me.com>2021-06-02 16:11:35 +0300
commit21de669141dc8cde86eb8edfb18ab614c2b3109e (patch)
treebac9ba578be813a9195c21d73ec490a36c9220de /source/blender/blenkernel/BKE_spline.hh
parent5b176b66da1f85f19e042f69dc302e8e72e0dc44 (diff)
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
Diffstat (limited to 'source/blender/blenkernel/BKE_spline.hh')
-rw-r--r--source/blender/blenkernel/BKE_spline.hh18
1 files changed, 13 insertions, 5 deletions
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)
{
}