use super::geometry::Pcurve;
use super::id::{CurveId, EdgeId, FaceId, PointId, ShellId, SurfaceId, VertexId, WireId};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Orientation {
Forward,
Reversed,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Vertex {
pub point: PointId,
}
#[derive(Debug, Clone, PartialEq)]
pub struct Edge {
pub curve: CurveId,
pub vertices: (VertexId, VertexId),
pub trim: (f64, f64),
pub orientation: Orientation,
pub pcurves: Vec<Pcurve>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct OrientedEdge {
pub edge: EdgeId,
pub orientation: Orientation,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Wire {
pub edges: Vec<OrientedEdge>,
pub vertex: Option<VertexId>,
pub is_outer: bool,
pub orientation: Orientation,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Face {
pub surface: SurfaceId,
pub bounds: Vec<WireId>,
pub orientation: Orientation,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Shell {
pub faces: Vec<FaceId>,
pub orientation: Orientation,
pub is_open: bool,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Solid {
pub shells: Vec<ShellId>,
pub name: Option<String>,
}