diff options
Diffstat (limited to 'spline/spline.hpp')
-rw-r--r-- | spline/spline.hpp | 86 |
1 files changed, 66 insertions, 20 deletions
diff --git a/spline/spline.hpp b/spline/spline.hpp index 47266165..1bfe3b46 100644 --- a/spline/spline.hpp +++ b/spline/spline.hpp @@ -29,23 +29,66 @@ using namespace options; namespace spline_detail { -class OTR_SPLINE_EXPORT settings final : public QObject +class OTR_SPLINE_EXPORT base_settings : public QObject { Q_OBJECT +signals: + void recomputed() const; +}; + +class OTR_SPLINE_EXPORT settings final : public base_settings +{ public: bundle b; value<QList<QPointF>> points; axis_opts opts; settings(bundle b, const QString& axis_name, Axis idx); ~settings() override; -signals: - void recomputed() const; }; } // ns spline_detail -class OTR_SPLINE_EXPORT spline final +struct OTR_SPLINE_EXPORT base_spline_ +{ + virtual inline ~base_spline_(); + + virtual float get_value(double x) = 0; + virtual float get_value_no_save(double x) const = 0; + + warn_result_unused virtual bool get_last_value(QPointF& point) = 0; + virtual void set_tracking_active(bool value) = 0; + + virtual double max_input() const = 0; + virtual double max_output() const = 0; + + using points_t = QList<QPointF>; + + virtual points_t get_points() const = 0; + virtual int get_point_count() const = 0; + + virtual std::shared_ptr<spline_detail::base_settings> get_settings() = 0; + virtual std::shared_ptr<const spline_detail::base_settings> get_settings() const = 0; +}; + +struct OTR_SPLINE_EXPORT spline_modify_mixin +{ + virtual void add_point(QPointF pt) = 0; + virtual void add_point(double x, double y) = 0; + virtual void move_point(int idx, QPointF pt) = 0; + virtual void remove_point(int i) = 0; + virtual void clear() = 0; + + virtual inline ~spline_modify_mixin(); +}; + +class OTR_SPLINE_EXPORT base_spline : public base_spline_, public spline_modify_mixin +{ +public: + using base_settings = spline_detail::base_settings; +}; + +class OTR_SPLINE_EXPORT spline : public base_spline { double bucket_size_coefficient(const QList<QPointF>& points) const; void update_interp_data(); @@ -80,8 +123,8 @@ public: void save(); void set_bundle(bundle b, const QString& axis_name, Axis axis); - double max_input() const; - double max_output() const; + double max_input() const override; + double max_output() const override; spline(); spline(const QString& name, const QString& axis_name, Axis axis); @@ -90,26 +133,29 @@ public: spline& operator=(const spline&) = default; spline(const spline&) = default; - float get_value(double x); - float get_value_no_save(double x) const; - warn_result_unused bool get_last_value(QPointF& point); - void remove_point(int i); - void clear(); + float get_value(double x) override; + float get_value_no_save(double x) const override; + warn_result_unused bool get_last_value(QPointF& point) override; + + void add_point(QPointF pt) override; + void add_point(double x, double y) override; + void move_point(int idx, QPointF pt) override; + void remove_point(int i) override; + void clear() override; - void add_point(QPointF pt); - void add_point(double x, double y); - void move_point(int idx, QPointF pt); - QList<QPointF> get_points() const; + points_t get_points() const override; - void set_tracking_active(bool value); + void set_tracking_active(bool value) override; bundle get_bundle(); void ensure_valid(QList<QPointF>& the_points); - std::shared_ptr<spline_detail::settings> get_settings(); - std::shared_ptr<const spline_detail::settings> get_settings() const; + std::shared_ptr<spline_detail::base_settings> get_settings() override; + std::shared_ptr<const spline_detail::base_settings> get_settings() const override; - using points_t = decltype(s->points()); - int get_point_count() const; + int get_point_count() const override; using settings = spline_detail::settings; }; + +inline base_spline_::~base_spline_() {} +inline spline_modify_mixin::~spline_modify_mixin() {} |