kcl_lib/std/
axis_or_reference.rs

1//! Types for referencing an axis or edge.
2
3use super::args::TyF64;
4use crate::std::fillet::EdgeReference;
5
6/// A 2D axis or tagged edge.
7#[derive(Debug, Clone, PartialEq)]
8pub enum Axis2dOrEdgeReference {
9    /// 2D axis and origin.
10    Axis { direction: [TyF64; 2], origin: [TyF64; 2] },
11    /// Tagged edge.
12    Edge(EdgeReference),
13}
14
15/// A 3D axis or tagged edge.
16#[allow(clippy::large_enum_variant)]
17#[derive(Debug, Clone, PartialEq)]
18pub enum Axis3dOrEdgeReference {
19    /// 3D axis and origin.
20    Axis { direction: [TyF64; 3], origin: [TyF64; 3] },
21    /// Tagged edge.
22    Edge(EdgeReference),
23}
24
25/// A 2D axis or a raw point2d.
26#[derive(Debug, Clone, PartialEq)]
27pub enum Axis2dOrPoint2d {
28    /// 2D axis and origin.
29    Axis { direction: [TyF64; 2], origin: [TyF64; 2] },
30    /// Raw point2d.
31    Point([TyF64; 2]),
32}
33
34impl Axis2dOrPoint2d {
35    /// Convert to a 2D axis.
36    pub fn to_point2d(&self) -> [TyF64; 2] {
37        match self {
38            Axis2dOrPoint2d::Axis { direction, origin: _ } => direction.clone(),
39            Axis2dOrPoint2d::Point(point) => point.clone(),
40        }
41    }
42}
43
44/// A 3D axis or a raw point3d.
45#[derive(Debug, Clone, PartialEq)]
46pub enum Axis3dOrPoint3d {
47    /// 3D axis and origin.
48    Axis { direction: [TyF64; 3], origin: [TyF64; 3] },
49    /// Raw point3d.
50    Point([TyF64; 3]),
51}
52
53impl Axis3dOrPoint3d {
54    /// Convert to a 3D axis.
55    pub fn to_point3d(&self) -> [TyF64; 3] {
56        match self {
57            Axis3dOrPoint3d::Axis { direction, origin: _ } => direction.clone(),
58            Axis3dOrPoint3d::Point(point) => point.clone(),
59        }
60    }
61
62    pub fn axis_origin(&self) -> Option<[TyF64; 3]> {
63        match self {
64            Axis3dOrPoint3d::Axis { origin, .. } => Some(origin.clone()),
65            Axis3dOrPoint3d::Point(..) => None,
66        }
67    }
68}