All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Types | Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | Friends | List of all members
SurgSim::DataStructures::OctreeNode< Data > Class Template Reference

Octree data structure. More...

#include <SurgSim/DataStructures/OctreeNode.h>

Inheritance diagram for SurgSim::DataStructures::OctreeNode< Data >:
Inheritance graph
[legend]
Collaboration diagram for SurgSim::DataStructures::OctreeNode< Data >:
Collaboration graph
[legend]

Public Types

typedef Eigen::AlignedBox
< double, 3 > 
AxisAlignedBoundingBox
 Bounding box type for convenience. More...
 

Public Member Functions

 OctreeNode ()
 Constructor. More...
 
 OctreeNode (const OctreeNode &other)
 Copy constructor when the template data is the same type. More...
 
template<class T >
 OctreeNode (const OctreeNode< T > &other)
 Copy constructor when the template data is a different type In this case, no data will be copied. More...
 
 OctreeNode (const SurgSim::Math::Aabbd &boundingBox)
 Constructor. More...
 
virtual ~OctreeNode ()
 Destructor. More...
 
const SurgSim::Math::AabbdgetBoundingBox () const
 Get the bounding box for this octree node. More...
 
bool isActive () const
 Is this node active. More...
 
void setIsActive (bool isActive)
 Set active flag for this octree node. More...
 
bool hasChildren () const
 Does this node have children. More...
 
void subdivide ()
 Subdivide the node into 8 equal regions. More...
 
bool addData (const SurgSim::Math::Vector3d &position, const Data &nodeData, const int level)
 Add data to a node in this octree The octree will build the octree as necessary to add the node at the specified level. More...
 
std::array< std::shared_ptr
< OctreeNode< Data > >, 8 > & 
getChildren ()
 Get the children of this node (non const version) More...
 
const std::array
< std::shared_ptr< OctreeNode
< Data > >, 8 > & 
getChildren () const
 Get the children of this node. More...
 
std::shared_ptr< OctreeNode
< Data > > 
getChild (size_t index)
 Get a child of this node (non const version) More...
 
const std::shared_ptr
< OctreeNode< Data > > 
getChild (size_t index) const
 Get a child of this node. More...
 
virtual std::shared_ptr
< OctreeNode< Data > > 
getNode (const OctreePath &path, bool returnLastValid=false)
 Get the node at the supplied path. More...
 
- Public Member Functions inherited from SurgSim::Framework::Asset
 Asset ()
 Constructor. More...
 
virtual ~Asset ()
 Destructor. More...
 
void load (const std::string &fileName, const SurgSim::Framework::ApplicationData &data)
 Load a file with given name using 'data' as look up path(s). More...
 
void load (const std::string &fileName)
 Overloaded function using SurgSim::Framework::Runtime::getApplicationData() as look up path(s). More...
 
std::string getFileName () const
 Return the name of file loaded by this class. More...
 

Public Attributes

Data data
 Extra node data. More...
 

Protected Member Functions

bool doAddData (const SurgSim::Math::Vector3d &position, const Data &nodeData, const int level, const int currentLevel)
 Recursive function that does the adding of the data to the octree. More...
 
virtual bool doLoad (const std::string &filePath) override
 Derived classes will overwrite this method to do actual loading. More...
 
- Protected Member Functions inherited from SurgSim::Framework::Asset
void serializeFileName (SurgSim::Framework::Accessible *accessible)
 Derived classes (which also inherit from SurgSim::Framework::Accessible) should call this function with 'this' pointer as the parameter in their constructors to register file name property for serialization. More...
 

Protected Attributes

SurgSim::Math::Aabbd m_boundingBox
 The bounding box of the current OctreeNode. More...
 
bool m_isActive
 True if there is any data inside this node, including data held by children, children's children, etc. More...
 
bool m_hasChildren
 True if the node has children. More...
 
std::array< std::shared_ptr
< OctreeNode< Data > >, 8 > 
m_children
 The children of this node. More...
 

Friends

class SurgSim::Math::OctreeShape
 

Detailed Description

template<class Data>
class SurgSim::DataStructures::OctreeNode< Data >

Octree data structure.

The octree node consists of an axis aligned bounding box, that can be subdivided into 8 equally sized subregions. Each subregion is an octree node and can be further subdivided. with x-right and y-up on a right handed coordinate system this is the ordering of the nodes of the tree, looking down the z-axis Back Face 2 3 0 1 Front Face 6 7 4 5

Template Parameters
DataType of extra data stored in each node

Member Typedef Documentation

template<class Data>
typedef Eigen::AlignedBox<double, 3> SurgSim::DataStructures::OctreeNode< Data >::AxisAlignedBoundingBox

Bounding box type for convenience.

Constructor & Destructor Documentation

template<class Data >
SurgSim::DataStructures::OctreeNode< Data >::OctreeNode ( )

Constructor.

template<class Data >
SurgSim::DataStructures::OctreeNode< Data >::OctreeNode ( const OctreeNode< Data > &  other)

Copy constructor when the template data is the same type.

Parameters
otherthe octree to copy from
template<class Data >
template<class T >
SurgSim::DataStructures::OctreeNode< Data >::OctreeNode ( const OctreeNode< T > &  other)

Copy constructor when the template data is a different type In this case, no data will be copied.

