![]() |
Octree data structure. More...
#include <SurgSim/DataStructures/OctreeNode.h>
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::Aabbd & | getBoundingBox () 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... | |
![]() | |
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... | |
![]() | |
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 |
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
Data | Type of extra data stored in each node |
typedef Eigen::AlignedBox<double, 3> SurgSim::DataStructures::OctreeNode< Data >::AxisAlignedBoundingBox |
Bounding box type for convenience.
SurgSim::DataStructures::OctreeNode< Data >::OctreeNode | ( | ) |
Constructor.
SurgSim::DataStructures::OctreeNode< Data >::OctreeNode | ( | const OctreeNode< Data > & | other | ) |
Copy constructor when the template data is the same type.
other | the octree to copy from |
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.
T | type of data stored in the other node |
other | the octree to copy from |
|
explicit |
Constructor.
boundingBox | The region contained by this octree node |
|
virtual |
Destructor.
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.
position | The position to add the data at |
nodeData | The data to store in the node |
level | The number of levels down the octree to store the data |
|
protected |
Recursive function that does the adding of the data to the octree.
position | The position to add the data at |
nodeData | The data to store in the node |
level | The number of levels down the octree to store the data |
currentLevel | Used to keep track of the current level during recursive calls |
|
overrideprotectedvirtual |
Derived classes will overwrite this method to do actual loading.
filePath | Absolute path to the file. |
Implements SurgSim::Framework::Asset.
const SurgSim::Math::Aabbd & SurgSim::DataStructures::OctreeNode< Data >::getBoundingBox | ( | ) | const |
Get the bounding box for this octree node.
std::shared_ptr< OctreeNode< Data > > SurgSim::DataStructures::OctreeNode< Data >::getChild | ( | size_t | index | ) |
Get a child of this node (non const version)
SurgSim::Framework::AssertionFailure | if the index >= 8 |
index | the child index |
const std::shared_ptr< OctreeNode< Data > > SurgSim::DataStructures::OctreeNode< Data >::getChild | ( | size_t | index | ) | const |
Get a child of this node.
SurgSim::Framework::AssertionFailure | if the index >= 8 |
index | the child index |
std::array< std::shared_ptr< OctreeNode< Data > >, 8 > & SurgSim::DataStructures::OctreeNode< Data >::getChildren | ( | ) |
Get the children of this node (non const version)
const std::array< std::shared_ptr< OctreeNode< Data > >, 8 > & SurgSim::DataStructures::OctreeNode< Data >::getChildren | ( | ) | const |
Get the children of this node.
|
virtual |
Get the node at the supplied path.
SurgSim::Framework::AssertionFailure | if returnLastValid is false and the node does not exist. |
path | the path to the specific node |
returnLastValid | if true and the path is longer than the tree deep, the function will return |
bool SurgSim::DataStructures::OctreeNode< Data >::hasChildren | ( | ) | const |
Does this node have children.
bool SurgSim::DataStructures::OctreeNode< Data >::isActive | ( | ) | const |
Is this node active.
void SurgSim::DataStructures::OctreeNode< Data >::setIsActive | ( | bool | isActive | ) |
Set active flag for this octree node.
isActive | True if the octree node is being activated, False otherwise |
void SurgSim::DataStructures::OctreeNode< Data >::subdivide | ( | ) |
Subdivide the node into 8 equal regions.
Each subregion will be stored as this nodes children.
|
friend |
Data SurgSim::DataStructures::OctreeNode< Data >::data |
Extra node data.
|
protected |
The bounding box of the current OctreeNode.
|
protected |
The children of this node.
|
protected |
True if the node has children.
|
protected |
True if there is any data inside this node, including data held by children, children's children, etc.