#![forbid(unsafe_code)]
#[cfg(not(any(
feature = "mesh",
feature = "linear",
feature = "predicates",
feature = "profiles",
feature = "curves",
feature = "primitives",
feature = "overlay",
feature = "field",
feature = "pointcloud",
feature = "contracts",
feature = "cpu",
)))]
compile_error!(
r#"the `axiolid` facade has no capability features enabled, so it exports nothing.
As of 0.4 `default = []`: this crate is pay-for-what-you-use and compiles only
the geometry you name. Add at least one feature in Cargo.toml.
MIGRATING FROM <=0.3 (default was `mesh + cpu + integration`):
axiolid = { version = "0.4", features = ["standard"] }
PICK BY TASK -- narrowest feature that does the job:
triangle meshes, no operations .. "mesh"
line/plane/ray intersection ..... "linear-intersection"
volume, area, centroid .......... "measure"
ray casting against a mesh ...... "ray-mesh"
boolean union/difference ........ "application"
planar section / contours ....... "application"
NURBS curves and surfaces ....... "nurbs"
exact B-rep topology ............ "brep"
tessellate exact -> mesh ........ "tessellation"
point clouds to mesh ............ "pointcloud-provider"
2D fields, morphology ........... "field-ops"
mesh repair / healing ........... "heal"
BUNDLES -- use when you want breadth over a minimal build:
"standard" ... the pre-0.4 default: mesh + cpu + integration
"discrete" ... mesh stack: booleans, sections, measure, spatial, generate
"parametric" . exact stack: curves, surfaces, topology, NURBS
"advanced" ... discrete + parametric + heal
"full" ....... everything, including parallel/simd/gpu adapters
IMPORTANT -- features are ADDITIVE and imply their prerequisites, so name the
capability you need, not its dependencies. "brep" already pulls surfaces,
curves and linear; adding them by hand only widens your build.
Operations that dispatch to a provider (booleans, sections) need BOTH a
contract and a registered provider. "application" is the supported
combination; "mesh-boolean" alone gives you the trait with nothing behind it.
Full matrix: `cargo metadata` on this crate, or docs/architecture/closure-profiles.md
for the exact crate set each profile compiles."#
);
#[cfg(feature = "integration")]
pub mod integration;
#[cfg(all(feature = "ray-mesh", feature = "spatial"))]
pub mod ray_index;
#[cfg(feature = "application")]
pub mod application;
pub mod core {
pub use axiolid_core::*;
}
pub use axiolid_core::{Aabb, Point2, Point3, Scalar, Tolerance, Transform3, Vec2, Vec3};
#[cfg(feature = "mesh")]
pub mod mesh {
pub use axiolid_mesh::*;
}
#[cfg(feature = "pointcloud")]
pub mod pointcloud {
pub use axiolid_pointcloud::*;
}
#[cfg(feature = "pointcloud-reconstruction")]
pub mod pointcloud_reconstruction {
pub use axiolid_pointcloud_reconstruction_contract::*;
#[cfg(feature = "pointcloud-provider")]
pub use axiolid_pointcloud_reconstruction_sdf::SdfReconstruction;
}
#[cfg(feature = "linear")]
pub mod linear {
pub use axiolid_linear::*;
}
#[cfg(feature = "predicates")]
pub mod predicates {
pub use axiolid_predicates::*;
}
#[cfg(feature = "linear-intersection")]
pub mod linear_intersection {
pub use axiolid_linear_intersection::*;
}
#[cfg(feature = "profiles")]
pub mod profile {
pub use axiolid_profile::*;
}
#[cfg(feature = "curves")]
pub mod curve {
pub use axiolid_curve::*;
}
#[cfg(feature = "surfaces")]
pub mod surface {
pub use axiolid_surface::*;
}
#[cfg(feature = "evaluate")]
pub mod evaluate {
pub use axiolid_evaluate::*;
}
#[cfg(feature = "nurbs")]
pub mod nurbs {
pub use axiolid_nurbs::*;
}
#[cfg(feature = "topology")]
pub mod topology {
pub use axiolid_topology::*;
}
#[cfg(feature = "brep")]
pub mod brep {
pub use axiolid_brep::*;
}
#[cfg(feature = "model")]
pub mod model {
pub use axiolid_model::*;
}
#[cfg(feature = "primitives")]
pub mod primitive {
pub use axiolid_primitive::*;
}
#[cfg(feature = "tessellation")]
pub mod tessellation {
pub use axiolid_tessellation_contract::*;
}
#[cfg(feature = "spatial")]
pub mod spatial {
pub use axiolid_spatial::*;
}
#[cfg(feature = "ray-mesh")]
pub mod ray_mesh {
pub use axiolid_ray_mesh::*;
}
#[cfg(feature = "measure")]
pub mod measure {
pub use axiolid_measure::*;
}
#[cfg(feature = "overlay")]
pub mod overlay {
pub use axiolid_overlay::*;
}
#[cfg(feature = "project")]
pub mod project {
pub use axiolid_project::*;
}
#[cfg(feature = "route")]
pub mod route {
pub use axiolid_route::*;
}
#[cfg(feature = "generate")]
pub mod generate {
pub use axiolid_construct::*;
}
#[cfg(feature = "field")]
pub mod field {
pub use axiolid_field::*;
}
#[cfg(feature = "field-ops")]
pub mod field_ops {
pub use axiolid_field_ops::*;
}
#[cfg(feature = "heal")]
pub mod heal {
pub use axiolid_heal::*;
}
#[cfg(feature = "contracts")]
pub mod contracts {
pub use axiolid_contracts::*;
}
#[cfg(feature = "mesh-contracts")]
pub mod mesh_contracts {
pub use axiolid_mesh_contracts::*;
}
#[cfg(feature = "mesh-boolean")]
pub mod mesh_boolean {
pub use axiolid_mesh_boolean_contract::*;
}
#[cfg(feature = "mesh-section")]
pub mod mesh_section {
pub use axiolid_mesh_section_contract::*;
}
#[cfg(feature = "graph-compile")]
pub mod graph_compile {
pub use axiolid_mesh_compile_contract::*;
}
#[cfg(any(feature = "dispatch-mesh-boolean", feature = "dispatch-mesh-section"))]
pub mod dispatch {
pub use axiolid_dispatch::*;
}
#[cfg(feature = "cpu")]
pub mod cpu {
pub use axiolid_backend_cpu::*;
}
#[cfg(feature = "gpu")]
pub mod gpu {
pub use axiolid_backend_gpu::*;
}