embedded-plots/src/single_plot.rs

56 lines
1.7 KiB
Rust
Raw Normal View History

2020-12-20 11:11:06 +00:00
use crate::curve::Curve;
use embedded_graphics::drawable::Drawable;
use embedded_graphics::DrawTarget;
use embedded_graphics::prelude::Point;
use embedded_graphics::pixelcolor::PixelColor;
2021-01-02 09:28:38 +00:00
use crate::axis::{Scale, Placement, Axis};
use embedded_graphics::style::TextStyleBuilder;
use embedded_graphics::fonts::Font6x8;
2020-12-20 11:11:06 +00:00
pub struct SinglePlot<'a, C>
where
C: PixelColor
{
curve: &'a Curve<'a>,
2021-01-04 21:20:07 +00:00
x_scale: Scale,
y_scale: Scale,
2020-12-20 11:11:06 +00:00
color: C,
top_left: Point,
bottom_right: Point,
}
impl<'a, C> SinglePlot<'a, C>
where
C: PixelColor
{
2021-01-04 21:20:07 +00:00
pub fn new(curve: &'a Curve<'a>, color: C, top_left: Point, bottom_right: Point, x_scale: Scale, y_scale: Scale) -> SinglePlot<'a, C> {
SinglePlot { curve, color, top_left, bottom_right, x_scale, y_scale}
2020-12-20 11:11:06 +00:00
}
}
impl<'a, C> Drawable<C> for SinglePlot<'a, C>
where
C: PixelColor
{
fn draw<D: DrawTarget<C>>(self, display: &mut D) -> Result<(), D::Error> {
2021-01-02 09:28:38 +00:00
let text_style = TextStyleBuilder::new(Font6x8)
.text_color(self.color)
.build();
2021-01-04 21:20:07 +00:00
Axis::new("X",self.curve.x_range.clone(),self.x_scale)
.into_drawable_axis(Placement::X{x1: self.top_left.x, x2: self.bottom_right.x, y: self.bottom_right.y},self.color,text_style,2)
2021-01-02 09:28:38 +00:00
.draw(display)?;
2021-01-04 21:20:07 +00:00
Axis::new("Y", self.curve.y_range.clone(), self.y_scale)
.into_drawable_axis(Placement::Y{y1: self.top_left.y, y2: self.bottom_right.y, x: self.top_left.x},self.color,text_style,2)
2021-01-02 09:28:38 +00:00
.draw(display)?;
2020-12-20 11:11:06 +00:00
self.curve.into_drawable_curve(
&self.top_left,
&self.bottom_right,
self.color,
).draw(display)?;
Ok(())
}
}