Point Cloud Library (PCL)  1.6.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
concave_hull.h
Go to the documentation of this file.
1 /*
2  * Software License Agreement (BSD License)
3  *
4  * Point Cloud Library (PCL) - www.pointclouds.org
5  * Copyright (c) 2009-2012, 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: concave_hull.h 6126 2012-07-03 20:19:58Z aichim $
37  *
38  */
39 
40 #include <pcl/pcl_config.h>
41 #ifdef HAVE_QHULL
42 
43 #ifndef PCL_CONCAVE_HULL_H
44 #define PCL_CONCAVE_HULL_H
45 
47 
48 namespace pcl
49 {
51 
55  template<typename PointInT>
56  class ConcaveHull : public MeshConstruction<PointInT>
57  {
58  protected:
59  using PCLBase<PointInT>::input_;
60  using PCLBase<PointInT>::indices_;
61  using PCLBase<PointInT>::initCompute;
62  using PCLBase<PointInT>::deinitCompute;
63 
64  public:
65  using MeshConstruction<PointInT>::reconstruct;
66 
68  typedef typename PointCloud::Ptr PointCloudPtr;
70 
72  ConcaveHull () : alpha_ (0), keep_information_ (false), voronoi_centers_ (), dim_(0)
73  {
74  };
75 
82  void
83  reconstruct (PointCloud &points,
84  std::vector<pcl::Vertices> &polygons);
85 
89  void
90  reconstruct (PointCloud &output);
91 
98  inline void
99  setAlpha (double alpha)
100  {
101  alpha_ = alpha;
102  }
103 
105  inline double
106  getAlpha ()
107  {
108  return (alpha_);
109  }
110 
114  inline void
115  setVoronoiCenters (PointCloudPtr voronoi_centers)
116  {
117  voronoi_centers_ = voronoi_centers;
118  }
119 
124  void
125  setKeepInformation (bool value)
126  {
127  keep_information_ = value;
128  }
129 
131  inline int
132  getDim () const
133  {
134  return dim_;
135  }
136 
138  inline int
139  getDimension () const
140  {
141  return dim_;
142  }
143 
147  void
148  setDimension (int dimension)
149  {
150  if ((dimension == 2) || (dimension == 3))
151  dim_ = dimension;
152  else
153  PCL_ERROR ("[pcl::%s::setDimension] Invalid input dimension specified!\n", getClassName ().c_str ());
154  }
155 
156  protected:
158  std::string
159  getClassName () const
160  {
161  return ("ConcaveHull");
162  }
163 
164  protected:
171  void
172  performReconstruction (PointCloud &points,
173  std::vector<pcl::Vertices> &polygons);
174 
175  virtual void
176  performReconstruction (PolygonMesh &output);
177 
178  virtual void
179  performReconstruction (std::vector<pcl::Vertices> &polygons);
180 
184  double alpha_;
185 
189  bool keep_information_;
190 
192  PointCloudPtr voronoi_centers_;
193 
195  int dim_;
196  };
197 }
198 
199 #endif //#ifndef PCL_CONCAVE_HULL
200 #endif