iLab Neuromorphic Robotics Toolkit  0.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
TargetCloud.H
Go to the documentation of this file.
1 /*! @file
2  @author Shane Grant
3  @copyright GNU Public License (GPL v3)
4  @section License
5  @verbatim
6  // ////////////////////////////////////////////////////////////////////////
7  // The iLab Neuromorphic Robotics Toolkit (NRT) //
8  // Copyright 2010-2012 by the University of Southern California (USC) //
9  // and the iLab at USC. //
10  // //
11  // iLab - University of Southern California //
12  // Hedco Neurociences Building, Room HNB-10 //
13  // Los Angeles, Ca 90089-2520 - USA //
14  // //
15  // See http://ilab.usc.edu for information about this project. //
16  // ////////////////////////////////////////////////////////////////////////
17  // This file is part of The iLab Neuromorphic Robotics Toolkit. //
18  // //
19  // The iLab Neuromorphic Robotics Toolkit is free software: you can //
20  // redistribute it and/or modify it under the terms of the GNU General //
21  // Public License as published by the Free Software Foundation, either //
22  // version 3 of the License, or (at your option) any later version. //
23  // //
24  // The iLab Neuromorphic Robotics Toolkit is distributed in the hope //
25  // that it will be useful, but WITHOUT ANY WARRANTY; without even the //
26  // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
27  // PURPOSE. See the GNU General Public License for more details. //
28  // //
29  // You should have received a copy of the GNU General Public License //
30  // along with The iLab Neuromorphic Robotics Toolkit. If not, see //
31  // <http://www.gnu.org/licenses/>. //
32  // ////////////////////////////////////////////////////////////////////////
33  @endverbatim */
34 
35 #ifdef NRT_HAVE_CLOUD
36 #ifndef INCLUDE_NRT_POINTCLOUD_COMMON_TARGETBASE_H
37 #define INCLUDE_NRT_POINTCLOUD_COMMON_TARGETBASE_H
38 
40 
41 namespace nrt
42 {
43  //! A base class for any PointCloud class that has a concept of a "Target" point cloud
44  /*! This class provides several common routines that might be associated with having
45  a point cloud Target, such as setting the Target to be a specific cloud
46  or setting a specific subset of points to consider.
47 
48  Whether the Target cloud is treated as constant or not is left to the discretion of the
49  programmer. The copy-on-write policy employed by PointCloud ensures that any modifications
50  made to the local copy of the point cloud do not propogate to the original and that any
51  modifications to the original propogate to the local version unless it itself is modified.
52 
53  @ingroup pointcloud2common */
54  class TargetCloud
55  {
56  public:
57  //! Initializes with no data
58  TargetCloud();
59 
60  //! Initializes with a point cloud and no subset
61  TargetCloud( PointCloud2 const cloud );
62 
63  //! Initializes with a point cloud and a specific subset
64  TargetCloud( PointCloud2 const cloud, Indices const indices );
65 
66  //! Returns the current working size of the Source
67  /*! If we are using a subset, this is the size of the subset - otherwise it is the size of the cloud */
68  size_t getWorkingSize() const;
69 
70  //! The source point cloud
72 
73  //! The optional indices
75 
76  //! Whether we use a subset or not
77  bool useSubset;
78 
79  protected:
80  //! Sets to use a specific cloud
81  void setCloud( PointCloud2 const cloud );
82 
83  //! Sets to sue a specific subset of a cloud
84  void setCloud( PointCloud2 const cloud, Indices const indices );
85  }; // class SourceBase
86 } // namespace nrt
87 
88 #endif // INCLUDE_NRT_POINTCLOUD_COMMON_TARGETBASE_H
89 #endif // NRT_HAVE_CLOUD