MIRA
PointCloudTypes.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) by
3  * MetraLabs GmbH (MLAB), GERMANY
4  * and
5  * Neuroinformatics and Cognitive Robotics Labs (NICR) at TU Ilmenau, GERMANY
6  * All rights reserved.
7  *
8  * Redistribution and modification of this code is strictly prohibited.
9  *
10  * IN NO EVENT SHALL "MLAB" OR "NICR" BE LIABLE TO ANY PARTY FOR DIRECT,
11  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF
12  * THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF "MLAB" OR
13  * "NICR" HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14  *
15  * "MLAB" AND "NICR" SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING,
16  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
17  * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
18  * ON AN "AS IS" BASIS, AND "MLAB" AND "NICR" HAVE NO OBLIGATION TO
19  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR MODIFICATIONS.
20  */
21 
30 #ifndef _MIRA_POINTCLOUDTYPES_H_
31 #define _MIRA_POINTCLOUDTYPES_H_
32 
33 #include <platform/Types.h>
34 #include <geometry/Point.h>
35 
36 #include <maps/PointCloud.h>
37 
38 namespace mira { namespace maps {
39 
41 
43 // nonintrusive pointCloudFormat methods for our geometry points
44 
45 template <>
47 {
48  PCFormat fmt;
49  fmt.addField("x",PCDataField::FLOAT32,1);
50  fmt.addField("y",PCDataField::FLOAT32,1);
51  return fmt;
52 }
53 
54 template <>
56 {
57  PCFormat fmt;
58  fmt.addField("x",PCDataField::FLOAT32,1);
59  fmt.addField("y",PCDataField::FLOAT32,1);
60  fmt.addField("z",PCDataField::FLOAT32,1);
61  return fmt;
62 }
63 
64 template <>
65 inline PCFormat pointCloudFormat<Eigen::Vector3f>()
66 {
67  PCFormat fmt;
68  fmt.addField("x",PCDataField::FLOAT32,1);
69  fmt.addField("y",PCDataField::FLOAT32,1);
70  fmt.addField("z",PCDataField::FLOAT32,1);
71  return fmt;
72 }
73 
75 
78 
80 
81 class Point2rgb : public Point2f
82 {
83 public:
84 
86 
87 public:
88 
89  Point2rgb() : rgb(0) {}
90  Point2rgb(const Point2f& p, uint32 iRgb) :
91  Point2f(p), rgb(iRgb) {}
92 
93 public:
94 
96  {
97  PCFormat fmt;
98  fmt.addField("x",PCDataField::FLOAT32,1);
99  fmt.addField("y",PCDataField::FLOAT32,1);
100  fmt.addField("rgb",PCDataField::UINT32,1);
101  return fmt;
102  }
103 };
104 
106 
108 
109 class Point3rgb : public Point3f
110 {
111 public:
112 
114 
115 public:
116 
117  Point3rgb() : rgb(0) {}
118  Point3rgb(const Point3f& p, uint32 iRgb) :
119  Point3f(p), rgb(iRgb) {}
120 
121 public:
122 
124  {
125  PCFormat fmt;
126  fmt.addField("x",PCDataField::FLOAT32,1);
127  fmt.addField("y",PCDataField::FLOAT32,1);
128  fmt.addField("z",PCDataField::FLOAT32,1);
129  fmt.addField("rgb",PCDataField::UINT32,1);
130  return fmt;
131  }
132 };
133 
135 
137 
138 
139 union PCColor
140 {
142  struct { uint8 r,g,b,a; };
143 };
144 static_assert(sizeof(PCColor)==sizeof(uint32), "PCColor should be 32 bit");
145 
146 template <>
148 
150 
151 class Point3labeled : public Point3f
152 {
153 public:
154 
155  int label;
156 
157 public:
158 
159  Point3labeled() : label(-1) {}
160  Point3labeled(const Point3f& p, int iLabel) :
161  Point3f(p), label(iLabel) {}
162 
163 public:
164 
166  {
167  PCFormat fmt;
168  fmt.addField("x",PCDataField::FLOAT32,1);
169  fmt.addField("y",PCDataField::FLOAT32,1);
170  fmt.addField("z",PCDataField::FLOAT32,1);
171  fmt.addField("label",PCDataField::INT32,1);
172  return fmt;
173  }
174 };
175 
177 
179 
180 }} // namespace
181 
182 #endif /* _MIRA_POINTCLOUD_H_ */
PointCloud< Point3f > PointCloud3
Definition: PointCloudTypes.h:77
Type
Definition: PointCloudFormat.h:49
Definition: PointCloudFormat.h:91
Point3rgb(const Point3f &p, uint32 iRgb)
Definition: PointCloudTypes.h:118
int label
Definition: PointCloudTypes.h:155
Definition: PointCloud.h:172
static PCFormat pointCloudFormat()
Definition: PointCloudTypes.h:95
uint8 b
Definition: PointCloudTypes.h:142
uint8 a
Definition: PointCloudTypes.h:142
PointCloud< Point3labeled > PointCloud3labeled
Definition: PointCloudTypes.h:176
uint32 rgb
Definition: PointCloudTypes.h:113
uint32 value
Definition: PointCloudTypes.h:141
Definition: PointCloudTypes.h:139
Point3labeled()
Definition: PointCloudTypes.h:159
uint32_t uint32
static const PCDataField::Type type
Definition: PointCloudFormat.h:91
uint8 g
Definition: PointCloudTypes.h:142
Point2rgb()
Definition: PointCloudTypes.h:89
PointCloud< Point3rgb > PointCloud3rgb
Definition: PointCloudTypes.h:134
Point3rgb()
Definition: PointCloudTypes.h:117
Point3labeled(const Point3f &p, int iLabel)
Definition: PointCloudTypes.h:160
uint8_t uint8
PCFormat pointCloudFormat< Point3f >()
Definition: PointCloudTypes.h:55
Point2rgb(const Point2f &p, uint32 iRgb)
Definition: PointCloudTypes.h:90
static PCFormat pointCloudFormat()
Definition: PointCloudTypes.h:123
Definition: PointCloudTypes.h:151
PointCloud< Point2f > PointCloud2
Definition: PointCloudTypes.h:76
Description.
uint8 r
Definition: PointCloudTypes.h:142
static PCFormat pointCloudFormat()
Definition: PointCloudTypes.h:165
uint32 rgb
Definition: PointCloudTypes.h:85
Definition: PointCloudFormat.h:53
Definition: PointCloudFormat.h:52
Definition: PointCloudFormat.h:104
PointCloud< Point2rgb > PointCloud2rgb
Definition: PointCloudTypes.h:105
PCFormat pointCloudFormat< Point2f >()
Definition: PointCloudTypes.h:46
void addField(const std::string &semantic, PCDataField::Type type, std::size_t count)
Definition: PointCloudTypes.h:109
Definition: PointCloudTypes.h:81
Definition: PointCloudFormat.h:54