2025-01-07 19:10:53 -08:00
|
|
|
//! Types for referencing an axis or edge.
|
|
|
|
|
2025-04-14 05:58:19 -04:00
|
|
|
use super::args::TyF64;
|
2025-04-26 21:21:26 -07:00
|
|
|
use crate::std::fillet::EdgeReference;
|
2025-04-14 05:58:19 -04:00
|
|
|
|
2025-01-07 19:10:53 -08:00
|
|
|
/// A 2D axis or tagged edge.
|
2025-04-03 22:44:52 +13:00
|
|
|
#[derive(Debug, Clone, PartialEq)]
|
2025-01-07 19:10:53 -08:00
|
|
|
pub enum Axis2dOrEdgeReference {
|
|
|
|
/// 2D axis and origin.
|
2025-04-14 05:58:19 -04:00
|
|
|
Axis { direction: [TyF64; 2], origin: [TyF64; 2] },
|
2025-01-07 19:10:53 -08:00
|
|
|
/// Tagged edge.
|
|
|
|
Edge(EdgeReference),
|
|
|
|
}
|
|
|
|
|
|
|
|
/// A 3D axis or tagged edge.
|
2025-04-14 05:58:19 -04:00
|
|
|
#[allow(clippy::large_enum_variant)]
|
2025-04-03 22:44:52 +13:00
|
|
|
#[derive(Debug, Clone, PartialEq)]
|
2025-01-07 19:10:53 -08:00
|
|
|
pub enum Axis3dOrEdgeReference {
|
|
|
|
/// 3D axis and origin.
|
2025-04-14 05:58:19 -04:00
|
|
|
Axis { direction: [TyF64; 3], origin: [TyF64; 3] },
|
2025-01-07 19:10:53 -08:00
|
|
|
/// Tagged edge.
|
|
|
|
Edge(EdgeReference),
|
|
|
|
}
|
2025-05-18 19:25:35 -07:00
|
|
|
|
|
|
|
/// A 2D axis or a raw point2d.
|
|
|
|
#[derive(Debug, Clone, PartialEq)]
|
|
|
|
pub enum Axis2dOrPoint2d {
|
|
|
|
/// 2D axis and origin.
|
|
|
|
Axis { direction: [TyF64; 2], origin: [TyF64; 2] },
|
|
|
|
/// Raw point2d.
|
|
|
|
Point([TyF64; 2]),
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Axis2dOrPoint2d {
|
|
|
|
/// Convert to a 2D axis.
|
|
|
|
pub fn to_point2d(&self) -> [TyF64; 2] {
|
|
|
|
match self {
|
|
|
|
Axis2dOrPoint2d::Axis { direction, origin: _ } => direction.clone(),
|
|
|
|
Axis2dOrPoint2d::Point(point) => point.clone(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// A 3D axis or a raw point3d.
|
|
|
|
#[derive(Debug, Clone, PartialEq)]
|
|
|
|
pub enum Axis3dOrPoint3d {
|
|
|
|
/// 3D axis and origin.
|
|
|
|
Axis { direction: [TyF64; 3], origin: [TyF64; 3] },
|
|
|
|
/// Raw point3d.
|
|
|
|
Point([TyF64; 3]),
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Axis3dOrPoint3d {
|
|
|
|
/// Convert to a 3D axis.
|
|
|
|
pub fn to_point3d(&self) -> [TyF64; 3] {
|
|
|
|
match self {
|
|
|
|
Axis3dOrPoint3d::Axis { direction, origin: _ } => direction.clone(),
|
|
|
|
Axis3dOrPoint3d::Point(point) => point.clone(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|