pub fn surface_could_contain(
surface: &NurbSurface<4>,
point: &Vector3,
max_nodes: usize,
min_subdivision_size: Scalar,
) -> GeopResult<Option<(Scalar, Scalar)>>Expand description
Every (u, v) at which surface could pass through point
(surface.md §§4–5): the componentwise union of every converged patch’s
clipped (u, v) box, exploring breadth-first.
Per patch:
- the cached AABB and the [
clip] are necessary conditions — failing either rejects the patch; - if a direction collapsed onto a clamped domain end, the boundary row is
searched with
curve_could_contain; - while the clip keeps shrinking the patch, it is restricted to the clip
([
crate::fat_line::restriction]) — narrowingvtightens the nextuprojection and vice versa; - once clipping stalls ([
crate::fat_line::stalled]), a patch whose extent along both directions (control-polygon lengths, which bound a folded patch where corner chords don’t) is withinmin_subdivision_sizehas converged and is reported with its clipped box; any other is bisected along its spatially longest direction.
min_subdivision_size only bounds bisection: a patch that clipping keeps
shrinking is never reported early, so a point merely within
min_subdivision_size of the surface is still rejected.
None means every part of the domain was rejected. Running out of
max_nodes is never read as “not contained” (nor as “contained”): it is
an error, since the search is incomplete. The boundary curve search gets
the remaining budget as its own.