microcad_core/geo2d/
mod.rs1mod bounds;
7mod circle;
8mod collection;
9mod geometry;
10mod line;
11mod primitives;
12mod size;
13
14use crate::*;
15
16pub use bounds::*;
17pub use circle::*;
18pub use collection::*;
19use geo::AffineTransform;
20pub use geometry::*;
21pub use line::*;
22pub use primitives::*;
23pub use size::*;
24
25pub trait RenderToMultiPolygon: Sized {
27 fn render_to_polygon(&self, _: &RenderResolution) -> Option<Polygon> {
32 None
33 }
34
35 fn render_to_multi_polygon(&self, resolution: &RenderResolution) -> MultiPolygon {
39 let mut polygons = geo::MultiPolygon(vec![]);
40 self.render_to_existing_multi_polygon(resolution, &mut polygons);
41 polygons
42 }
43
44 fn render_to_existing_multi_polygon(
48 &self,
49 resolution: &RenderResolution,
50 polygons: &mut MultiPolygon,
51 ) {
52 if let Some(polygon) = self.render_to_polygon(resolution) {
53 polygons.0.push(polygon);
54 }
55 }
56}
57
58pub trait FetchPoints2D {
60 fn fetch_points_2d(&self) -> Vec<Vec2>;
62}
63
64pub trait Transformed2D<T = Self> {
66 fn transformed_2d(&self, render_resolution: &RenderResolution, mat: &Mat3) -> T;
68}
69
70pub(crate) fn mat3_to_affine_transform(mat: &Mat3) -> AffineTransform {
72 geo::AffineTransform::new(mat.x.x, mat.y.x, mat.z.x, mat.x.y, mat.y.y, mat.z.y)
73}