41 #include "fcl/config.h"
64 class FCL_EXPORT OcTree :
public CollisionGeometry<S>
67 std::shared_ptr<const octomap::OcTree> tree;
71 S occupancy_threshold_log_odds;
72 S free_threshold_log_odds;
82 OcTree(
const std::shared_ptr<const octomap::OcTree>& tree_);
85 void computeLocalAABB();
88 AABB<S> getRootBV()
const;
91 OcTreeNode* getRoot()
const;
94 bool isNodeOccupied(
const OcTreeNode* node)
const;
97 bool isNodeFree(
const OcTreeNode* node)
const;
100 bool isNodeUncertain(
const OcTreeNode* node)
const;
105 std::vector<std::array<S, 6> > toBoxes()
const;
109 S getOccupancyThres()
const;
113 S getFreeThres()
const;
115 S getDefaultOccupancy()
const;
117 void setCellDefaultOccupancy(S d);
119 void setOccupancyThres(S d);
121 void setFreeThres(S d);
124 OcTreeNode* getNodeChild(OcTreeNode* node,
unsigned int childIdx);
127 const OcTreeNode* getNodeChild(
const OcTreeNode* node,
unsigned int childIdx)
const;
130 bool nodeChildExists(
const OcTreeNode* node,
unsigned int childIdx)
const;
133 bool nodeHasChildren(
const OcTreeNode* node)
const;
171 const OcTreeNode* getNodeByQueryCellId(
173 const Vector3<S>&
point,
174 AABB<S>*
aabb =
nullptr,
176 unsigned int* depth =
nullptr)
const;
182 bool getOctomapIterator(
184 const Vector3<S>&
point,
185 octomap::OcTree::leaf_bbx_iterator* out)
const;
188 using OcTreef = OcTree<float>;
189 using OcTreed = OcTree<double>;
192 template <
typename S>
194 void computeChildBV(
const AABB<S>& root_bv,
unsigned int i, AABB<S>& child_bv);
200 #endif // #if FCL_HAVE_OCTOMAP