Click or drag to resize
DigitalRuneAdaptiveAabbTreeT Class
Builds a bounding volume tree using axis-aligned bounding boxes (AABBs), which adapts automatically when items are added, moved, or removed.
Inheritance Hierarchy
SystemObject
  DigitalRune.Geometry.PartitioningBasePartitionT
    DigitalRune.Geometry.PartitioningAdaptiveAabbTreeT

Namespace: DigitalRune.Geometry.Partitioning
Assembly: DigitalRune.Geometry (in DigitalRune.Geometry.dll) Version: 1.18.0.0 (1.18.2.14427)
Syntax
public class AdaptiveAabbTree<T> : BasePartition<T>, 
	ISupportClosestPointQueries<T>

Type Parameters

T
The type of item in the spatial partition.

The AdaptiveAabbTreeT type exposes the following members.

Constructors
  NameDescription
Public methodAdaptiveAabbTreeT
Initializes a new instance of the AdaptiveAabbTreeT class
Top
Methods
  NameDescription
Public methodAdd (Inherited from BasePartitionT.)
Public methodClear (Inherited from BasePartitionT.)
Public methodClone (Inherited from BasePartitionT.)
Protected methodCloneCore (Overrides BasePartitionTCloneCore(BasePartitionT).)
Public methodContains (Inherited from BasePartitionT.)
Public methodCopyTo (Inherited from BasePartitionT.)
Protected methodCreateInstanceCore (Overrides BasePartitionTCreateInstanceCore.)
Public methodEquals
Determines whether the specified Object is equal to the current Object.
(Inherited from Object.)
Protected methodFinalize
Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.
(Inherited from Object.)
Public methodGetClosestPointCandidates(Aabb, Single, FuncT, Single)
Gets all items that are candidates for the smallest closest-point distance to a given axis-aligned bounding box (AABB).
Public methodGetClosestPointCandidates(Vector3F, Pose, ISpatialPartitionT, Vector3F, Pose, FuncT, T, Single)
Gets all items that are candidates for the smallest closest-point distance to items in a given partition.
Public methodGetEnumerator
Returns an enumerator that iterates through the collection.
(Inherited from BasePartitionT.)
Public methodGetHashCode
Serves as a hash function for a particular type.
(Inherited from Object.)
Public methodGetOverlaps
Gets overlaps of all items contained in this spatial partition.
(Inherited from BasePartitionT.)
Public methodGetOverlaps(Aabb)
Gets the items that touch the given axis-aligned bounding box (AABB).
(Overrides BasePartitionTGetOverlaps(Aabb).)
Public methodGetOverlaps(Aabb)
Gets the items that touch the given axis-aligned bounding box (AABB).
(Inherited from BasePartitionT.)
Public methodGetOverlaps(ISpatialPartitionT)
Gets overlaps between all items of this spatial partition and the items of another spatial partition.
(Overrides BasePartitionTGetOverlaps(ISpatialPartitionT).)
Public methodGetOverlaps(Ray)
Gets the items that touch the given ray.
(Overrides BasePartitionTGetOverlaps(Ray).)
Public methodGetOverlaps(Vector3F, Pose, ISpatialPartitionT, Vector3F, Pose)
Gets overlaps between all items of this spatial partition and the items of another spatial partition.
(Overrides BasePartitionTGetOverlaps(Vector3F, Pose, ISpatialPartitionT, Vector3F, Pose).)
Public methodGetType
Gets the Type of the current instance.
(Inherited from Object.)
Public methodInvalidate
Invalidates the cached spatial information of all items in the spatial partition.
(Inherited from BasePartitionT.)
Public methodInvalidate(T)
Invalidates the cached spatial information of the specified item.
(Inherited from BasePartitionT.)
Protected methodMemberwiseClone
Creates a shallow copy of the current Object.
(Inherited from Object.)
Public methodRemove (Inherited from BasePartitionT.)
Public methodToString
Returns a string that represents the current object.
(Inherited from Object.)
Public methodUpdate (Inherited from BasePartitionT.)
Top
Properties
  NameDescription
Public propertyAabb
Gets the axis-aligned bounding box (AABB) that contains all items.
(Inherited from BasePartitionT.)
Public propertyBottomUpBuildThreshold
Gets or sets the threshold that determines when a bottom-up tree build method is used.
Public propertyCount (Inherited from BasePartitionT.)
Public propertyEnableSelfOverlaps
Gets or sets a value indicating whether self-overlaps are computed.
(Inherited from BasePartitionT.)
Public propertyFilter
Gets or sets the filter that is used to filter overlaps of two items.
(Inherited from BasePartitionT.)
Public propertyGetAabbForItem
Gets or sets the method that computes the Aabb of an item.
(Inherited from BasePartitionT.)
Top
Explicit Interface Implementations
  NameDescription
Explicit interface implementationPrivate methodIEnumerableTGetEnumerator
Returns an enumerator that iterates through the collection.
(Inherited from BasePartitionT.)
Explicit interface implementationPrivate methodIEnumerableGetEnumerator
Returns an enumerator that iterates through a collection.
(Inherited from BasePartitionT.)
Explicit interface implementationPrivate propertyICollectionTIsReadOnly (Inherited from BasePartitionT.)
Explicit interface implementationPrivate methodISpatialPartitionTClone
Creates a new spatial partition that is a clone (deep copy) of the current instance.
(Inherited from BasePartitionT.)
Top
Remarks

The AdaptiveAabbTreeT is based on

  • Thomas Larsson: "Adaptive Bounding Volume Hierarchies for Efficient Collision Queries", Ph D Thesis, Mälardalen University Press, January, 2009
  • Thomas Larsson, Tomas Akenine-Möller: "A dynamic bounding volume hierarchy for generalized collision detection", Computers & Graphics, Volume 30, Issue 3, p.451-460, June, 2006

The AdaptiveAabbTreeT was designed to manage deformable objects efficiently. It should be used for CompositeShapes or TriangleMeshShapes when the contained shapes or triangles are updated at runtime.

AdaptiveAabbTreeT vs. DynamicAabbTreeT: The AdaptiveAabbTreeT and the DynamicAabbTreeT are similar data structures. As a general rule, the AdaptiveAabbTreeT should be used if

Whereas the DynamicAabbTreeT should be used if

The AdaptiveAabbTreeT should not be used as the collision detection broad-phase (see BroadPhase). Whereas, a DynamicAabbTreeT can be used as the collision detection broad-phase.

However, please note these are just general guidelines. You should always try different ISpatialPartitionT types and measure which one yields the best performance in your application.

Special handling of self-overlaps in GetOverlaps(ISpatialPartitionT): If GetOverlaps(ISpatialPartitionT) is used to test an AABB tree against itself then overlaps of an item with itself are not returned; that means, each item A overlaps with itself but (A, A) is not returned. And if two different items overlap, only one overlap is returned, for example: If item A and item B overlap (A, B) or (B, A) is returned but not both.

See Also