#[repr(C)]
pub struct GenericQbvh<LeafData, Storage: QbvhStorage<LeafData>> { /* private fields */ }
Expand description

A quaternary bounding-volume-hierarchy.

This is a bounding-volume-hierarchy where each node has either four children or none.

Implementations§

source§

impl<LeafData: IndexedData> GenericQbvh<LeafData, DefaultStorage>

source

pub fn new() -> Self

Initialize an empty Qbvh.

source

pub fn iter_data_mut( &mut self ) -> impl Iterator<Item = (NodeIndex, &mut LeafData)>

Iterates mutably through all the leaf data in this Qbvh.

source

pub fn iter_data(&self) -> impl Iterator<Item = (NodeIndex, &LeafData)>

Iterate through all the leaf data in this Qbvh.

source

pub fn node_aabb(&self, node_id: NodeIndex) -> Option<Aabb>

The Aabb of the given node.

source

pub fn leaf_data(&self, node_id: NodeIndex) -> Option<LeafData>

Returns the data associated to a given leaf.

Returns None if the provided node ID does not identify a leaf.

source

pub fn raw_nodes(&self) -> &[QbvhNode]

The raw nodes of this BVH.

If this Qbvh isn’t empty, the first element of the returned slice is the root of the tree. The other elements are not arranged in any particular order. The more high-level traversal methods should be used instead of this.

source

pub fn raw_proxies(&self) -> &[QbvhProxy<LeafData>]

The raw proxies of this BVH.

If this Qbvh isn’t empty, the first element of the returned slice is the root of the tree. The other elements are not arranged in any particular order. The more high-level traversal methods should be used instead of this.

source

pub fn scaled(self, scale: &Vector<Real>) -> Self

Computes a scaled version of this Qbvh.

This will apply the scale to each Aabb on this BVH.

source§

impl<LeafData: IndexedData, Storage: QbvhStorage<LeafData>> GenericQbvh<LeafData, Storage>

source

pub fn root_aabb(&self) -> &Aabb

The Aabb of the root of this tree.

source§

impl<LeafData: IndexedData> GenericQbvh<LeafData, DefaultStorage>

source

pub fn clear_and_rebuild( &mut self, data_gen: impl QbvhDataGenerator<LeafData>, dilation_factor: Real )

Clears this quaternary BVH and rebuilds it from a new set of data and Aabbs.

source§

impl<LeafData: IndexedData> GenericQbvh<LeafData, DefaultStorage>

source

pub fn clear_and_rebuild_with_splitter( &mut self, data_gen: impl QbvhDataGenerator<LeafData>, splitter: impl QbvhDataSplitter<LeafData>, dilation_factor: Real )

Clears this quaternary BVH and rebuilds it from a new set of data and Aabbs.

source§

impl<LeafData: IndexedData, Storage: QbvhStorage<LeafData>> GenericQbvh<LeafData, Storage>

source

pub fn traverse_depth_first( &self, visitor: &mut impl SimdVisitor<LeafData, SimdAabb> ) -> bool

Performs a depth-first traversal on the BVH.

§Return

Returns false if the traversal exitted early, and true otherwise.

source

pub fn traverse_depth_first_node( &self, visitor: &mut impl SimdVisitor<LeafData, SimdAabb>, start_node: u32 ) -> bool

Performs a depth-first traversal on the BVH, starting at the given node.

§Return

Returns false if the traversal exitted early, and true otherwise.

source

pub fn traverse_depth_first_with_stack( &self, visitor: &mut impl SimdVisitor<LeafData, SimdAabb>, stack: &mut Vec<u32> ) -> bool

Performs a depth-first traversal on the BVH.

§Return

Returns false if the traversal exited early, and true otherwise.

source

pub fn traverse_depth_first_node_with_stack( &self, visitor: &mut impl SimdVisitor<LeafData, SimdAabb>, stack: &mut Vec<u32>, start_node: u32 ) -> bool

Performs a depth-first traversal on the BVH.

§Return

Returns false if the traversal exited early, and true otherwise.

source

pub fn traverse_best_first<BFS>( &self, visitor: &mut BFS ) -> Option<(NodeIndex, BFS::Result)>
where BFS: SimdBestFirstVisitor<LeafData, SimdAabb>, BFS::Result: Clone,

Performs a best-first-search on the BVH.

Returns the content of the leaf with the smallest associated cost, and a result of user-defined type.

source

pub fn traverse_best_first_node<BFS>( &self, visitor: &mut BFS, start_node: u32, init_cost: Real ) -> Option<(NodeIndex, BFS::Result)>
where BFS: SimdBestFirstVisitor<LeafData, SimdAabb>, BFS::Result: Clone,

Performs a best-first-search on the BVH, starting at the given node.

Returns the content of the leaf with the smallest associated cost, and a result of user-defined type.

source

pub fn intersect_aabb(&self, aabb: &Aabb, out: &mut Vec<LeafData>)

Retrieve all the data of the nodes with Aabbs intersecting the given Aabb:

source

