template<class DATATYPE, class ELEMTYPE, int NUMDIMS, class ELEMTYPEREAL = ELEMTYPE, int TMAXNODES = 8, int TMINNODES = TMAXNODES / 2>
class makVrf::RTree< DATATYPE, ELEMTYPE, NUMDIMS, ELEMTYPEREAL, TMAXNODES, TMINNODES >
File I/O helper class, look below for implementation and notes.
! ! Implementation of RTree, a multidimensional bounding rectangle tree. ! Example usage: For a 3-dimensional tree use RTree<Object*, float, 3> myTree; ! ! This modified, templated C++ version by Greg Douglas at Auran (http://www.auran.com) ! ! DATATYPE Referenced data, should be int, void*, obj* etc. no larger than sizeof<void*> and simple type ! ELEMTYPE Type of element such as int or float ! NUMDIMS Number of dimensions such as 2 or 3 ! ELEMTYPEREAL Type of element that allows fractional and large values such as float or double, for use in volume calcs ! ! NOTES: Inserting and removing data requires the knowledge of its constant Minimal Bounding Rectangle. ! This version uses new/delete for nodes, I recommend using a fixed size allocator for efficiency. ! Instead of using a callback function for returned results, I recommend and efficient pre-sized, grow-only memory ! array similar to MFC CArray or STL Vector for returning search query result. !
|
| Node * | AllocNode () |
| |
| void | FreeNode (Node *a_node) |
| |
| void | InitNode (Node *a_node) |
| |
| void | InitRect (Rect *a_rect) |
| |
| bool | InsertRectRec (const Branch &a_branch, Node *a_node, Node **a_newNode, int a_level) |
| |
| bool | InsertRect (const Branch &a_branch, Node **a_root, int a_level) |
| |
| Rect | NodeCover (Node *a_node) |
| |
| bool | AddBranch (const Branch *a_branch, Node *a_node, Node **a_newNode) |
| |
| void | DisconnectBranch (Node *a_node, int a_index) |
| |
| int | PickBranch (const Rect *a_rect, Node *a_node) |
| |
| Rect | CombineRect (const Rect *a_rectA, const Rect *a_rectB) |
| |
| void | SplitNode (Node *a_node, const Branch *a_branch, Node **a_newNode) |
| |
| ELEMTYPEREAL | RectSphericalVolume (Rect *a_rect) |
| |
| ELEMTYPEREAL | RectVolume (Rect *a_rect) |
| |
| ELEMTYPEREAL | CalcRectVolume (Rect *a_rect) |
| |
| void | GetBranches (Node *a_node, const Branch *a_branch, PartitionVars *a_parVars) |
| |
| void | ChoosePartition (PartitionVars *a_parVars, int a_minFill) |
| |
| void | LoadNodes (Node *a_nodeA, Node *a_nodeB, PartitionVars *a_parVars) |
| |
| void | InitParVars (PartitionVars *a_parVars, int a_maxRects, int a_minFill) |
| |
| void | PickSeeds (PartitionVars *a_parVars) |
| |
| void | Classify (int a_index, int a_group, PartitionVars *a_parVars) |
| |
| bool | RemoveRect (Rect *a_rect, const DATATYPE &a_id, Node **a_root) |
| |
| bool | RemoveRectRec (Rect *a_rect, const DATATYPE &a_id, Node *a_node, ListNode **a_listNode) |
| |
| ListNode * | AllocListNode () |
| |
| void | FreeListNode (ListNode *a_listNode) |
| |
| bool | Overlap (Rect *a_rectA, Rect *a_rectB) const |
| |
| void | ReInsert (Node *a_node, ListNode **a_listNode) |
| |
| bool | Search (Node *a_node, Rect *a_rect, int &a_foundCount, std::function< bool(const DATATYPE &)> callback) const |
| |
| void | RemoveAllRec (Node *a_node) |
| |
| void | Reset () |
| |
| void | CountRec (Node *a_node, int &a_count) |
| |
| bool | SaveRec (Node *a_node, RTFileStream &a_stream) |
| |
| bool | LoadRec (Node *a_node, RTFileStream &a_stream) |
| |
| void | CopyRec (Node *current, Node *other) |
| |
template<class DATATYPE, class ELEMTYPE, int NUMDIMS, class ELEMTYPEREAL = ELEMTYPE, int TMAXNODES = 8, int TMINNODES = TMAXNODES / 2>
Fwd decl. Used by other internal structs and iterator.
These constant must be declared after Branch and before Node struct Stuck up here for MSVC 6 compiler. NSVC .NET 2003 is much happier.
| Enumerator |
|---|
| MAXNODES |
Max elements in node.
|
| MINNODES |
Min elements in node.
|
template<class DATATYPE, class ELEMTYPE, int NUMDIMS, class ELEMTYPEREAL = ELEMTYPE, int TMAXNODES = 8, int TMINNODES = TMAXNODES / 2>
| int makVrf::RTree< DATATYPE, ELEMTYPE, NUMDIMS, ELEMTYPEREAL, TMAXNODES, TMINNODES >::Count |
( |
| ) |
|
! Count the data elements in this container. This is slow as no internal counter is maintained.
template<class DATATYPE, class ELEMTYPE, int NUMDIMS, class ELEMTYPEREAL = ELEMTYPE, int TMAXNODES = 8, int TMINNODES = TMAXNODES / 2>
| ELEMTYPEREAL makVrf::RTree< DATATYPE, ELEMTYPE, NUMDIMS, ELEMTYPEREAL, TMAXNODES, TMINNODES >::m_unitSphereVolume |
|
protected |
Unit sphere constant for required number of dimensions.