Skip to content

Capabilities and status ​

Axiolid is striving to be a multipurpose, exact B-rep geometry kernel — usable for CAD construction, for rule checking over building models, and for the analytical work those applications need. It is explicitly not intended to be another tessellation pipeline. Exact geometry is the model; tessellation is one output you can ask for, with a tolerance you choose. See ADR 0020.

That is the ambition. This page separates it from the status, which is deliberately conservative:

  • Implemented — a focused crate or provider has executable behavior and tests.
  • Represented — the neutral type vocabulary or contract exists.
  • Seam — an extension boundary exists; not a claim that Axiolid bundles a production implementation.
  • Planned — accepted as in-scope by an ADR, not yet built.

Where the two differ, the status column wins. An accepted ambition is not evidence that an algorithm exists.

Looking for a quick answer?

The support map is the scannable version: one row per capability, red/yellow/green, including what is deliberately out of scope and which Cargo feature turns each thing on. This page is the detailed prose account.

Where the implementation stands against the ambition ​

Graph execution now has separate exact and discrete paths. The reference exact compiler memoises supported graph extrusion, revolution and swept-disk roots as ExactBRep, so planar walls stay planes and arc walls stay cylinders through compilation, for every profile family listed under "Sweeps / extrusions" below, and places instances of them under rigid transforms (#223). Its cache cannot contain TriMesh; unsupported node, operation, profile, and oblique-circle families fail with typed UnsupportedInput diagnostics. The reference mesh compiler remains an explicit, tolerance-driven discrete capability with a TriMesh cache.

This is a focused exact slice, not general exact graph evaluation. Treat exactness claims as applying only to the supported extrusion and revolution families, the coaxial-prism boolean, and the independently certified affine trace arrangement described below.

Core and reference work ​

CapabilityStatusEvidence / boundary
Scalar values, frames, transforms, bounds, intervals, toleranceImplementedaxiolid-core
Mesh values, polygon/triangle utilities and viewsImplementedaxiolid-mesh
Robust-orientation and in-circle / in-sphere predicate reference pathsImplementedaxiolid-predicates with degeneracy and filter tests; re-exported by axiolid-reference. Depends only on axiolid-core and axiolid-guarantees, so a consumer gets certified signs without curves, surfaces, or meshes (ADR 0036)
Scalar geometry generationImplemented broad discrete path plus focused exact constructionaxiolid-construct builds exact extrusions of filled/hollow rectangles with sharp or rounded corners, positive-axis circles and ellipses, arbitrary polygon and arc contours with holes, the I/asymmetric-I/T/U/L/Z/C/trapezium sections, derived (transformed) profiles, composite profiles (members unioned exactly, arcs and member holes kept, disjoint members as separate solids), and centre-line profiles, exact full-turn revolutions of contour-lowerable profiles, circles and sections with holes (each hole a toroidal cavity), and the certified one-owner affine trace arrangement. Other profile/path families remain discrete or fail closed; see ADR 0024 and ADR 0029
Scalar graph compilationImplemented separate mesh and focused exact pathsaxiolid-mesh-compile; ReferenceExactCompiler owns a per-batch NodeId -> ExactBRep cache and supports the exact extrusion and full-turn revolution families above; exact booleans accept only sharp-rectangle prisms. ReferenceMeshCompiler remains the explicit tolerance-driven discrete path. Unsupported exact roots refuse instead of tessellating; see ADR 0020
Polygon triangulationImplemented provideraxiolid-tessellation-contract adopts Earcut under the contract in ADR 0015
Mesh Boolean executionOptional provideraxiolid-mesh-boolean-boolmesh; limited to its mesh contract and tests. The algorithm is absorbed into the crate (ADR 0047), ported from boolmesh 0.1.9 under MPL-2.0 with upstream attribution preserved, so its hot paths and defects are ours to change
Mesh plane sectionImplemented scalar oracleaxiolid-mesh-section-contract::MeshPlaneSection plus axiolid-reference::ScalarSection; exact binary64 plane-side classification, source-topology stitching of outward-oriented closed solids, closed plane-local contours, explicit limits/cancellation/scratch preflight, and input-mesh provenance. Coplanar surface overlap and open/non-manifold results fail closed; no analytic exactness or region nesting is claimed. See ADR 0033

Geometry representation ​

CapabilityStatusNotes
Primitive solids and half-spacesRepresentedaxiolid-primitive owns neutral values and validation
Profiles / contoursRepresented with validationaxiolid-profile
Curves and surfacesRepresentedaxiolid-curve, axiolid-surface; representation alone is not an evaluator claim
Polynomial/rational B-spline evaluationImplemented scalar oracleaxiolid-evaluate (re-exported by axiolid-reference); validates compact knot/control/weight data and exposes homogeneous point, first-, and second-derivative curve/surface jets
Linear intersection: line/line and segment/segment in 2DImplementedaxiolid-linear-intersection; certified parallel/coincident/crossing classification, exact endpoint-contact parameters, collinear overlap spans, and typed refusals naming the operand at fault. 3D linear and curve/surface intersection are not implemented
Analytic curve evaluation and adaptive flatteningImplementedaxiolid-evaluate (re-exported by axiolid-reference); native-parameter evaluation with a chord-error budget, fail-closed on depth exhaustion and unbisectable intervals
Point→parameter inversion, elementary surfacesImplementedaxiolid-evaluate (re-exported by axiolid-reference); plane/cylinder/cone/sphere/torus with residual validation, refusing degenerate axis/apex/pole points
General NURBS differential analysisImplemented reference pathaxiolid-nurbs; curve tangents/curvature and surface fundamental forms, normals, Gaussian/mean/principal curvature; see ADR 0022
NURBS inverse queriesImplemented reference paths plus bounded certified slicesaxiolid-nurbs; deterministic budgeted multistart curve/surface candidates, globally certified clamped curve projection and curve-pair distance, and globally certified open clamped and explicit cyclic-periodic surface projection over the full rectangular or quotient domain. The surface certificate retains every possible global-minimizer box, requires distance and parameter resolution, and refuses trims or neutral closed axes lacking the explicit cyclic schema. Closest-point INVERSION builds on that certificate and additionally proves the answer is unique -- the minimizer cover must be one connected, localized region -- so poles, seams, and self-touching patches yield an explicit ambiguity refusal carrying the rival boxes rather than an arbitrary representative; see ADR 0025 and ADR 0030
Planar clamped NURBS curve/curve rootsImplemented bounded reference sliceaxiolid-nurbs; exact-sign single-span line/point predicates with a distinct zero-length PointContact, contractive transverse polynomial/rational Bézier boxes via strict-interior Krawczyk proof, explicit native-parameter resolution, localized structural overlap/endpoint tangency, compact parameter-only DFS work items, hard work ceilings, per-box contact classification with boundary ownership and deduplication, interval-certified tangency proof over the whole box, and an explicit BoundaryCrossing class for transverse roots on a shared cell edge that strict-interior isolation cannot name. General seam/trim ownership and curved overlap tracing remain unimplemented; see ADR 0026
Clamped, internally continuous NURBS curve/surface rootsImplemented bounded reference sliceaxiolid-nurbs; accepts internal knot multiplicity 1..=degree and treats valid full-multiplicity internal knots as unsupported by this certified query; outward tensor rational-Bézier refinement, conservative native-span curve/surface derivative hulls, strict-interior 3×3 Krawczyk existence/uniqueness proofs, explicit three-parameter resolution, compact parameter-only DFS work items, shared hard work ceilings, and explicit unresolved singular/tangential/boundary boxes. General contact classification, periodic/seam/trim ownership, discontinuous span joins, surface/surface tracing, and topology remain unimplemented; see ADR 0027
NURBS exact transformationsImplementedaxiolid-nurbs; homogeneous curve knot insertion/reversal/split/Bézier decomposition and surface U/V insertion/reversal preserve the represented shape
Verified periodic curve viewsImplemented bounded semanticsaxiolid-nurbs; PeriodicCurve2/PeriodicCurve3 require declared closure plus verified positional seam continuity, report C0/C1/C2 continuity, wrap only explicit view evaluation, canonicalize interior insertion/split parameters, revalidate insertion, and return neutral edited/open curves. They do not define periodic control-net or surface topology; see ADR 0031
Explicit periodic B-spline surfacesImplemented fixed-topology semanticsCyclic U/V/UV schema, wrapped jets, alias-safe edits, and certified projection; see ADR 0032
Trimmed curved-face tessellationImplemented bounded reference pathaxiolid-mesh-compile; endpoint-inclusive pcurve boundaries and holes, guarded structured-grid/Earcut seeds, topological seam reuse, explicit outer/bound orientation, face-level conforming support-surface refinement, periodic face charts, and fail-closed input/per-edge/per-face/aggregate/depth limits; see ADR 0019
Topology / B-rep vocabularyRepresentedaxiolid-topology provides generic typed-role topology; axiolid-brep provides strict owned analytic catalogs and required native trim spans
Ray/triangle-mesh narrow phaseImplementedaxiolid-ray-mesh; nearest hit as parametric distance in direction units, triangle index, barycentric coordinates, and a certified orient3d front/back/coplanar side. Double-sided by default with deterministic lowest-index tie-breaking, typed refusals for zero-area triangles and out-of-range indices, and nearest_hit_among for composing with the axiolid-spatial BVH broad phase. It does not decide what a ray means: sampling patterns, entity identity, and obstruction policy stay with the caller
Independent mapped-3D verification of intersection/inversionImplemented verification toolaxiolid-oracle (workspace-internal, not published in the facade); maps claimed parameter boxes back through axiolid-evaluate and measures the model-space deviation, sharing no subdivision or interval machinery with axiolid-nurbs. It refutes overstated global minimum distances soundly and reports the measured 3D deviation; a small sampled deviation is a witness, never a proof of global minimality; see ADR 0037
Exact B-rep result contractImplemented contract with focused constructorsaxiolid-brep::ExactBRep refuses missing supports/spans and generic topology failures. axiolid-construct builds supported exact extrusions and the certified one-owner affine trace arrangement; see ADR 0024 and ADR 0029
Exact B-rep operation resultsFocused extrusion, revolution, boolean, chamfer and affine-arrangement slices; general operations plannedaxiolid-construct, axiolid-brep; every exact extrusion family (see "Sweeps / extrusions") retains analytic planes/cylinders, closed trims, pcurves, and native spans through exact graph compilation. Full-turn revolution of any profile that lowers to a contour (contours, sections, circles, hollow rectangles and circles, derived, composite, centre-line) is exact: straight segments sweep planes, cylinders and cones, arc segments sweep tori, and each hole sweeps a closed cavity carried as a void shell. Boolean over two COAXIAL prisms is exact via the planar overlay, including a wall with an interior opening; stepped results (unions with differing spans, tools shorter than the subject) and disconnected results refuse by name. Constant-distance chamfer on one straight vertical edge of an extruded sharp rectangle is exact. One bounded surface-pair slice also returns analytic supports and a residual certificate. ExactBRep::transformed places an exact B-rep under a rigid motion (rotation, reflection with every face flipped, translation) family for family, so instances compile exactly; a scaled or sheared instance is refused by name (#223). Profiles crossing the revolution axis, revolution of ellipses, non-coaxial or non-prism boolean operands, general sweeps, authored B-rep graph nodes, and curved intersections remain unsupported (#111)
Single-span affine NURBS surface/surface tracesImplemented bounded reference slice with focused topology handoffaxiolid-nurbs proves affine transverse bounded traces. axiolid-construct splits the uniquely boundary-owned rectangular patch and attaches the same edge as an embedded pcurve on the containing face. Dual-boundary ownership, corners, mixed ownership, curved tracing, loops, tangency/coincidence, and multispan stitching remain unresolved. Constructed intersection CURVES are emitted only where the construction is exact -- a degree-1 segment for the affine family, with a deviation bound valid over the whole curve -- and curve/surface queries return isolated crossing points rather than a manufactured extent; every other case refuses by name and proven Disjoint is distinguished from Unresolved. See ADR 0038 and ADR 0028 and ADR 0029
Immutable shared geometry DAGImplemented structural modelaxiolid-model uses typed IDs and backward references
Sweeps / extrusions / revolutions / loftsBroad discrete reference path plus focused exact extrusion, revolution and straight sweepaxiolid-construct exactly extrudes filled/hollow rectangles with sharp or rounded corners, positive-axis circles and ellipses, arbitrary polygon and arc contours with holes (IfcArbitraryClosedProfileDef, IfcArbitraryProfileDefWithVoids), the I/asymmetric-I/T/U/L/Z/C/trapezium sections, derived (transformed) profiles, composite profiles (members unioned exactly over one arc arrangement: arc members stay arcs, member openings stay open, disjoint members become separate solids), and centre-line profiles. Full-turn and partial-turn revolution are exact for every profile that lowers to a contour, including circles and sections with holes; a partial turn may touch the axis. Fixed-reference sweeps along a STRAIGHT directrix delegate to the extrusion they are, so they inherit every extrusion family. A swept disk (IfcSweptDiskSolid, optionally hollow) along one straight segment or one circular arc is exact: a capped cylinder, a capped torus wedge or a torus (#223). Still refused by name: oblique circle/ellipse extrusion, ellipse revolution, curved directrices other than one arc, directrices with corners, turns beyond a full turn, and lofts. The L2 result boundary keeps exact B-rep and tolerance-bearing tessellation requests distinct and never substitutes a mesh for exact output
Certified B-rep distanceImplemented: boundary_distance, boundary_clearance, boundary_hausdorff_distanceaxiolid-measure (feature exact): an interval certain to contain the distance between the boundaries of two exact B-reps, with witness points on both, from branch and bound with exact projection bounds and normal-cone pruning (ADR 0074). A clearance check against a limit answers Below, Above or Indeterminate, never rounding a value near the limit into a verdict. Isolated nearest pairs close to 1e-9; line contact (parallel columns) closes to about 1e-6 within the step budget. The Hausdorff distance between two exact boundaries, two-sided and one-sided, is certified the same way with witnesses (#224): copies offset by a translation and identical re-exports close at any accuracy through faces matched by family and trim, other pairs at first order in the patch size. Distance is between boundaries, not a containment test
Mass propertiesImplemented for meshes and exact B-reps, planar and curvedaxiolid-measure: MeshMeasure implements Measure<TriMesh> (area, signed volume, volume centroid, second moments), and exact_properties measures an ExactBRep WITHOUT tessellating it: straight-edged planar faces by an exact fan, and cylinders, cones, spheres, tori, elliptical cylinders, B-spline faces and arc-bounded planar faces by Green's theorem over their own parameters with quadrature held to 1e-13 relative (ADR 0073). Verified against closed forms (Pappus, parallel-axis moments, hemispheres, cones, a half torus) and an exact-vs-mesh differential. A face whose pcurves bound no domain is refused by name; open shells are refused rather than assigned a plausible volume. Exact support is behind the exact feature so a mesh-only consumer does not acquire B-rep geometry
Mesh defect diagnosisImplemented: located defects, not countsaxiolid-inspect; coplanar overlap decided exactly via orient2d; repair is separate
Convex hull (3D)Implemented for point setsaxiolid-construct: convex_hull builds a closed, outward-oriented TriMesh by incremental insertion. Every visibility decision goes through certified orient3d; there is no epsilon in the module. Degenerate input is typed rather than approximated: fewer than four points, all-collinear, and all-coplanar are distinguishable refusals, so a caller can fall back to the 2D hull in axiolid-reference. Verified against closed-form volumes and by re-deciding containment for every input point against every face
Exact boolean (planar-faced solids)Implemented for general planar-faced operandsaxiolid-construct: boolean_polyhedra_exact accepts arbitrary planar-faced solids, convex or non-convex, in any orientation, for union, intersection and difference. Faces are split only against ORIGINAL input planes, never derived ones, so vertices stay one intersection from input data. Containment uses exact ray-crossing parity, which a convex-only "inside every plane" test gets wrong for concave regions. Coplanar contact is classified by normal agreement so a shared face is never duplicated. A containment probe that meets a vertex or edge exactly retries a fixed family of ray directions before refusing. Contact configurations are covered by a lattice sweep (disjoint, contained, identical, face/edge/vertex touching, and an epsilon ladder in both gap and overlap). LONG chains of grid-aligned subtraction still refuse partway through, and a thin overlap below 1e-12 produces an open shell; both are measured, open limits rather than worked around. Verified by the volume identity
Solid offset and shellingImplemented for planar-faced solidsaxiolid-construct: offset_solid (miter, outward and inward) and shell_solid. Vertices are moved to the meeting point of their incident pushed planes, so concave edges are handled and topology is preserved. An offset that closes the gap between opposing walls is REFUSED, not emitted. NOT sphere offset, NOT variable-distance, NOT Minkowski, and no face removal to open a shell
Constant-radius filletImplemented for one straight edge of a prismaxiolid-construct: fillet_extruded_profile emits a real Surface::Cylinder blend tangent to both adjacent walls, not a many-segment chamfer. Tangency follows from placing the axis on the internal bisector and is verified by measuring axis-to-wall distance. Refuses radii reaching past a neighbouring corner, variable radius, edge loops, and curved edges
Mesh decimationImplemented, deviation-boundedaxiolid-decimate: edge-collapse reduction to a triangle budget or a maximum deviation. The deviation is measured and reported per run, not estimated, and accumulates per vertex so repeated collapses cannot drift past the bound. Collapses that would create a non-manifold edge are refused and counted. Output is deterministic. NOT quadric-based: cost is edge length and placement is the midpoint, which is predictable but not optimal for a given budget
Connected-component decompositionImplemented: decompose / composeaxiolid-mesh; connectivity is by shared vertex index, not geometric proximity; coincident-but-distinct vertices stay separate bodies until welded
Clearance / min gapImplemented for triangle meshesaxiolid-reference; BVH-accelerated; reports clash as 0.0 and out-of-range as none
Point containment / winding numberImplemented, exactaxiolid-inspect; certified orient3d parity; signed, so inside-out shells are visible
Ray castingImplemented for triangle meshesaxiolid-inspect; exact membership; only the hit parameter is f64
GenusImplemented for closed two-manifoldsaxiolid-inspect; refuses meshes with boundary or non-manifold edges
Boolean construction arithmeticf64 constructions; predicates verify onlyThe production mesh boolean constructs intersection coordinates in f64; axiolid-predicates is a DEV-dependency of the provider and re-decides orientation in tests rather than driving construction. Measured against Manifold, CGAL (exact constructions) and OCCT on byte-identical operands: error does not accumulate over chained operations (5.62e-16 at n=64, at or better than the exact kernels), and degradation appears only as operands approach coincidence. Published thresholds by relative operand overlap: above 1e-6 invisible, 1e-6 to 1e-12 smooth degradation, below 1e-12 severe. Axiolid never collapses to zero volume on this sweep, where Manifold and OCCT both do. BooleanEvidence::relative_overlap reports the measured conditioning so a caller can refuse on its own threshold; Axiolid does not choose one on its behalf; see ADR 0045
Spatial, healingFocused crates / staged capabilityaxiolid-spatial, axiolid-heal; consult each crate’s README and API docs; do not infer broad CAD coverage

Execution and acceleration ​

CapabilityStatusBoundary
Portable CPU contextImplemented shellaxiolid-backend-cpu; portable defaults and explicit feature tiers
Parallel / SIMDOpt-in context featuresaxiolid-backend-cpu; they require measurement and differential validation before performance claims
GPU graph executionContract seamaxiolid-backend-gpu provides an API-neutral seam, not a bundled GPU algorithm suite
Native CUDA/HIPPlanned out-of-tree providersSee ADR 0011

Performance work is deliberately deferred; see ADR 0013 and the roadmap. Correctness and exactness come first, and the architecture is kept clean so optimization stays possible later.

In scope, not yet built ​

Accepted by ADR 0020 as work the kernel intends to do. These broader exact/certified forms do not exist today:

  • General exact B-rep results for unsupported graph/operation families (including general booleans, lofts, instances, authored B-rep roots, and sweeps along curved directrices), plus exact-result propagation beyond the focused extrusion, revolution and affine-arrangement slices.
  • General curved surface/surface intersection-curve tracing, closed loops, and tangent/overlap or seam/trim-owned completion beyond the bounded affine trace slice.
  • Exact analytic booleans, section curves, offsets, and fillets, which all sit downstream of intersection.

Explicit non-goals today ​

  • Source-format parsing or semantic interpretation.
  • A claim of OpenCascade compatibility or replacement coverage.
  • Bundled production CUDA, HIP, Metal, Vulkan, or WebGPU compute kernels.
  • A global hidden tolerance policy.

How to evaluate a claim ​

Use the evidence nearest the implementation:

  1. The relevant crate’s public API and tests.
  2. The architecture decision that defines the contract.
  3. Feature-isolation and layering gates.
  4. Benchmark reports for performance statements.

The OCCT and CGAL comparison grades every capability against those libraries and names what is missing; cargo xtask gaps prints its live state. It is useful context, not a capability declaration.

Released under the Mozilla Public License 2.0.