![]() |
Octree data structure. More...
#include <SurgSim/DataStructures/OctreeNode.h>
Public Types | |
typedef Eigen::AlignedBox< double, 3 > | AxisAlignedBoundingBox |
Bounding box type for convenience. More... | |
![]() | |
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 |
![]() | |
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... | |
![]() | |
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... | |
![]() | |
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 | |
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 FactoryType & | getFactory () |
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 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.
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 |
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 |
const 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.
|
overridevirtual |
Support serialization with a classname.
Implements SurgSim::Framework::Asset.
|
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 |
Does this node have children.
bool SurgSim::DataStructures::OctreeNode< Data >::isActive |
Is this node active.
|
private |
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 |
|
friend |
Data SurgSim::DataStructures::OctreeNode< Data >::data |
Extra node data.
|
protected |
The bounding box of the current OctreeNode.
|
protected |
The children of this node.
|
staticprivate |
|
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.