Point Cloud Library (PCL) 1.12.0
octree_pointcloud_occupancy.h
1/*
2 * Software License Agreement (BSD License)
3 *
4 * Point Cloud Library (PCL) - www.pointclouds.org
5 * Copyright (c) 2010-2011, Willow Garage, Inc.
6 *
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * * Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * * Redistributions in binary form must reproduce the above
16 * copyright notice, this list of conditions and the following
17 * disclaimer in the documentation and/or other materials provided
18 * with the distribution.
19 * * Neither the name of Willow Garage, Inc. nor the names of its
20 * contributors may be used to endorse or promote products derived
21 * from this software without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 *
36 * $Id$
37 */
38
39#pragma once
40
41#include <pcl/octree/octree_pointcloud.h>
42
43namespace pcl {
44namespace octree {
45
46//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
47/** \brief @b Octree pointcloud occupancy class
48 * \tparam PointT type of point used in pointcloud
49 * This pointcloud octree class generate an octrees from a point cloud (zero-copy). No
50 * information is stored at the lead nodes. It can be used of occupancy checks.
51 * \note The octree pointcloud is initialized with its voxel resolution. Its bounding
52 * box is automatically adjusted or can be predefined.
53 * \ingroup octree
54 * \author Julius Kammerl (julius@kammerl.de)
55 */
56//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
57template <typename PointT,
58 typename LeafContainerT = OctreeContainerEmpty,
59 typename BranchContainerT = OctreeContainerEmpty>
61: public OctreePointCloud<PointT,
62 LeafContainerT,
63 BranchContainerT,
64 OctreeBase<LeafContainerT, BranchContainerT>>
65
66{
67
68public:
69 // public typedefs for single/double buffering
74
75 // public point cloud typedefs
76 using PointCloud =
79 LeafContainerT,
80 BranchContainerT>::PointCloudPtr;
84
85 /** \brief Constructor.
86 * \param resolution_arg: octree resolution at lowest octree level
87 * */
88 OctreePointCloudOccupancy(const double resolution_arg)
90 LeafContainerT,
91 BranchContainerT,
92 OctreeBase<LeafContainerT, BranchContainerT>>(resolution_arg)
93 {}
94
95 /** \brief Empty class constructor. */
96
98
99 /** \brief Set occupied voxel at point.
100 * \param point_arg: input point
101 * */
102 void
104 {
105 OctreeKey key;
106
107 // make sure bounding box is big enough
108 this->adoptBoundingBoxToPoint(point_arg);
109
110 // generate key
111 this->genOctreeKeyforPoint(point_arg, key);
112
113 // add point to octree at key
114 this->createLeaf(key);
115 }
116
117 /** \brief Set occupied voxels at all points from point cloud.
118 * \param cloud_arg: input point cloud
119 * */
120 void
122 {
123 for (const auto& point : *cloud_arg) {
124 // check for NaNs
125 if (isFinite(point)) {
126 // set voxel at point
127 this->setOccupiedVoxelAtPoint(point);
128 }
129 }
130 }
131};
132} // namespace octree
133
134} // namespace pcl
135
136#define PCL_INSTANTIATE_OctreePointCloudOccupancy(T) \
137 template class PCL_EXPORTS pcl::octree::OctreePointCloudOccupancy<T>;
PointCloud represents the base class in PCL for storing collections of 3D points.
Definition: point_cloud.h:173
OctreeContainerEmpty * createLeaf(uindex_t idx_x_arg, uindex_t idx_y_arg, uindex_t idx_z_arg)
Create new leaf node at (idx_x_arg, idx_y_arg, idx_z_arg).
Octree key class
Definition: octree_key.h:52
Octree pointcloud class
void genOctreeKeyforPoint(const PointT &point_arg, OctreeKey &key_arg) const
Generate octree key for voxel at a given point.
typename OctreePointCloud< PointT, LeafContainerT, BranchContainerT >::PointCloud PointCloud
void setOccupiedVoxelAtPoint(const PointT &point_arg)
Set occupied voxel at point.
OctreePointCloudOccupancy(const double resolution_arg)
Constructor.
typename OctreePointCloud< PointT, LeafContainerT, BranchContainerT >::PointCloudConstPtr PointCloudConstPtr
typename OctreePointCloud< PointT, LeafContainerT, BranchContainerT >::PointCloudPtr PointCloudPtr
void setOccupiedVoxelsAtPointsFromCloud(PointCloudPtr cloud_arg)
Set occupied voxels at all points from point cloud.
bool isFinite(const PointT &pt)
Tests if the 3D components of a point are all finite param[in] pt point to be tested return true if f...
Definition: point_tests.h:55
A point structure representing Euclidean xyz coordinates, and the RGB color.