Template Parameters
Ttype of data stored in the other node
Parameters
otherthe octree to copy from
template<class Data >
SurgSim::DataStructures::OctreeNode< Data >::OctreeNode ( const SurgSim::Math::Aabbd boundingBox)
explicit

Constructor.

Parameters
boundingBoxThe region contained by this octree node
template<class Data >
SurgSim::DataStructures::OctreeNode< Data >::~OctreeNode ( )
virtual

Destructor.

Member Function Documentation

template<class Data >
bool SurgSim::DataStructures::OctreeNode< Data >::addData ( const SurgSim::Math::Vector3d position,
const Data &  nodeData,
const int  level 
)

Add data to a node in this octree The octree will build the octree as necessary to add the node at the specified level.

Parameters
positionThe position to add the data at
nodeDataThe data to store in the node
levelThe number of levels down the octree to store the data
Returns
true if data is added
template<class Data >
bool SurgSim::DataStructures::OctreeNode< Data >::doAddData ( const SurgSim::Math::Vector3d position,
const Data &  nodeData,
const int  level,
const int  currentLevel 
)
protected

Recursive function that does the adding of the data to the octree.

Parameters
positionThe position to add the data at
nodeDataThe data to store in the node
levelThe number of levels down the octree to store the data
currentLevelUsed to keep track of the current level during recursive calls
Returns
true if data is added
template<class Data >
bool SurgSim::DataStructures::OctreeNode< Data >::doLoad ( const std::string &  filePath)
overrideprotectedvirtual

Derived classes will overwrite this method to do actual loading.

Note
This method is not required to do any check on the validity or the existence of the file.
Parameters
filePathAbsolute path to the file.
Returns
True if loading is successful; Otherwise, false.

Implements SurgSim::Framework::Asset.

template<class Data >
const SurgSim::Math::Aabbd & SurgSim::DataStructures::OctreeNode< Data >::getBoundingBox ( ) const

Get the bounding box for this octree node.

Returns
the bounding box
template<class Data >
std::shared_ptr< OctreeNode< Data > > SurgSim::DataStructures::OctreeNode< Data >::getChild ( size_t  index)

Get a child of this node (non const version)

Exceptions
SurgSim::Framework::AssertionFailureif the index >= 8
Parameters
indexthe child index
Returns
the requested octree node
template<class Data >
const std::shared_ptr< OctreeNode< Data > > SurgSim::DataStructures::OctreeNode< Data >::getChild ( size_t  index) const

Get a child of this node.

Exceptions
SurgSim::Framework::AssertionFailureif the index >= 8
Parameters
indexthe child index
Returns
the requested octree node
template<class Data >
std::array< std::shared_ptr< OctreeNode< Data > >, 8 > & SurgSim::DataStructures::OctreeNode< Data >::getChildren ( )

Get the children of this node (non const version)

Returns
vector of all eight children
template<class Data >
const std::array< std::shared_ptr< OctreeNode< Data > >, 8 > & SurgSim::DataStructures::OctreeNode< Data >::getChildren ( ) const

Get the children of this node.

Returns
vector of all eight children
template<class Data >
std::shared_ptr< OctreeNode< Data > > SurgSim::DataStructures::OctreeNode< Data >::getNode ( const OctreePath path,
bool  returnLastValid = false 
)
virtual

Get the node at the supplied path.

Exceptions
SurgSim::Framework::AssertionFailureif returnLastValid is false and the node does not exist.
Parameters
paththe path to the specific node
returnLastValidif true and the path is longer than the tree deep, the function will return
Returns
the requested octree node
template<class Data >
bool SurgSim::DataStructures::OctreeNode< Data >::hasChildren ( ) const

Does this node have children.

Returns
true if this node has children
template<class Data >
bool SurgSim::DataStructures::OctreeNode< Data >::isActive ( ) const

Is this node active.

Returns
true if the octree node is active
template<class Data >
void SurgSim::DataStructures::OctreeNode< Data >::setIsActive ( bool  isActive)

Set active flag for this octree node.

Parameters
isActiveTrue if the octree node is being activated, False otherwise
template<class Data >
void SurgSim::DataStructures::OctreeNode< Data >::subdivide ( )

Subdivide the node into 8 equal regions.

Each subregion will be stored as this nodes children.

Note
The data stored in the current node will not be automatically subdivided.

Friends And Related Function Documentation

template<class Data>
friend class SurgSim::Math::OctreeShape
friend

Member Data Documentation

template<class Data>
Data SurgSim::DataStructures::OctreeNode< Data >::data

Extra node data.

template<class Data>
SurgSim::Math::Aabbd SurgSim::DataStructures::OctreeNode< Data >::m_boundingBox
protected

The bounding box of the current OctreeNode.

template<class Data>
std::array<std::shared_ptr<OctreeNode<Data> >, 8> SurgSim::DataStructures::OctreeNode< Data >::m_children
protected

The children of this node.

template<class Data>
bool SurgSim::DataStructures::OctreeNode< Data >::m_hasChildren
protected

True if the node has children.

template<class Data>
bool SurgSim::DataStructures::OctreeNode< Data >::m_isActive
protected

True if there is any data inside this node, including data held by children, children's children, etc.


The documentation for this class was generated from the following files: