SurgSim::DataStructures::OctreeNode< Data > Class Template Reference

Octree data structure. More...

`#include <SurgSim/DataStructures/OctreeNode.h>`

Inheritance diagram for SurgSim::DataStructures::OctreeNode< Data >:

## Public Types

typedef Eigen::AlignedBox< double, 3 > | AxisAlignedBoundingBox
| Bounding box type for convenience. More...
Public Types inherited from SurgSim::Framework::Accessible
typedef std::function< boost::any(void)> | GetterType
typedef std::function< void(boost::any)> | SetterType
typedef std::function< YAML::Node(void)> | EncoderType
typedef std::function< void(const YAML::Node *)> | DecoderType
Public Types inherited from SurgSim::Framework::FactoryBase< Asset >
typedef ObjectFactory< Asset > | FactoryType

## 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...
std::string | getClassName () const override
| Support serialization with a classname. 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 int level, const Data &nodeData=Data())
| 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...
| Asset (const Asset &rhs)
| Copy 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 Member Functions inherited from SurgSim::Framework::Accessible
| Accessible ()
| Default Constructor. More...
| ~Accessible ()
| Destructor. More...
template<class T >
T | getValue (const std::string &name) const
| Retrieves the value with the name by executing the getter if it is found and tries to convert it to the given type. More...
boost::any | getValue (const std::string &name) const
| Retrieves the value with the name by executing the getter if it is found. More...
template<class T >
bool | getValue (const std::string &name, T *value) const
| Retrieves the value with the name by executing the getter if it is found, and converts it to the type of the output parameter. More...
void | setValue (const std::string &name, const boost::any &value)
| Sets a value of a property that has setter. More...
bool | isReadable (const std::string &name) const
| Check whether a property is readable. More...
bool | isWriteable (const std::string &name) const
| Check whether a property is writable. More...
void | setGetter (const std::string &name, GetterType func)
| Sets a getter for a given property. More...
void | setSetter (const std::string &name, SetterType func)
| Sets a setter for a given property. More...
void | setAccessors (const std::string &name, GetterType getter, SetterType setter)
| Sets the accessors getter and setter in one function. More...
void | removeAccessors (const std::string &name)
| Removes all the accessors (getter and setter) for a given property. More...
void | forwardProperty (const std::string &name, const Accessible &target, const std::string &targetProperty)
| Adds a property with the given name that uses the targets accessors, in effect forwarding the value to the target. More...
void | setSerializable (const std::string &name, EncoderType encoder, DecoderType decoder)
| Sets the functions used to convert data from and to a YAML::Node. More...
void | setDecoder (const std::string &name, DecoderType decoder)
| Sets the functions used to convert data from a YAML::Node. More...
YAML::Node | encode () const
| Encode this Accessible to a YAML::Node. More...
void | decode (const YAML::Node &node, const std::vector< std::string > &ignoredProperties=std::vector< std::string >())
| Decode this Accessible from a YAML::Node, will throw an exception if the data type cannot be converted. More...
template<>
boost::any | getValue (const std::string &name) const

## 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...
bool | doLoad (const std::string &filePath) override
| Derived classes will overwrite this method to do actual loading. 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...

## Private Member Functions

template<>
std::string | m_className

## Static Private Attributes

static std::string | m_className

## Friends

class | SurgSim::Math::OctreeShape
class | SurgSim::DataStructures::OctreeNodePlyReaderDelegate< Data >

## Additional Inherited Members

Static Public Member Functions inherited from SurgSim::Framework::FactoryBase< Asset >
static FactoryType & | getFactory ()

## 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

  Data | Type of extra data stored in each node

## Member Typedef Documentation

## AxisAlignedBoundingBox

template<class Data>

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

Bounding box type for convenience.

## Constructor & Destructor Documentation

## OctreeNode() [1/4]

template<class Data >

SurgSim::DataStructures::OctreeNode< Data >::OctreeNode | ( |  | ) |

