opensurgsim
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 <OctreeNode.h>

Inheritance diagram for SurgSim::DataStructures::OctreeNode< Data >:
SurgSim::Framework::Asset SurgSim::Framework::Accessible SurgSim::Framework::FactoryBase< Asset >

Public Types

typedef Eigen::AlignedBox< double, 3 > AxisAlignedBoundingBox
 Bounding box type for convenience.
 
- 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< AssetFactoryType
 

Public Member Functions

 OctreeNode ()
 Constructor.
 
 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.
 
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.
 
 Asset (const Asset &rhs)
 Copy Constructor.
 
virtual ~Asset ()
 Destructor.
 
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.
 
 ~Accessible ()
 Destructor.
 
template<class 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...
 
std::vector< std::string > getProperties ()
 
template<>
boost::any getValue (const std::string &name) const
 

Public Attributes

Data data
 Extra node data.
 

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.
 
bool m_isActive
 True if there is any data inside this node, including data held by children, children's children, etc.
 
bool m_hasChildren
 True if the node has children.
 
std::array< std::shared_ptr< OctreeNode< Data > >, 8 > m_children
 The children of this node.
 

Friends

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

Additional Inherited Members

- Static Public Member Functions inherited from SurgSim::Framework::FactoryBase< Asset >
static FactoryTypegetFactory ()
 

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

Constructor & Destructor Documentation

§ OctreeNode() [1/3]

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

§ OctreeNode() [2/3]

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

§ OctreeNode() [3/3]

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

Constructor.

Parameters
boundingBoxThe region contained by this octree node

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

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

§ doLoad()

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.

§ 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::AssertionFailureif the index >= 8
Parameters
indexthe 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::AssertionFailureif the index >= 8
Parameters
indexthe 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
overridevirtual

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

§ 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

§ setIsActive()

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

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

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