pub struct SurfaceIntersectionOptions {
pub tolerance: f64,
pub seed_density: f64,
pub maximum_steps: usize,
pub maximum_step: Option<f64>,
pub seed_points: Vec<Vec3>,
pub seed_only: bool,
pub seed_gate: Option<f64>,
pub span_budget: Option<f64>,
pub ordered_starts: bool,
pub consume_starts: bool,
pub tree_seeds: bool,
pub seed_start_cross: Option<f64>,
}Fields§
§tolerance: f64§seed_density: f64§maximum_steps: usize§maximum_step: Option<f64>§seed_points: Vec<Vec3>§seed_only: bool§seed_gate: Option<f64>§span_budget: Option<f64>When set, every accepted span is re-sampled as the cubic Hermite through its two stations — chord-scaled tangents, in 3D and in each carrier’s parameter plane — at five interior parameters, and the span’s deviation is the largest distance among the 3D Hermite and the two carriers’ images of their parameter Hermites. A span over the budget is rejected and re-stepped at half the step (accepted at the minimum step regardless), and the step grows only while the deviation stays under an eighth of the budget. The curve then reports its station tangents and its largest span deviation.
None, the default, measures nothing and marches exactly as before.
The budget a lane carries is what its FIT can absorb (the imprint’s
intersection_fit), never the corrector’s tolerance: a cubic
Hermite over a circle of radius r with step h misses by about
r (h/r)^4 / 384, so a budget of 1e-7 would hold the step near
r/15 and multiply stations on every curved section.
ordered_starts: boolOff, the default, keeps the grid-then-seeds order byte for byte.
consume_starts: boolA3’s second half: a start an earlier trace ran through is consumed with a station snapped to it (the start is a refined intersection point, the chord it lies by is not), instead of merely dropped. Off, the default, keeps the first-claimant rule. Measured apart from the ordering because it inserts stations into traced curves.
tree_seeds: boolThe transverse gate stays. Off, the default, grids as before.
seed_start_cross: Option<f64>SUB-GATE STARTS (2026-10-17, the revolve-into-bore report): the
|n_a × n_b| an EXPLICIT seed is admitted at, in place of
[TRANSVERSE_START_CROSS]. Grid and tree starts keep the gate: the
tangency-band runaway it exists for is theirs (a refined start inside
a band is a point no transverse curve passes through). An explicit
seed the caller has PROVEN to lie on a crossing — a trim edge of one
face that leaves one side of the other carrier for the other at the
seed — is a point of a transverse section whatever the angle, and the
march from it is sound down to where the corrector can still tell the
section from the tangency band: the lateral uncertainty tol / α of
a crossing at angle α against the band’s half-width √(2 R tol)
across a contact of curvature radius R, so α ≥ √(tol / 2R); the
caller derives the bound from its own tolerance and scale. A seed
below it is dropped exactly as before. None, the default, keeps the
gate byte for byte.