use galileo_types::cartesian::Point3;
use galileo_types::geometry::Geom;
use crate::render::render_bundle::RenderBundle;
use crate::symbol::{CirclePointSymbol, SimpleContourSymbol, SimplePolygonSymbol, Symbol};
use crate::Color;
#[derive(Debug, Clone)]
pub struct ArbitraryGeometrySymbol {
point: CirclePointSymbol,
contour: SimpleContourSymbol,
polygon: SimplePolygonSymbol,
}
impl ArbitraryGeometrySymbol {
pub fn new(
point: CirclePointSymbol,
contour: SimpleContourSymbol,
polygon: SimplePolygonSymbol,
) -> Self {
Self {
point,
contour,
polygon,
}
}
}
impl Default for ArbitraryGeometrySymbol {
fn default() -> Self {
Self {
point: CirclePointSymbol::new(Color::RED, 5.0),
contour: SimpleContourSymbol::new(Color::GREEN, 2.0),
polygon: SimplePolygonSymbol::new(Color::BLUE),
}
}
}
impl<F> Symbol<F> for ArbitraryGeometrySymbol {
fn render(
&self,
feature: &F,
geometry: &Geom<Point3>,
min_resolution: f64,
bundle: &mut RenderBundle,
) {
match geometry {
Geom::Point(_) => self.point.render(feature, geometry, min_resolution, bundle),
Geom::MultiPoint(_) => self.point.render(feature, geometry, min_resolution, bundle),
Geom::Contour(_) => self
.contour
.render(feature, geometry, min_resolution, bundle),
Geom::MultiContour(_) => self
.contour
.render(feature, geometry, min_resolution, bundle),
Geom::Polygon(_) => self
.polygon
.render(feature, geometry, min_resolution, bundle),
Geom::MultiPolygon(_) => self
.polygon
.render(feature, geometry, min_resolution, bundle),
}
}
}