|  | Box2D
    2.3.0
    A 2D Physics Engine for Games | 
 
 
 
   19 #ifndef B2_DYNAMIC_TREE_H 
   20 #define B2_DYNAMIC_TREE_H 
   23 #include <Box2D/Common/b2GrowableStack.h> 
   25 #define b2_nullNode (-1) 
   32         return child1 == b2_nullNode;
 
  101     template <
typename T>
 
  128     int32 AllocateNode();
 
  129     void FreeNode(int32 node);
 
  131     void InsertLeaf(int32 node);
 
  132     void RemoveLeaf(int32 node);
 
  134     int32 Balance(int32 index);
 
  136     int32 ComputeHeight() 
const;
 
  137     int32 ComputeHeight(int32 nodeId) 
const;
 
  139     void ValidateStructure(int32 index) 
const;
 
  140     void ValidateMetrics(int32 index) 
const;
 
  146     int32 m_nodeCapacity;
 
  153     int32 m_insertionCount;
 
  158     b2Assert(0 <= proxyId && proxyId < m_nodeCapacity);
 
  159     return m_nodes[proxyId].userData;
 
  164     b2Assert(0 <= proxyId && proxyId < m_nodeCapacity);
 
  165     return m_nodes[proxyId].
aabb;
 
  168 template <
typename T>
 
  174     while (stack.GetCount() > 0)
 
  176         int32 nodeId = stack.Pop();
 
  177         if (nodeId == b2_nullNode)
 
  188                 bool proceed = callback->QueryCallback(nodeId);
 
  189                 if (proceed == 
false)
 
  196                 stack.Push(node->child1);
 
  197                 stack.Push(node->child2);
 
  203 template <
typename T>
 
  213     b2Vec2 v = b2Cross(1.0f, r);
 
  219     float32 maxFraction = input.maxFraction;
 
  224         b2Vec2 t = p1 + maxFraction * (p2 - p1);
 
  232     while (stack.GetCount() > 0)
 
  234         int32 nodeId = stack.Pop();
 
  235         if (nodeId == b2_nullNode)
 
  251         float32 separation = b2Abs(b2Dot(v, p1 - c)) - b2Dot(abs_v, h);
 
  252         if (separation > 0.0f)
 
  260             subInput.p1 = input.p1;
 
  261             subInput.p2 = input.p2;
 
  262             subInput.maxFraction = maxFraction;
 
  264             float32 value = callback->RayCastCallback(subInput, nodeId);
 
  276                 b2Vec2 t = p1 + maxFraction * (p2 - p1);
 
  283             stack.Push(node->child1);
 
  284             stack.Push(node->child2);
 
  
A 2D column vector.
Definition: b2Math.h:53
Definition: b2DynamicTree.h:61
b2Vec2 GetExtents() const
Get the extents of the AABB (half-widths).
Definition: b2Collision.h:174
float32 LengthSquared() const
Definition: b2Math.h:108
const b2AABB & GetFatAABB(int32 proxyId) const
Get the fat AABB for a proxy.
Definition: b2DynamicTree.h:162
A node in the dynamic tree. The client does not interact with this directly.
Definition: b2DynamicTree.h:28
bool b2TestOverlap(const b2Shape *shapeA, int32 indexA, const b2Shape *shapeB, int32 indexB, const b2Transform &xfA, const b2Transform &xfB)
Determine if two generic shapes overlap.
Definition: b2Collision.cpp:233
b2Vec2 lowerBound
the lower vertex
Definition: b2Collision.h:214
Definition: b2GrowableStack.h:28
b2Vec2 GetCenter() const
Get the center of the AABB.
Definition: b2Collision.h:168
void RebuildBottomUp()
Build an optimal tree. Very expensive. For testing.
Definition: b2DynamicTree.cpp:694
float32 GetAreaRatio() const
Get the ratio of the sum of the node areas to the root area.
Definition: b2DynamicTree.cpp:531
~b2DynamicTree()
Destroy the tree, freeing the node pool.
Definition: b2DynamicTree.cpp:46
bool MoveProxy(int32 proxyId, const b2AABB &aabb1, const b2Vec2 &displacement)
Definition: b2DynamicTree.cpp:130
void * GetUserData(int32 proxyId) const
Definition: b2DynamicTree.h:156
void Validate() const
Validate this tree. For testing.
Definition: b2DynamicTree.cpp:653
void DestroyProxy(int32 proxyId)
Destroy a proxy. This asserts if the id is invalid.
Definition: b2DynamicTree.cpp:121
void RayCast(T *callback, const b2RayCastInput &input) const
Definition: b2DynamicTree.h:204
An axis aligned bounding box.
Definition: b2Collision.h:162
b2DynamicTree()
Constructing the tree initializes the node pool.
Definition: b2DynamicTree.cpp:22
b2Vec2 upperBound
the upper vertex
Definition: b2Collision.h:215
int32 CreateProxy(const b2AABB &aabb, void *userData)
Create a proxy. Provide a tight fitting AABB and a userData pointer.
Definition: b2DynamicTree.cpp:105
b2AABB aabb
Enlarged AABB.
Definition: b2DynamicTree.h:36
void Query(T *callback, const b2AABB &aabb) const
Definition: b2DynamicTree.h:169
int32 GetHeight() const
Definition: b2DynamicTree.cpp:520
float32 Normalize()
Convert this vector into a unit vector. Returns the length.
Definition: b2Math.h:114
int32 GetMaxBalance() const
Definition: b2DynamicTree.cpp:672
void ShiftOrigin(const b2Vec2 &newOrigin)
Definition: b2DynamicTree.cpp:770