geello 0.1.5

A tool to render geo data
Documentation
use geo::Rect;
use vello::{Scene, kurbo::Affine};

use crate::rendered_geometry::RenderedGeometry;

use super::{AreaRenderer, LineRenderer, PointRenderer};

#[derive(Debug, serde::Serialize, serde::Deserialize)]
pub enum GeometryRenderer {
    Point(PointRenderer),
    Line(LineRenderer),
    Area(AreaRenderer),
}

impl GeometryRenderer {
    pub fn draw(
        &self,
        scene: &mut Scene,
        transform: Affine,
        rendered_geometrys: &mut Vec<RenderedGeometry>,
        render_rect: Option<Rect>,
    ) {
        rendered_geometrys
            .iter_mut()
            .for_each(|rendered_geometry| match self {
                GeometryRenderer::Point(renderer) => {
                    if let Some(point) = rendered_geometry.center_point(render_rect) {
                        renderer.draw(scene, transform, point);
                    }
                }
                GeometryRenderer::Line(renderer) => {
                    if let Some(lines) = rendered_geometry.lines() {
                        renderer.draw_multi(scene, transform, lines);
                    }
                }
                GeometryRenderer::Area(renderer) => {
                    if let Some(areas) = rendered_geometry.areas() {
                        renderer.draw_multi(scene, transform, areas);
                    }
                }
            });
    }
}