use geo::{Polygon};
use image::{Rgba, RgbaImage};
use imageproc::drawing::{draw_polygon_mut};
use imageproc::point::Point;
pub trait DrawMesh {
fn draw(&self, width: u32, height: u32) -> RgbaImage;
}
fn linestring_to_points(linestring: &geo::LineString) -> Vec<Point<i32>> {
let points: Vec<Point<i32>> = linestring
.points()
.map(|p| Point::new(p.x() as i32, p.y() as i32))
.collect();
if points.len() >= 2 && points.first() == points.last() {
points[..points.len() - 1].to_vec()
} else {
points
}
}
impl DrawMesh for Polygon {
fn draw(&self, width: u32, height: u32) -> RgbaImage {
let mut img = RgbaImage::new(width, height);
let exterior_color = Rgba([255, 0, 0, 255]);
let interior_color = Rgba([0, 0, 255, 255]);
let exterior_points = linestring_to_points(self.exterior());
draw_polygon_mut(&mut img, &exterior_points, exterior_color);
for interior in self.interiors() {
let interior_points = linestring_to_points(interior);
draw_polygon_mut(&mut img, &interior_points, interior_color);
}
img
}
}