16 #ifndef SURGSIM_DATASTRUCTURES_OCTREENODE_H 17 #define SURGSIM_DATASTRUCTURES_OCTREENODE_H 37 namespace DataStructures
56 result = (result << 3) | i;
59 return m_hasher(result);
103 OctreePath
getNeighbor(
const OctreePath& origin,
const std::array<Symbol, 3>& direction);
110 std::vector<OctreePath>
getNeighbors(
const OctreePath& origin,
int type);
129 public std::enable_shared_from_this<OctreeNode<Data>>
165 bool isActive()
const;
169 void setIsActive(
bool isActive);
173 bool hasChildren()
const;
191 std::array<std::shared_ptr<OctreeNode<Data> >, 8>& getChildren();
195 const std::array<std::shared_ptr<OctreeNode<Data> >, 8>& getChildren()
const;
201 std::shared_ptr<OctreeNode<Data> > getChild(
size_t index);
207 const std::shared_ptr<OctreeNode<Data> > getChild(
size_t index)
const;
215 virtual std::shared_ptr<OctreeNode<Data> > getNode(
const OctreePath& path,
bool returnLastValid =
false);
228 const int currentLevel);
242 std::array<std::shared_ptr<OctreeNode<Data> >, 8>
m_children;
249 std::shared_ptr<OctreeNode<SurgSim::DataStructures::EmptyData>>
loadOctree(
const std::string& fileName);
256 #endif // SURGSIM_DATASTRUCTURES_OCTREENODE_H Definition: OctreeNode.h:81
Definition: OctreeNode.h:69
Definition: DriveElementFromInputBehavior.cpp:27
SurgSim::Math::Aabbd m_boundingBox
The bounding box of the current OctreeNode.
Definition: OctreeNode.h:233
This class is used to facilitate file loading.
Definition: Asset.h:33
virtual bool doLoad(const std::string &filePath) override
Derived classes will overwrite this method to do actual loading.
Definition: OctreeShape.cpp:41
Enable the OctreePath to be used as a key in an unordered map, if the int range is exceeded this will...
Definition: OctreeNode.h:48
Definition: OctreeNode.h:71
Definition: OctreeNode.h:80
SurgSim::DataStructures::OctreePath getNeighbor(const OctreePath &origin, const std::array< Symbol, 3 > &direction)
Calculate the neighbor of an node in the octree by traversing a state machine, see http://ww1...
Definition: OctreeNode.cpp:179
std::vector< size_t > OctreePath
Typedef of octree path The path is a vector of children indexes (each within 0 to 7) that lead to the...
Definition: OctreeNode.h:43
size_t operator()(const OctreePath &path) const
Definition: OctreeNode.h:51
Definition: OctreeNode.h:70
Definition: OctreeNode.h:72
string(TOUPPER ${DEVICE}DEVICE_UPPER_CASE) option(BUILD_DEVICE_ $
Definition: CMakeLists.txt:35
std::hash< size_t > m_hasher
Definition: OctreeNode.h:62
Definition: OctreeNode.h:83
Eigen::AlignedBox< double, 3 > Aabbd
Wrapper around the Eigen type.
Definition: Aabb.h:30
Definition: OctreeNode.h:68
Definition: OctreeNode.h:79
Definition: OctreeNode.h:84
std::shared_ptr< OctreeNode< EmptyData > > loadOctree(const std::string &fileName)
A free function to load an octree from file.
Definition: OctreeNode.cpp:146
Definitions of small fixed-size vector types.
bool m_hasChildren
True if the node has children.
Definition: OctreeNode.h:239
bool m_isActive
True if there is any data inside this node, including data held by children, children's children...
Definition: OctreeNode.h:236
Eigen::AlignedBox< double, 3 > AxisAlignedBoundingBox
Bounding box type for convenience.
Definition: OctreeNode.h:136
Definition: OctreeNode.h:78
Definition: OctreeNode.h:82
Neighborhood
Indicates what neighbors to grab.
Definition: OctreeNode.h:66
std::vector< OctreePath > getNeighbors(const OctreePath &origin, int type)
Fetch a list of neighbors, indicated by the type, Face, Edge and Vertex are possible types and can be...
Definition: OctreeNode.cpp:240
std::array< std::shared_ptr< OctreeNode< Data > >, 8 > m_children
The children of this node.
Definition: OctreeNode.h:242
Data data
Extra node data.
Definition: OctreeNode.h:218
Eigen::Matrix< double, 3, 1 > Vector3d
A 3D vector of doubles.
Definition: Vector.h:56
Octree data structure.
Definition: OctreeNode.h:128
Octree Shape A defined by an octree data structure.
Definition: OctreeShape.h:34
Symbol
Direction code for the neighborhood search.
Definition: OctreeNode.h:76