use fj_math::{Point, Scalar};
use crate::{
objects::{Cycle, Region},
operations::{BuildCycle, Insert},
services::Services,
};
pub trait BuildRegion {
fn empty(services: &mut Services) -> Region {
let exterior = Cycle::empty().insert(services);
let interiors = [];
let color = None;
Region::new(exterior, interiors, color)
}
fn circle(
center: impl Into<Point<2>>,
radius: impl Into<Scalar>,
services: &mut Services,
) -> Region {
let exterior = Cycle::circle(center, radius, services).insert(services);
Region::new(exterior, [], None)
}
fn polygon<P, Ps>(points: Ps, services: &mut Services) -> Region
where
P: Into<Point<2>>,
Ps: IntoIterator<Item = P>,
Ps::IntoIter: Clone + ExactSizeIterator,
{
let exterior = Cycle::polygon(points, services).insert(services);
Region::new(exterior, [], None)
}
}
impl BuildRegion for Region {}