cadrum/common/error.rs
1/// Errors that can occur during CAD operations.
2#[derive(Debug)]
3pub enum Error {
4 /// STEP file read failed (invalid format or corrupted data).
5 StepReadFailed,
6
7 /// BRep file read failed (invalid format or corrupted data).
8 BrepReadFailed,
9
10 /// STEP file write failed.
11 StepWriteFailed,
12
13 /// BRep file write failed.
14 BrepWriteFailed,
15
16 /// Triangulation/meshing failed.
17 TriangulationFailed,
18
19 /// Boolean operation (fuse/cut/common) failed.
20 BooleanOperationFailed,
21
22 /// Shape cleaning (UnifySameDomain) failed.
23 CleanFailed,
24
25 /// Helix edge construction failed (e.g. degenerate parameters).
26 HelixFailed,
27
28 /// Extrusion (`Solid::extrude`) failed: empty profile, zero-length
29 /// direction, or profile not closed.
30 ExtrudeFailed,
31
32 /// Pipe sweep (`Solid::sweep`) failed: profile not closed, edges not
33 /// connectable into a wire, or `BRepOffsetAPI_MakePipe` returned no shape.
34 SweepFailed,
35
36 /// Shell / hollow (`Solid::shell` via `BRepOffsetAPI_MakeThickSolid`)
37 /// failed: thickness sign incompatible with geometry, sharp corners
38 /// yielding a self-intersecting offset surface, or OCCT internal failure.
39 ShellFailed,
40
41 /// Fillet (`Solid::fillet_edges` via `BRepFilletAPI_MakeFillet`) failed:
42 /// radius too large for the local geometry, tangent discontinuity along
43 /// the selected edge chain, or an edge not belonging to `self` was passed.
44 FilletFailed,
45
46 /// Chamfer (`Solid::chamfer_edges` via `BRepFilletAPI_MakeChamfer`) failed:
47 /// distance too large for the local geometry, tangent discontinuity along
48 /// the selected edge chain, or an edge not belonging to `self` was passed.
49 ChamferFailed,
50
51 /// Lofting (`Solid::loft` / `BRepOffsetAPI_ThruSections`) failed: section
52 /// count too low, section wire ill-formed, or OCCT internal failure.
53 /// The string identifies which precondition or stage failed.
54 LoftFailed(String),
55
56 /// B-spline solid (`Solid::bspline`) construction failed: grid too small,
57 /// surface interpolation rejected the input, or sewing/capping failed.
58 /// The string identifies which stage failed and with what parameters.
59 BsplineFailed(String),
60
61 /// Edge construction failed due to degenerate input (e.g. collinear arc
62 /// points, zero-length line, negative radius). The string describes which
63 /// constructor failed and with which parameters.
64 InvalidEdge(String),
65
66 /// SVG export (HLR projection) failed.
67 SvgExportFailed,
68
69 /// STL write failed.
70 StlWriteFailed,
71
72 /// Invalid color string (unrecognized name or invalid hex format).
73 InvalidColor(String),
74
75 /// Unknown error.
76 Unknown(String),
77}
78
79impl std::fmt::Display for Error {
80 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
81 match self {
82 Error::StepReadFailed => write!(f, "STEP read failed"),
83 Error::BrepReadFailed => write!(f, "BRep read failed"),
84 Error::StepWriteFailed => write!(f, "STEP write failed"),
85 Error::BrepWriteFailed => write!(f, "BRep write failed"),
86 Error::TriangulationFailed => write!(f, "Triangulation failed"),
87 Error::BooleanOperationFailed => write!(f, "Boolean operation failed"),
88 Error::CleanFailed => write!(f, "Shape clean failed"),
89 Error::HelixFailed => write!(f, "Helix failed"),
90 Error::ExtrudeFailed => write!(f, "Extrude failed"),
91 Error::SweepFailed => write!(f, "Sweep failed"),
92 Error::ShellFailed => write!(f, "Shell failed"),
93 Error::FilletFailed => write!(f, "Fillet failed"),
94 Error::ChamferFailed => write!(f, "Chamfer failed"),
95 Error::LoftFailed(msg) => write!(f, "Loft failed: {}", msg),
96 Error::BsplineFailed(msg) => write!(f, "Bspline failed: {}", msg),
97 Error::InvalidEdge(msg) => write!(f, "Invalid edge: {}", msg),
98 Error::SvgExportFailed => write!(f, "SVG export failed"),
99 Error::StlWriteFailed => write!(f, "STL write failed"),
100 Error::InvalidColor(s) => write!(f, "Invalid color: \"{}\"", s),
101 Error::Unknown(msg) => write!(f, "Unknown error: {}", msg),
102 }
103 }
104}
105
106impl std::error::Error for Error {}