#pragma once #include #include "../architecture/Renderable.h" #include "../Axis/Abs_Axis.h" #include "../base/Geometry.h" #include "../plottable/Interpolation.h" #include "../render/Image.h" namespace renderive { struct Raster_Image_Private; struct Raster_Image_Prop { std::weak_ptr domain_axis{}; std::weak_ptr value_axis{}; Range domain_range{0.0, 1.0}; Range value_range{0.0, 1.0}; RectF source_rect{}; Image_Interpolation_Mode interpolation_mode = Image_Interpolation_Mode::Nearest; }; class LIB_DECL Raster_Image : public Renderable { public: void update_image(const Image& image); void update_image_frame( const Image& image, Range domain_range, Range value_range, RectF source_rect, Image_Interpolation_Mode interpolation_mode); PROP(std::shared_ptr, domain_axis) PROP(std::shared_ptr, value_axis) PROP(Range, domain_range) PROP(Range, value_range) PROP(RectF, source_rect) PROP(Image_Interpolation_Mode, interpolation_mode) struct Builder; Raster_Image(); private: Raster_Image_Private* d(); Render_Object_Owner create_render_data() override; Render_Object_Owner create_render_state() override; Render_Object_Owner create_input_data() override; }; struct LIB_DECL Raster_Image::Builder : Raster_Image_Prop { PROP_B(std::shared_ptr, parent) PROP_B(std::shared_ptr, domain_axis) PROP_B(std::shared_ptr, value_axis) PROP_B(Range, domain_range) PROP_B(Range, value_range) PROP_B(RectF, source_rect) PROP_B(Image_Interpolation_Mode, interpolation_mode) Builder(std::shared_ptr parent, std::shared_ptr domain_axis, std::shared_ptr value_axis); std::shared_ptr build(); std::shared_ptr parent{}; }; } // namespace renderive