Point Cloud Library (PCL)
1.11.1-dev
|
42 #include <pcl/outofcore/boost.h>
43 #include <pcl/common/io.h>
46 #include <pcl/outofcore/octree_base_node.h>
47 #include <pcl/outofcore/octree_disk_container.h>
48 #include <pcl/outofcore/octree_ram_container.h>
51 #include <pcl/outofcore/outofcore_iterator_base.h>
52 #include <pcl/outofcore/outofcore_breadth_first_iterator.h>
53 #include <pcl/outofcore/outofcore_depth_first_iterator.h>
54 #include <pcl/outofcore/impl/outofcore_breadth_first_iterator.hpp>
55 #include <pcl/outofcore/impl/outofcore_depth_first_iterator.hpp>
58 #include <pcl/outofcore/metadata.h>
59 #include <pcl/outofcore/outofcore_base_data.h>
61 #include <pcl/filters/filter.h>
62 #include <pcl/filters/random_sample.h>
64 #include <pcl/PCLPointCloud2.h>
66 #include <shared_mutex>
149 template<
typename ContainerT = OutofcoreOctreeDiskContainer<pcl::Po
intXYZ>,
typename Po
intT = pcl::Po
intXYZ>
178 using Ptr = shared_ptr<OutofcoreOctreeBase<ContainerT, PointT> >;
179 using ConstPtr = shared_ptr<const OutofcoreOctreeBase<ContainerT, PointT> >;
219 OutofcoreOctreeBase (
const Eigen::Vector3d& min,
const Eigen::Vector3d& max,
const double resolution_arg,
const boost::filesystem::path &root_node_name,
const std::string &coord_sys);
234 OutofcoreOctreeBase (
const std::uint64_t max_depth,
const Eigen::Vector3d &min,
const Eigen::Vector3d &max,
const boost::filesystem::path &root_node_name,
const std::string &coord_sys);
301 queryFrustum (
const double *planes, std::list<std::string>& file_names)
const;
304 queryFrustum (
const double *planes, std::list<std::string>& file_names,
const std::uint32_t query_depth)
const;
307 queryFrustum (
const double *planes,
const Eigen::Vector3d &eye,
const Eigen::Matrix4d &view_projection_matrix,
308 std::list<std::string>& file_names,
const std::uint32_t query_depth)
const;
323 queryBBIntersects (
const Eigen::Vector3d &min,
const Eigen::Vector3d &max,
const std::uint32_t query_depth, std::list<std::string> &bin_name)
const;
383 queryBoundingBox (
const Eigen::Vector3d &min,
const Eigen::Vector3d &max,
const int query_depth, std::list<std::string> &filenames)
const
399 getBoundingBox (Eigen::Vector3d &min, Eigen::Vector3d &max)
const;
408 return (
metadata_->getLODPoints (depth_index));
420 queryBoundingBoxNumPoints (
const Eigen::Vector3d& min,
const Eigen::Vector3d& max,
const int query_depth,
bool load_from_disk =
true);
426 inline const std::vector<std::uint64_t>&
472 return (
metadata_->getCoordinateSystem ());
512 getOccupiedVoxelCenters(std::vector<Eigen::Vector3d, Eigen::aligned_allocator<Eigen::Vector3d> > &voxel_centers, std::size_t query_depth)
const;
559 return (sample_percent_);
567 this->sample_percent_ = std::fabs (sample_percent_arg) > 1.0 ? 1.0 : std::fabs (sample_percent_arg);
572 init (
const std::uint64_t& depth,
const Eigen::Vector3d& min,
const Eigen::Vector3d& max,
const boost::filesystem::path& root_name,
const std::string& coord_sys);
640 const static std::uint64_t
LOAD_COUNT_ =
static_cast<std::uint64_t
>(2e9);
646 enlargeToCube (Eigen::Vector3d &bb_min, Eigen::Vector3d &bb_max);
650 calculateDepth (
const Eigen::Vector3d& min_bb,
const Eigen::Vector3d& max_bb,
const double leaf_resolution);
652 double sample_percent_;
void queryBBIntersects(const Eigen::Vector3d &min, const Eigen::Vector3d &max, const std::uint32_t query_depth, std::list< std::string > &bin_name) const
Get a list of file paths at query_depth that intersect with your bounding box specified by min and ma...
OutofcoreOctreeBase(const boost::filesystem::path &root_node_name, const bool load_all)
Load an existing tree.
Abstract octree iterator class.
std::vector< pcl::PointXYZRGB, Eigen::aligned_allocator< pcl::PointXYZRGB > > AlignedPointTVector
shared_ptr< ::pcl::PCLPointCloud2 > Ptr
std::uint64_t addPointCloud_and_genLOD(pcl::PCLPointCloud2::Ptr &input_cloud)
Recursively add points to the tree.
virtual void queryBBIntersects(const Eigen::Vector3d &min_bb, const Eigen::Vector3d &max_bb, const std::uint32_t query_depth, std::list< std::string > &file_names)
Recursive acquires PCD paths to any node with which the queried bounding box intersects (at query_dep...
std::shared_timed_mutex read_write_mutex_
shared mutex for controlling read/write access to disk
void saveToFile()
Write octree definition ".octree" (defined by octree_extension_) to disk.
shared_ptr< OutofcoreOctreeBase< ContainerT, pcl::PointXYZRGB > > Ptr
virtual void queryBoundingBox(const Eigen::Vector3d &min, const Eigen::Vector3d &max, const int query_depth, const pcl::PCLPointCloud2::Ptr &dst_blob, double percent=1.0)
Query all points falling within the input bounding box at query_depth and return a PCLPointCloud2 obj...
OutofcoreOctreeBaseNode Class internally representing nodes of an outofcore octree,...
typename PointCloud::ConstPtr PointCloudConstPtr
std::string node_container_basename_
double getSamplePercent() const
Returns the sample_percent_ used when constructing the LOD.
std::string node_index_basename_
std::uint64_t getDepth() const
Get number of LODs, which is the height of the tree.
void getOccupiedVoxelCenters(AlignedPointTVector &voxel_centers) const
Gets the voxel centers of all occupied/existing leaves of the tree.
void incrementPointsInLOD(std::uint64_t depth, std::uint64_t inc)
Increment current depths (LOD for branch nodes) point count; called by addDataAtMaxDepth in Outofcore...
void DeAllocEmptyNodeCache()
Flush empty nodes only.
shared_ptr< std::vector< int > > IndicesPtr
std::uint64_t addDataToLeaf_and_genLOD(AlignedPointTVector &p)
Recursively add points to the tree subsampling LODs on the way.
bool getBinDimension(double &x, double &y) const
Computes the expected voxel dimensions at the leaves.
double getVoxelSideLength() const
Gets the smallest (assumed) cubic voxel side lengths.
std::string node_container_extension_
A point structure representing Euclidean xyz coordinates, and the RGB color.
OutofcoreOctreeBaseNode< ContainerT, PointT > OutofcoreNodeType
OutofcoreOctreeBaseMetadata::Ptr metadata_
void flushToDiskLazy()
Flush all non leaf nodes' cache.
virtual ~OutofcoreOctreeBase()
std::uint64_t getNumPointsAtDepth(const std::uint64_t &depth_index) const
Get number of points at specified LOD.
void printBoundingBox() const
Prints size of the bounding boxes to stdou.
std::uint64_t getTreeDepth() const
void queryBBIncludes_subsample(const Eigen::Vector3d &min, const Eigen::Vector3d &max, std::uint64_t query_depth, const double percent, AlignedPointTVector &dst) const
Returns a random subsample of points within the given bounding box at query_depth.
bool getBoundingBox(Eigen::Vector3d &min, Eigen::Vector3d &max) const
Get the overall bounding box of the outofcore octree; this is the same as the bounding box of the roo...
std::uint64_t queryBoundingBoxNumPoints(const Eigen::Vector3d &min, const Eigen::Vector3d &max, const int query_depth, bool load_from_disk=true)
Queries the number of points in a bounding box.
const static std::uint64_t LOAD_COUNT_
OutofcoreOctreeBaseNode< ContainerT, PointT > BranchNode
bool checkExtension(const boost::filesystem::path &path_name)
Auxiliary function to validate path_name extension is .octree.
void convertToXYZ()
Save each .bin file as an XYZ file.
void queryFrustum(const double *planes, std::list< std::string > &file_names) const
void buildLOD()
Generate multi-resolution LODs for the tree, which are a uniform random sampling all child leafs belo...
const static std::string TREE_EXTENSION_
defined as ".octree" to append to treepath files
void flushToDisk()
Flush all nodes' cache.
virtual void queryBoundingBox(const Eigen::Vector3d &min, const Eigen::Vector3d &max, const int query_depth, std::list< std::string > &filenames) const
Returns list of pcd files from nodes whose bounding boxes intersect with the input bounding box.
typename PointCloud::Ptr PointCloudPtr
Filter represents the base filter class.
void queryBBIncludes(const Eigen::Vector3d &min, const Eigen::Vector3d &max, const std::uint64_t query_depth, AlignedPointTVector &dst) const
Get Points in BB, only points inside BB.
const std::vector< std::uint64_t > & getNumPointsVector() const
Get number of points at each LOD.
void buildLODRecursive(const std::vector< BranchNode * > ¤t_branch)
recursive portion of lod builder
OutofcoreNodeType * getRootNode()
const std::string & getCoordSystem() const
Get coordinate system tag from the JSON metadata file.
shared_ptr< PointCloud< PointT > > Ptr
const static int OUTOFCORE_VERSION_
void writeVPythonVisual(const boost::filesystem::path filename)
Write a python script using the vpython module containing all the bounding boxes.
std::uint64_t addPointCloud(PointCloudConstPtr point_cloud)
Copies the points from the point_cloud falling within the bounding box of the octree to the out-of-co...
shared_ptr< const PointCloud< PointT > > ConstPtr
OutofcoreNodeType * root_node_
Pointer to the root node of the octree data structure.
void getOccupiedVoxelCenters(std::vector< Eigen::Vector3d, Eigen::aligned_allocator< Eigen::Vector3d > > &voxel_centers) const
Returns the voxel centers of all occupied/existing leaves of the tree.
This code defines the octree used for point storage at Urban Robotics.
shared_ptr< const std::vector< int > > IndicesConstPtr
RandomSample applies a random sampling with uniform probability.
void init(const std::uint64_t &depth, const Eigen::Vector3d &min, const Eigen::Vector3d &max, const boost::filesystem::path &root_name, const std::string &coord_sys)
void getOccupiedVoxelCenters(AlignedPointTVector &voxel_centers, std::size_t query_depth) const
Returns the voxel centers of all existing voxels at query_depth.
std::string node_index_extension_
void setLODFilter(const pcl::Filter< pcl::PCLPointCloud2 >::Ptr &filter_arg)
Sets the filter to use when building the levels of depth.
shared_ptr< const OutofcoreOctreeBase< ContainerT, pcl::PointXYZRGB > > ConstPtr
OutofcoreOctreeBase & operator=(OutofcoreOctreeBase &rval)
void setSamplePercent(const double sample_percent_arg)
Sets the sampling percent for constructing LODs.
OutofcoreNodeType * getBranchChildPtr(const BranchNode &branch_arg, unsigned char childIdx_arg) const
pcl::Filter< pcl::PCLPointCloud2 >::Ptr getLODFilter()
std::uint64_t addDataToLeaf(const AlignedPointTVector &p)
Recursively add points to the tree.