Constructor.

## OctreeNode() [2/4]

template<class Data >

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

Copy constructor when the template data is the same type.

Parameters

  other | the octree to copy from

## OctreeNode() [3/4]

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

  T | type of data stored in the other node

Parameters

  other | the octree to copy from

## OctreeNode() [4/4]

template<class Data >

SurgSim::DataStructures::OctreeNode< Data >::OctreeNode | ( | const SurgSim::Math::Aabbd & | boundingBox | ) |

explicit

Constructor.

Parameters

  boundingBox | The region contained by this octree node

## ~OctreeNode()

template<class Data >

SurgSim::DataStructures::OctreeNode< Data >::~OctreeNode | ( |  | ) |

virtual

Destructor.

## Member Function Documentation

## addData()

template<class Data >

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

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

  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

Returns
  true if data is added

## doAddData()

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

  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

Returns
  true if data is added

## doLoad()

template<class Data >

bool SurgSim::DataStructures::OctreeNode< Data >::doLoad | ( | const std::string & | filePath | ) |

override protected virtual

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

  filePath | Absolute path to the file.

Returns
  True if loading is successful; Otherwise, false.

Implements SurgSim::Framework::Asset.

## getBoundingBox()

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

## getChild() [1/2]

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::AssertionFailure | if the index >= 8

Parameters

  index | the child index

Returns
  the requested octree node

## getChild() [2/2]

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::AssertionFailure | if the index >= 8

Parameters

  index | the child index

Returns
  the requested octree node

## getChildren() [1/2]

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

## getChildren() [2/2]

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

## getClassName()

template<class Data >

std::string SurgSim::DataStructures::OctreeNode< Data >::getClassName | ( |  | ) | const

override virtual

Support serialization with a classname.

Returns
  the name of this class

Implements SurgSim::Framework::Asset.

## getNode()

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::AssertionFailure | if returnLastValid is false and the node does not exist.

Parameters

  path | the path to the specific node
  returnLastValid | if true and the path is longer than the tree deep, the function will return

Returns
  the requested octree node

## hasChildren()

template<class Data >

bool SurgSim::DataStructures::OctreeNode< Data >::hasChildren | ( |  | ) | const

Does this node have children.

Returns
  true if this node has children

## isActive()

template<class Data >

bool SurgSim::DataStructures::OctreeNode< Data >::isActive | ( |  | ) | const

Is this node active.

Returns
  true if the octree node is active

## m_className()

template<>

std::string SurgSim::DataStructures::OctreeNode< EmptyData >::m_className | ( |  | ) |

private

## setIsActive()

template<class Data >

void SurgSim::DataStructures::OctreeNode< Data >::setIsActive | ( | bool | isActive | ) |

Set active flag for this octree node.

Parameters

  isActive | True if the octree node is being activated, False otherwise

## subdivide()

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

## SurgSim::DataStructures::OctreeNodePlyReaderDelegate< Data >

template<class Data>

friend class SurgSim::DataStructures::OctreeNodePlyReaderDelegate< Data >

friend

## SurgSim::Math::OctreeShape

template<class Data>

friend class SurgSim::Math::OctreeShape

friend

## Member Data Documentation

## data

template<class Data>

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

Extra node data.

## m_boundingBox

template<class Data>

SurgSim::Math::Aabbd SurgSim::DataStructures::OctreeNode< Data >::m_boundingBox

protected

The bounding box of the current OctreeNode.

## m_children

template<class Data>

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

protected

The children of this node.

## m_className

template<class Data>

std::string SurgSim::DataStructures::OctreeNode< Data >::m_className

static private

## m_hasChildren

template<class Data>

bool SurgSim::DataStructures::OctreeNode< Data >::m_hasChildren

protected

True if the node has children.

## m_isActive

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:

- SurgSim/DataStructures/OctreeNode.h
- SurgSim/DataStructures/OctreeNode-inl.h