geomcore 0.35.0

A pure, standalone geometric kernel for CAD-grade curves and surfaces: parametric evaluation, transformations, and curve-on-surface parametrization.
Documentation
# Roadmap

`geomcore` grows from a parametric-evaluation core toward a full geometric-query
library. This roadmap is ordered by dependency, not by date — items build on the
ones before them. If you'd like to help with any of it, see
[Contributing](#contributing) below.

## Shipped

- **0.1** — Parametric evaluation for lines, conics, and B-spline curves
  (rational and periodic), and for planes, cylinders, cones, spheres, tori,
  and B-spline surfaces — in Rust and Python. Rigid transformations via a
  single `Transform` type. Analytic curve-on-surface parametrization for
  lines and circles on the five elementary surfaces. Golden-fixture
  validation of every numeric result at 1e-7 tolerance.
- **0.2** — `2D`/`3D` type renames; `__init__`-only Python constructors.
- **0.3–0.4** — Public `Tolerance` API; point containment on all analytic
  curves and surfaces.
- **0.5** — Closed-form point projection (with batch variants) on lines,
  circles, planes, cylinders, spheres, cones, and tori.
- **0.6–0.10** — Analytic intersections with tangency/coincidence
  classification: plane pairs, plane–quadrics, sphere–sphere, line vs.
  quadrics, symmetric quadric pairs, coaxial torus pairs, cone–cone.
  Non-analytic configurations report `NotAnalytic` (never silent).
- **0.11** — Internal numerical toolbox (real polynomial roots with
  multiplicity, Newton, Gauss-Newton, Brent), zero dependencies.
- **0.12–0.14** — Projection and extrema on conics (quartic/cubic
  stationarity), B-spline curves, and B-spline surfaces; containment
  complete across every curve and surface type.
- **0.15–0.16** — Analytic curve–curve intersections: 2D pairs,
  3D line–line, line–circle, and coplanar circle–circle.
- **0.17** — Generic curve–surface intersection over the
  `ParametricCurve3D` × `ParametricSurface` traits.
- **0.18** — Points-to-B-spline interpolation (chordal/centripetal,
  averaged knots, banded LU).
- **0.19** — Marching surface–surface intersection with B-spline fits.
- **0.20** — Numeric curve-on-surface parametrization fallback, validated
  against every analytic pcurve.
- **0.21** — Generic 3D curve–curve intersection and extrema.
- **0.22** — B-spline least-squares approximation.
- **0.23–0.25** — Analytic intersections of circles and conics with the
  quadrics, and of lines and circles with conics. Closed-form measures
  (circumference, areas, sphere volume).
- **0.25** — Hand-written Python type stubs (PEP 561) for IDE support.
- **0.26** — `transformed` on every 3D curve and surface. Exact projection
  and extrema on B-spline curves and surfaces. Curve–surface tangency
  decided by distance. Curve–curve extrema as the local distance minima
  over the curves' domains.
- **0.27** — Double-nappe cones in every intersection. Constructors reject
  NaN, infinite inputs and zero-size conics. Marching intersection finds
  curves between its seed grid lines and traces each loop once.
  Villarceau circles in torus–plane intersection.
- **0.28** — Trimmed curves (segments, arcs, pieces of B-splines) whose
  numeric intersections and extrema only search their range.
- **0.29** — One entry point for exact intersections, `a.intersect(&b)` in
  either order, also on shapes whose type is only known at run time; the
  per-pair methods are deprecated. Hits carry a multiplicity. Trimmed
  curves in Python.
- **0.30** — Fixes: tangent contacts of circles and ellipses with conics
  and quadrics near half a turn, circles meeting a cylinder or cone at
  three points, numeric curve–surface hits at a sphere's pole or a cone's
  apex.
- **0.31** — Exact intersections between any two conics, coplanar or in
  crossing planes, with hit multiplicity; faster `contains` on ellipses,
  parabolas and hyperbolas; faster tangency detection through quartics.
- **0.32** — B-spline editing: knot insertion and removal, degree
  elevation, splitting, extraction and reversal, Bézier pieces, arc
  length, and fitting within a deviation. Elementary curves and surfaces
  as exact B-splines; bounding boxes. Curve discretization with proven
  deviations. B-spline intersections and extrema pruned with Bézier hulls,
  reporting whether their search was complete. Faster evaluation, fitting
  and projection.

## Next

1. **Marching intersection** — trace through points where the two
   surfaces touch, and find isolated loops smaller than the seed grid on
   surfaces other than B-splines (two B-spline surfaces already find them
   from overlapping patch pairs, #30).
2. **Hosted documentation** — tutorials on the docs site, and a Python
   API reference generated from docstrings.

## Someday

- Topology / B-rep. Explicitly out of scope until the geometry layer above is
  solid — `geomcore` should stay useful to people who only need the math.

## Contributing

Contributions are very welcome, at every stage of this roadmap.

- **Pick an item and open an issue first** so we can agree on scope and API
  shape before you invest time.
- **The quality bar:** every numeric feature lands with golden-fixture tests
  (1e-7 tolerance), rustdoc with doctests, and — where it's user-facing —
  Python bindings and tests.
- **Good first contributions:** new curve/surface types via the
  `ParametricCurve3D` / `ParametricSurface` traits (no changes to core dispatch
  needed), examples, documentation, and benchmarks.