41 #include <pcl/octree/octree_base.h>
42 #include <pcl/point_cloud.h>
43 #include <pcl/point_types.h>
68 typename LeafContainerT = OctreeContainerPointIndices,
69 typename BranchContainerT = OctreeContainerEmpty,
70 typename OctreeT = OctreeBase<LeafContainerT, BranchContainerT>>
102 shared_ptr<OctreePointCloud<PointT, LeafContainerT, BranchContainerT, OctreeT>>;
109 std::vector<PointXYZ, Eigen::aligned_allocator<PointXYZ>>;
136 inline PointCloudConstPtr
167 if (this->leaf_count_ > 0) {
168 PCL_ERROR(
"[pcl::octree::OctreePointCloud::setResolution] Octree needs to be "
169 "empty to change its resolution(leaf count should must be 0)!\n");
193 return this->octree_depth_;
227 PointCloudPtr cloud_arg,
246 OctreeT::deleteTree();
257 const double point_y_arg,
258 const double point_z_arg)
const;
288 const Eigen::Vector3f& end,
290 float precision = 0.2);
324 const double min_y_arg,
325 const double min_z_arg,
326 const double max_x_arg,
327 const double max_y_arg,
328 const double max_z_arg);
339 const double max_y_arg,
340 const double max_z_arg);
365 double& max_z_arg)
const;
406 Eigen::Vector3f& min_pt,
407 Eigen::Vector3f& max_pt)
const
423 if (this->leaf_count_ > 0) {
424 PCL_ERROR(
"[pcl::octree::OctreePointCloud::enableDynamicDepth] Leaf count should "
450 unsigned char child_idx,
473 return (this->findLeaf(key));
498 return (!((point_idx_arg.x <
min_x_) || (point_idx_arg.y <
min_y_) ||
499 (point_idx_arg.z <
min_z_) || (point_idx_arg.x >=
max_x_) ||
500 (point_idx_arg.y >=
max_y_) || (point_idx_arg.z >=
max_z_)));
518 const double point_y_arg,
519 const double point_z_arg,
548 PointT& point_arg)
const;
560 Eigen::Vector3f& min_pt,
561 Eigen::Vector3f& max_pt)
const;
613 #ifdef PCL_NO_PRECOMPILE
614 #include <pcl/octree/impl/octree_pointcloud.hpp>
uindex_t getOccupiedVoxelCenters(AlignedPointTVector &voxel_center_list_arg) const
Get a PointT vector of centers of all occupied voxels.
void genOctreeKeyforPoint(const PointT &point_arg, OctreeKey &key_arg) const
Generate octree key for voxel at a given point.
void genVoxelCenterFromOctreeKey(const OctreeKey &key_arg, uindex_t tree_depth_arg, PointT &point_arg) const
Generate a point at center of octree voxel at given tree level.
shared_ptr< PointCloud< PointT > > Ptr
void addPointsFromInputCloud()
Add points from input point cloud to octree.
typename OctreeT::BranchNode BranchNode
std::vector< PointT, Eigen::aligned_allocator< PointT >> AlignedPointTVector
typename PointCloud::ConstPtr PointCloudConstPtr
void addPointToCloud(const PointT &point_arg, PointCloudPtr cloud_arg)
Add point simultaneously to octree and input point cloud.
double getEpsilon() const
Get the search epsilon precision (error bound) for nearest neighbors searches.
void addPointFromCloud(uindex_t point_idx_arg, IndicesPtr indices_arg)
Add point at given index from input point cloud to octree.
shared_ptr< Indices > IndicesPtr
detail::int_type_t< detail::index_type_size, detail::index_type_signed > index_t
Type used for an index in PCL.
double getVoxelSquaredDiameter() const
Calculates the squared diameter of a voxel at leaf depth.
OctreePointCloud(const double resolution_arg)
Octree pointcloud constructor.
void adoptBoundingBoxToPoint(const PointT &point_idx_arg)
Grow the bounding box/octree until point fits.
shared_ptr< const Indices > IndicesConstPtr
void setInputCloud(const PointCloudConstPtr &cloud_arg, const IndicesConstPtr &indices_arg=IndicesConstPtr())
Provide a pointer to the input data set.
IndicesConstPtr indices_
A pointer to the vector of point indices to use.
shared_ptr< const OctreePointCloud< PointT, LeafTWrap, BranchTWrap, OctreeBase< LeafTWrap, BranchTWrap > >> ConstPtr
PointCloudConstPtr input_
Pointer to input point cloud dataset.
shared_ptr< Indices > IndicesPtr
uindex_t getApproxIntersectedVoxelCentersBySegment(const Eigen::Vector3f &origin, const Eigen::Vector3f &end, AlignedPointTVector &voxel_center_list, float precision=0.2)
Get a PointT vector of centers of voxels intersected by a line segment.
shared_ptr< OctreePointCloud< PointT, LeafTWrap, BranchTWrap, OctreeBase< LeafTWrap, BranchTWrap > >> Ptr
LeafContainerT * findLeafAtPoint(const PointT &point_arg) const
Find octree leaf node at a given point.
virtual bool genOctreeKeyForDataT(const index_t &data_arg, OctreeKey &key_arg) const
Virtual method for generating octree key for a given point index.
void defineBoundingBox()
Investigate dimensions of pointcloud data set and define corresponding bounding box for octree...
const OctreeKey & getCurrentOctreeKey() const
Get octree key for the current iterator octree node.
uindex_t getCurrentOctreeDepth() const
Get the current depth level of octree.
virtual void addPointIdx(uindex_t point_idx_arg)
Add point at index from input pointcloud dataset to octree.
void getBoundingBox(double &min_x_arg, double &min_y_arg, double &min_z_arg, double &max_x_arg, double &max_y_arg, double &max_z_arg) const
Get bounding box for octree.
typename PointCloud::Ptr PointCloudPtr
void enableDynamicDepth(std::size_t maxObjsPerLeaf)
Enable dynamic octree structure.
bool isPointWithinBoundingBox(const PointT &point_idx_arg) const
Checks if given point is within the bounding box of the octree.
void genLeafNodeCenterFromOctreeKey(const OctreeKey &key_arg, PointT &point_arg) const
Generate a point at center of leaf node voxel.
void getKeyBitSize()
Define octree key setting and octree depth based on defined bounding box.
uindex_t getTreeDepth() const
Get the maximum depth of the octree.
PointCloud represents the base class in PCL for storing collections of 3D points. ...
std::vector< PointXYZ, Eigen::aligned_allocator< PointXYZ >> AlignedPointXYZVector
std::size_t max_objs_per_leaf_
Amount of DataT objects per leafNode before expanding branch.
Abstract octree leaf class
void deleteTree()
Delete the octree structure and its leaf nodes.
double getResolution() const
Get octree voxel resolution.
bool isVoxelOccupiedAtPoint(const PointT &point_arg) const
Check if voxel at given point exist.
void genVoxelBoundsFromOctreeKey(const OctreeKey &key_arg, uindex_t tree_depth_arg, Eigen::Vector3f &min_pt, Eigen::Vector3f &max_pt) const
Generate bounds of an octree voxel using octree key and tree depth arguments.
void expandLeafNode(LeafNode *leaf_node, BranchNode *parent_branch, unsigned char child_idx, uindex_t depth_mask)
Add point at index from input pointcloud dataset to octree.
const PointT & getPointByIndex(uindex_t index_arg) const
Get point at index from input pointcloud dataset.
shared_ptr< const PointCloud< PointT > > ConstPtr
Abstract octree iterator class
void getVoxelBounds(const OctreeIteratorBase< OctreeT > &iterator, Eigen::Vector3f &min_pt, Eigen::Vector3f &max_pt) const
Generate bounds of the current voxel of an octree iterator.
shared_ptr< const Indices > IndicesConstPtr
typename OctreeT::LeafNode LeafNode
double getVoxelSquaredSideLen() const
Calculates the squared voxel cube side length at leaf level.
A point structure representing Euclidean xyz coordinates, and the RGB color.
double epsilon_
Epsilon precision (error bound) for nearest neighbors searches.
void deleteVoxelAtPoint(const PointT &point_arg)
Delete leaf node / voxel at given point.
Abstract octree branch class
void setEpsilon(double eps)
Set the search epsilon precision (error bound) for nearest neighbors searches.
bool bounding_box_defined_
Flag indicating if octree has defined bounding box.
PointCloudConstPtr getInputCloud() const
Get a pointer to the input point cloud dataset.
detail::int_type_t< detail::index_type_size, false > uindex_t
Type used for an unsigned index in PCL.
double resolution_
Octree resolution.
uindex_t getOccupiedVoxelCentersRecursive(const BranchNode *node_arg, const OctreeKey &key_arg, AlignedPointTVector &voxel_center_list_arg) const
Recursively search the tree for all leaf nodes and return a vector of voxel centers.
IndicesConstPtr const getIndices() const
Get a pointer to the vector of indices used.
void setResolution(double resolution_arg)
Set/change the octree voxel resolution.