pub struct PointIndex { /* private fields */ }Expand description
A uniform-grid index over a point set.
A grid rather than a k-d tree because scan data is dense and roughly uniform: bucketing is O(n) to build with no comparisons, and a radius query touches only the cells the sphere overlaps. A k-d tree wins on wildly non-uniform data, which is why this type is deliberately not the only shape the API could take — the query methods are what callers use, so the structure can change without moving them.
Implementations§
Source§impl PointIndex
impl PointIndex
Sourcepub fn build(points: &[DVec3]) -> PointIndex
pub fn build(points: &[DVec3]) -> PointIndex
Build an index over the given positions.
Non-finite positions are dropped from the index and reported by
rejected; they are not silently treated as
present at the origin, which would corrupt every query near it.
Sourcepub fn for_each_within(
&self,
query: DVec3,
radius: f64,
visit: impl FnMut(PointHit),
) -> Result<(), PointQueryError>
pub fn for_each_within( &self, query: DVec3, radius: f64, visit: impl FnMut(PointHit), ) -> Result<(), PointQueryError>
Visit every point within radius of query.
Results are exact and complete. Visit order is unspecified; use
radius_into when order matters.
§Errors
Refuses a non-finite query position and a negative or non-finite radius, rather than returning an empty result that a caller could mistake for “nothing nearby”.
Sourcepub fn radius_into(
&self,
query: DVec3,
radius: f64,
out: &mut Vec<PointHit>,
) -> Result<(), PointQueryError>
pub fn radius_into( &self, query: DVec3, radius: f64, out: &mut Vec<PointHit>, ) -> Result<(), PointQueryError>
Collect every point within radius, ordered by distance then index.
The vector is cleared first, so a caller may reuse one buffer across many queries and allocate once.
§Errors
As for_each_within.
Sourcepub fn nearest_into(
&self,
query: DVec3,
k: usize,
out: &mut Vec<PointHit>,
) -> Result<(), PointQueryError>
pub fn nearest_into( &self, query: DVec3, k: usize, out: &mut Vec<PointHit>, ) -> Result<(), PointQueryError>
Collect the k nearest points, ordered by distance then index.
Fewer than k are returned when the cloud holds fewer usable
points; that is a complete answer, not a truncated one.
§Errors
Refuses a non-finite query position.
Trait Implementations§
Source§impl Clone for PointIndex
impl Clone for PointIndex
Source§fn clone(&self) -> PointIndex
fn clone(&self) -> PointIndex
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for PointIndex
impl RefUnwindSafe for PointIndex
impl Send for PointIndex
impl Sync for PointIndex
impl Unpin for PointIndex
impl UnwindSafe for PointIndex
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more