|
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... | |
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 |
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.
1.8.11