use brepkit_math::vec::{Point3, Vec3};
pub mod extrude;
pub mod helix;
pub mod loft;
pub mod pipe;
pub mod primitives;
pub mod projection;
pub mod revolve;
pub mod sweep;
pub mod copy;
pub mod mirror;
pub mod pattern;
pub mod transform;
pub mod boolean;
pub mod mesh_boolean;
pub mod blend_ops;
pub mod chamfer;
pub mod fillet;
pub mod offset_face;
pub mod offset_trim;
pub mod offset_v2;
pub mod offset_wire;
pub mod draft;
pub mod fill_face;
pub mod section;
pub mod shell_op;
pub mod split;
pub mod thicken;
pub mod defeature;
pub mod heal;
pub mod sew;
pub mod untrim;
pub mod classify;
pub mod distance;
pub mod feature_recognition;
pub mod measure;
pub mod query;
pub mod validate;
pub mod tessellate;
pub mod assembly;
pub(crate) mod cap;
pub mod compound_ops;
pub mod evolution;
pub mod sketch;
pub(crate) mod winding;
#[cfg(test)]
pub(crate) mod test_helpers;
fn dot_normal_point(n: Vec3, p: Point3) -> f64 {
n.dot(Vec3::new(p.x(), p.y(), p.z()))
}
#[derive(Debug, thiserror::Error)]
pub enum OperationsError {
#[error("invalid input: {reason}")]
InvalidInput {
reason: String,
},
#[error("non-manifold result")]
NonManifoldResult,
#[error("empty result: {reason}")]
EmptyResult {
reason: String,
},
#[error(transparent)]
Topology(#[from] brepkit_topology::TopologyError),
#[error(transparent)]
Math(#[from] brepkit_math::MathError),
#[error("algo: {0}")]
Algo(#[from] brepkit_algo::error::AlgoError),
#[error("blend: {0}")]
Blend(#[from] brepkit_blend::BlendError),
#[error("check: {0}")]
Check(#[from] brepkit_check::CheckError),
#[error("geometry: {0}")]
Geometry(#[from] brepkit_geometry::error::GeomError),
}