use fj_math::Winding;
use crate::{
geometry::Geometry,
objects::{Region, Surface},
storage::{Handle, HandleWrapper},
};
#[derive(Clone, Debug, Eq, PartialEq, Hash, Ord, PartialOrd)]
pub struct Face {
surface: HandleWrapper<Surface>,
region: Handle<Region>,
}
impl Face {
pub fn new(surface: Handle<Surface>, region: Handle<Region>) -> Self {
Self {
surface: surface.into(),
region,
}
}
pub fn surface(&self) -> &Handle<Surface> {
&self.surface
}
pub fn region(&self) -> &Handle<Region> {
&self.region
}
pub fn coord_handedness(&self, geometry: &Geometry) -> Handedness {
match self.region.exterior().winding(geometry) {
Winding::Ccw => Handedness::RightHanded,
Winding::Cw => Handedness::LeftHanded,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash, Ord, PartialOrd)]
pub enum Handedness {
LeftHanded,
RightHanded,
}