fj_core/operations/build/
region.rs

1use fj_math::{Point, Scalar};
2
3use crate::{
4    objects::{Cycle, Region},
5    operations::{build::BuildCycle, insert::Insert},
6    Core,
7};
8
9/// Build a [`Region`]
10///
11/// See [module-level documentation] for context.
12///
13/// [module-level documentation]: super
14pub trait BuildRegion {
15    /// Build an empty region
16    fn empty(core: &mut Core) -> Region {
17        let exterior = Cycle::empty().insert(core);
18        let interiors = [];
19
20        Region::new(exterior, interiors)
21    }
22
23    /// Build a circle
24    fn circle(
25        center: impl Into<Point<2>>,
26        radius: impl Into<Scalar>,
27        core: &mut Core,
28    ) -> Region {
29        let exterior = Cycle::circle(center, radius, core).insert(core);
30        Region::new(exterior, [])
31    }
32
33    /// Build a polygon
34    fn polygon<P, Ps>(points: Ps, core: &mut Core) -> Region
35    where
36        P: Into<Point<2>>,
37        Ps: IntoIterator<Item = P>,
38        Ps::IntoIter: Clone + ExactSizeIterator,
39    {
40        let exterior = Cycle::polygon(points, core).insert(core);
41        Region::new(exterior, [])
42    }
43}
44
45impl BuildRegion for Region {}