pub fn traverse_bvtt<LeafData2: IndexedData>( &self, qbvh2: &Qbvh<LeafData2>, visitor: &mut impl SimdSimultaneousVisitor<LeafData, LeafData2, SimdAabb> )

Performs a simultaneous traversal of two Qbvh.

source

pub fn traverse_bvtt_with_stack<LeafData2: IndexedData>( &self, qbvh2: &Qbvh<LeafData2>, visitor: &mut impl SimdSimultaneousVisitor<LeafData, LeafData2, SimdAabb>, stack: &mut Vec<(u32, u32)> )

Performs a simultaneous traversal of two Qbvh.

source

pub fn traverse_modified_bvtt<LeafData2: IndexedData>( &self, qbvh2: &Qbvh<LeafData2>, visitor: &mut impl SimdSimultaneousVisitor<LeafData, LeafData2, SimdAabb> )

Performs a simultaneous traversal of two Qbvh.

source

pub fn traverse_modified_bvtt_with_stack<LeafData2: IndexedData>( &self, qbvh2: &Qbvh<LeafData2>, visitor: &mut impl SimdSimultaneousVisitor<LeafData, LeafData2, SimdAabb>, stack: &mut Vec<(u32, u32)> )

Performs a simultaneous traversal of two Qbvh.

source§

impl<LeafData: IndexedData> GenericQbvh<LeafData, DefaultStorage>

source

pub fn remove(&mut self, data: LeafData) -> Option<LeafData>

Immediately remove a leaf from this QBVH.

source

pub fn pre_update_or_insert(&mut self, data: LeafData)

Prepare a new leaf for insertion into this QBVH (or for update if it already exists).

The insertion or update will be completely valid only after the next call to Qbvh::refit.

source

pub fn refit<F>( &mut self, margin: Real, workspace: &mut QbvhUpdateWorkspace, aabb_builder: F ) -> usize
where F: Fn(&LeafData) -> Aabb,

Update all the nodes that have been marked as dirty by Qbvh::pre_update_or_insert, and Qbvh::remove.

This will not alter the topology of this Qbvh.

source

pub fn rebalance(&mut self, margin: Real, workspace: &mut QbvhUpdateWorkspace)

Rebalances the Qbvh tree.

This will modify the topology of this tree. This assumes that the leaf AABBs have already been updated with Qbvh::refit.

Trait Implementations§

source§

impl<LeafData, Storage> Clone for GenericQbvh<LeafData, Storage>
where Storage: QbvhStorage<LeafData>, Storage::Nodes: Clone, Storage::ArrayU32: Clone, Storage::ArrayProxies: Clone,

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<LeafData: Debug, Storage: Debug + QbvhStorage<LeafData>> Debug for GenericQbvh<LeafData, Storage>
where Storage::Nodes: Debug, Storage::ArrayU32: Debug, Storage::ArrayProxies: Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<LeafData, Storage> Copy for GenericQbvh<LeafData, Storage>
where Storage: QbvhStorage<LeafData>, Storage::Nodes: Copy, Storage::ArrayU32: Copy, Storage::ArrayProxies: Copy,

Auto Trait Implementations§

§

impl<LeafData, Storage> Freeze for GenericQbvh<LeafData, Storage>
where <Storage as QbvhStorage<LeafData>>::ArrayProxies: Freeze, <Storage as QbvhStorage<LeafData>>::ArrayU32: Freeze, <Storage as QbvhStorage<LeafData>>::Nodes: Freeze,

§

impl<LeafData, Storage> RefUnwindSafe for GenericQbvh<LeafData, Storage>
where <Storage as QbvhStorage<LeafData>>::ArrayProxies: RefUnwindSafe, <Storage as QbvhStorage<LeafData>>::ArrayU32: RefUnwindSafe, <Storage as QbvhStorage<LeafData>>::Nodes: RefUnwindSafe,

§

impl<LeafData, Storage> Send for GenericQbvh<LeafData, Storage>
where <Storage as QbvhStorage<LeafData>>::ArrayProxies: Send, <Storage as QbvhStorage<LeafData>>::ArrayU32: Send, <Storage as QbvhStorage<LeafData>>::Nodes: Send,

§

impl<LeafData, Storage> Sync for GenericQbvh<LeafData, Storage>
where <Storage as QbvhStorage<LeafData>>::ArrayProxies: Sync, <Storage as QbvhStorage<LeafData>>::ArrayU32: Sync, <Storage as QbvhStorage<LeafData>>::Nodes: Sync,

§

impl<LeafData, Storage> Unpin for GenericQbvh<LeafData, Storage>
where <Storage as QbvhStorage<LeafData>>::ArrayProxies: Unpin, <Storage as QbvhStorage<LeafData>>::ArrayU32: Unpin, <Storage as QbvhStorage<LeafData>>::Nodes: Unpin,

§

impl<LeafData, Storage> UnwindSafe for GenericQbvh<LeafData, Storage>
where <Storage as QbvhStorage<LeafData>>::ArrayProxies: UnwindSafe, <Storage as QbvhStorage<LeafData>>::ArrayU32: UnwindSafe, <Storage as QbvhStorage<LeafData>>::Nodes: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> Downcast for T
where T: Any,

source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.