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.
Where the implementation stands against the ambition
Graph execution today still stores results as triangles: axiolid-mesh-compile memoises every graph node as a TriMesh, so a surface it can represent exactly is discretised at the first graph edge. The focused certified affine trace arrangement in axiolid-construct now returns an analytic ExactBRep, but it is not yet carried through the graph. For a unit cylinder this under-reports volume by 6.4e-03 at 32 segments and 2.5e-05 at 512, always in the same direction, and chained operations compound it.
Closing that gap is the kernel's main line of work. Until it is closed, treat any exactness claim as applying to evaluation, not to operation results.
Core and reference work
| Capability | Status | Evidence / boundary |
|---|---|---|
| Scalar values, frames, transforms, bounds, intervals, tolerance | Implemented | axiolid-core |
| Mesh values, polygon/triangle utilities and views | Implemented | axiolid-mesh |
| Robust-orientation and in-circle / in-sphere predicate reference paths | Implemented | axiolid-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 generation | Implemented broad discrete path plus focused analytic arrangement | axiolid-construct; profile/path families remain mesh results. A one-owner certified affine surface trace becomes two closed trimmed faces plus an explicit embedded pcurve on the containing face; see ADR 0029 |
| Scalar graph compilation | Implemented reference path | axiolid-mesh-compile; DAG traversal, caching, model-driven directrices, and B-rep face tessellation. Consumes axiolid-construct rather than owning sweeps. Produces meshes today; see ADR 0020 |
| Polygon triangulation | Implemented provider | axiolid-tessellation-contract adopts Earcut under the contract in ADR 0015 |
| Mesh Boolean execution | Optional provider | axiolid-mesh-boolean-boolmesh; limited to its mesh contract and tests |
| Mesh plane section | Implemented scalar oracle | axiolid-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
| Capability | Status | Notes |
|---|---|---|
| Primitive solids and half-spaces | Represented | axiolid-primitive owns neutral values and validation |
| Profiles / contours | Represented with validation | axiolid-profile |
| Curves and surfaces | Represented | axiolid-curve, axiolid-surface; representation alone is not an evaluator claim |
| Polynomial/rational B-spline evaluation | Implemented scalar oracle | axiolid-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 2D | Implemented | axiolid-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 flattening | Implemented | axiolid-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 surfaces | Implemented | axiolid-evaluate (re-exported by axiolid-reference); plane/cylinder/cone/sphere/torus with residual validation, refusing degenerate axis/apex/pole points |
| General NURBS differential analysis | Implemented reference path | axiolid-nurbs; curve tangents/curvature and surface fundamental forms, normals, Gaussian/mean/principal curvature; see ADR 0022 |
| NURBS inverse queries | Implemented reference paths plus bounded certified slices | axiolid-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; see ADR 0025 and ADR 0030 |
| Planar clamped NURBS curve/curve roots | Implemented bounded reference slice | axiolid-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, and explicit unresolved singular/boundary boxes. General tangency and seam ownership/deduplication remain unimplemented; see ADR 0026 |
| Clamped, internally continuous NURBS curve/surface roots | Implemented bounded reference slice | axiolid-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 transformations | Implemented | axiolid-nurbs; homogeneous curve knot insertion/reversal/split/Bézier decomposition and surface U/V insertion/reversal preserve the represented shape |
| Verified periodic curve views | Implemented bounded semantics | axiolid-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 surfaces | Implemented fixed-topology semantics | Cyclic U/V/UV schema, wrapped jets, alias-safe edits, and certified projection; see ADR 0032 |
| Trimmed curved-face tessellation | Implemented bounded reference path | axiolid-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 vocabulary | Represented | axiolid-topology provides generic typed-role topology; axiolid-brep provides strict owned analytic catalogs and required native trim spans |
| Exact B-rep result contract | Implemented contract with one focused constructor | axiolid-brep::ExactBRep refuses missing supports/spans and generic topology failures. axiolid-construct constructs the certified one-owner affine trace arrangement; see ADR 0024 and ADR 0029 |
| Exact B-rep operation results | Focused affine arrangement only; general operations planned | One bounded surface-pair slice returns analytic supports, closed trims, an embedded face curve, native spans, and a residual certificate. Sweeps, booleans, solids, graph persistence, and curved intersections remain unimplemented |
| Single-span affine NURBS surface/surface traces | Implemented bounded reference slice with focused topology handoff | axiolid-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; see ADR 0028 and ADR 0029 |
| Immutable shared geometry DAG | Implemented structural model | axiolid-model uses typed IDs and backward references |
| Sweeps / extrusions / revolutions / lofts | Implemented discrete reference path; exact-result contract ready | axiolid-construct does not yet construct exact B-rep sweeps. Its L2 result boundary now requires an explicit exact B-rep or tolerance-bearing tessellation request; exact construction remains L2 and must not return mesh fallbacks |
| Spatial, measures, healing | Focused crates / staged capability | Consult each crate’s PLAN.md; do not infer broad CAD coverage |
Execution and acceleration
| Capability | Status | Boundary |
|---|---|---|
| Portable CPU context | Implemented shell | axiolid-backend-cpu; portable defaults and explicit feature tiers |
| Parallel / SIMD | Opt-in context features | They require measurement and differential validation before performance claims |
| GPU graph execution | Contract seam | axiolid-backend-gpu provides an API-neutral seam, not a bundled GPU algorithm suite |
| Native CUDA/HIP | Planned out-of-tree providers | See 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:
- Exact B-rep results carried through operations, rather than meshes between graph nodes.
- 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:
- The relevant crate’s public API and tests.
- The architecture decision that defines the contract.
- Feature-isolation and layering gates.
- Benchmark reports for performance statements.
The research comparison is useful context, but it is not a capability declaration.