octree.h
Go to the documentation of this file.
1 
26 #ifndef TESSERACT_GEOMETRY_OCTREE_H
27 #define TESSERACT_GEOMETRY_OCTREE_H
28 
31 #include <boost/serialization/export.hpp>
32 #include <Eigen/Geometry>
33 #include <memory>
35 
37 
38 namespace boost::serialization
39 {
40 class access;
41 }
42 
43 namespace octomap
44 {
45 class OcTree;
46 class OcTreeNode;
47 } // namespace octomap
48 
49 namespace tesseract_geometry
50 {
51 enum class OctreeSubType : std::uint8_t
52 {
53  BOX,
56 };
57 
58 class Octree : public Geometry
59 {
60 public:
61  using Ptr = std::shared_ptr<Octree>;
62  using ConstPtr = std::shared_ptr<const Octree>;
63 
64  Octree(std::shared_ptr<const octomap::OcTree> octree,
65  OctreeSubType sub_type,
66  bool pruned = false,
67  bool binary_octree = false);
68  Octree() = default;
69  ~Octree() override = default;
70 
71  const std::shared_ptr<const octomap::OcTree>& getOctree() const;
72 
73  OctreeSubType getSubType() const;
74 
75  bool getPruned() const;
76 
77  Geometry::Ptr clone() const override final;
78 
79  bool operator==(const Octree& rhs) const;
80  bool operator!=(const Octree& rhs) const;
81 
86  void update() { assert(false); } // NOLINT
87 
95  long calcNumSubShapes() const;
96 
97 private:
98  std::shared_ptr<const octomap::OcTree> octree_;
100  double resolution_{ 0.01 };
101  bool pruned_{ false };
102  bool binary_octree_{ false };
103 
104  static bool isNodeCollapsible(octomap::OcTree& octree, octomap::OcTreeNode* node);
105 
106  static bool pruneNode(octomap::OcTree& octree, octomap::OcTreeNode* node);
107 
108  // NOLINTNEXTLINE(misc-no-recursion)
109  static void pruneRecurs(octomap::OcTree& octree,
110  octomap::OcTreeNode* node,
111  unsigned int depth,
112  unsigned int max_depth,
113  unsigned int& num_pruned);
114 
117  template <class Archive>
118  void save(Archive& ar, const unsigned int version) const; // NOLINT
119 
120  template <class Archive>
121  void load(Archive& ar, const unsigned int version); // NOLINT
122 
123  template <class Archive>
124  void serialize(Archive& ar, const unsigned int version); // NOLINT
125 
126 public:
135  static void prune(octomap::OcTree& octree);
136 };
137 } // namespace tesseract_geometry
138 
139 BOOST_CLASS_EXPORT_KEY(tesseract_geometry::Octree)
140 #endif
tesseract_geometry::Geometry::Ptr
std::shared_ptr< Geometry > Ptr
Definition: geometry.h:72
tesseract_geometry::Octree::pruneNode
static bool pruneNode(octomap::OcTree &octree, octomap::OcTreeNode *node)
Definition: octree.cpp:97
tesseract_geometry::Octree::binary_octree_
bool binary_octree_
Definition: octree.h:102
tesseract_geometry::Octree
Definition: octree.h:58
tesseract_geometry::Geometry
Definition: geometry.h:69
geometry.h
Tesseract Geometries.
tesseract_geometry::Octree::octree_
std::shared_ptr< const octomap::OcTree > octree_
Definition: octree.h:98
tesseract_geometry::Octree::Octree
Octree()=default
tesseract_geometry::OctreeSubType::SPHERE_OUTSIDE
@ SPHERE_OUTSIDE
tesseract_geometry::Octree::save
void save(Archive &ar, const unsigned int version) const
Definition: octree.cpp:195
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
tesseract_geometry::Octree::pruneRecurs
static void pruneRecurs(octomap::OcTree &octree, octomap::OcTreeNode *node, unsigned int depth, unsigned int max_depth, unsigned int &num_pruned)
Definition: octree.cpp:115
tesseract_common::Serialization
tesseract_geometry::Octree::getOctree
const std::shared_ptr< const octomap::OcTree > & getOctree() const
Definition: octree.cpp:49
tesseract_geometry::Octree::load
void load(Archive &ar, const unsigned int version)
Definition: octree.cpp:219
tesseract_geometry::Octree::access
friend class boost::serialization::access
Definition: octree.h:115
tesseract_geometry::Octree::getSubType
OctreeSubType getSubType() const
Definition: octree.cpp:51
tesseract_geometry::Octree::update
void update()
Octrees are typically generated from 3D sensor data so this method should be used to efficiently upda...
Definition: octree.h:86
boost::serialization
tesseract_geometry::Octree::clone
Geometry::Ptr clone() const override final
Create a copy of this shape.
Definition: octree.cpp:55
tesseract_geometry::Octree::pruned_
bool pruned_
Definition: octree.h:101
TESSERACT_COMMON_IGNORE_WARNINGS_POP
#define TESSERACT_COMMON_IGNORE_WARNINGS_POP
tesseract_geometry::Octree::isNodeCollapsible
static bool isNodeCollapsible(octomap::OcTree &octree, octomap::OcTreeNode *node)
Definition: octree.cpp:69
tesseract_geometry
Definition: fwd.h:31
tesseract_geometry::Octree::getPruned
bool getPruned() const
Definition: octree.cpp:53
octomap
Definition: octree.h:43
tesseract_geometry::Octree::~Octree
~Octree() override=default
tesseract_geometry::Octree::prune
static void prune(octomap::OcTree &octree)
A custom octree prune which will prune if all children are above the occupancy threshold.
Definition: octree.cpp:144
tesseract_geometry::Geometry::ConstPtr
std::shared_ptr< const Geometry > ConstPtr
Definition: geometry.h:73
macros.h
tesseract_geometry::Octree::calcNumSubShapes
long calcNumSubShapes() const
Calculate the number of sub shapes that would get generated for this octree.
Definition: octree.cpp:57
tesseract_geometry::OctreeSubType
OctreeSubType
Definition: octree.h:51
tesseract_geometry::Octree::sub_type_
OctreeSubType sub_type_
Definition: octree.h:99
tesseract_geometry::Octree::resolution_
double resolution_
Definition: octree.h:100
tesseract_geometry::OctreeSubType::BOX
@ BOX
tesseract_geometry::Octree::serialize
void serialize(Archive &ar, const unsigned int version)
Definition: octree.cpp:251
tesseract_geometry::OctreeSubType::SPHERE_INSIDE
@ SPHERE_INSIDE


tesseract_geometry
Author(s): Levi Armstrong
autogenerated on Sun May 18 2025 03:01:46