Skip to main content

surface_could_contain

Function surface_could_contain 

Source
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]) — narrowing v tightens the next u projection 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 within min_subdivision_size has 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.