Files
Renderive/Core/primitive/Raster_Image.h
T
2026-08-02 03:43:39 +08:00

54 lines
1.9 KiB
C++

#pragma once
#include <memory>
#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<Abs_Axis> domain_axis{};
std::weak_ptr<Abs_Axis> 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<Abs_Axis>, domain_axis)
PROP(std::shared_ptr<Abs_Axis>, 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<Renderable>, parent)
PROP_B(std::shared_ptr<Abs_Axis>, domain_axis)
PROP_B(std::shared_ptr<Abs_Axis>, 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<Renderable> parent, std::shared_ptr<Abs_Axis> domain_axis, std::shared_ptr<Abs_Axis> value_axis);
std::shared_ptr<Raster_Image> build();
std::shared_ptr<Renderable> parent{};
};
} // namespace renderive