use crate::{CurvePolicy, Real};
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum ContourAreaUnsupportedReason {
CenterOnlyArcSweepAngle,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ContourAreaUnsupportedSegment2 {
pub segment_index: usize,
pub reason: ContourAreaUnsupportedReason,
}
#[derive(Clone, Debug, PartialEq)]
pub struct ContourSignedAreaReport2 {
pub signed_area: Option<Real>,
pub segment_count: usize,
pub line_segment_count: usize,
pub bulge_arc_segment_count: usize,
pub unsupported_segments: Vec<ContourAreaUnsupportedSegment2>,
}
impl ContourSignedAreaReport2 {
pub(crate) fn empty() -> Self {
Self {
signed_area: Some(Real::zero()),
segment_count: 0,
line_segment_count: 0,
bulge_arc_segment_count: 0,
unsupported_segments: Vec::new(),
}
}
pub fn is_complete(&self) -> bool {
self.signed_area.is_some() && self.unsupported_segments.is_empty()
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum RegionAreaContourRole {
Material,
Hole,
}
#[derive(Clone, Debug, PartialEq)]
pub struct RegionAreaUnsupportedContour2 {
pub role: RegionAreaContourRole,
pub contour_index: usize,
pub contour_report: ContourSignedAreaReport2,
}
#[derive(Clone, Debug, PartialEq)]
pub struct RegionFilledAreaReport2 {
pub filled_area: Option<Real>,
pub material_area: Real,
pub hole_area: Real,
pub material_contour_count: usize,
pub hole_contour_count: usize,
pub unsupported_contours: Vec<RegionAreaUnsupportedContour2>,
pub construction_policy: CurvePolicy,
}
impl RegionFilledAreaReport2 {
pub fn is_complete(&self) -> bool {
self.filled_area.is_some() && self.unsupported_contours.is_empty()
}
}