28 #ifndef mrpt_maps_PCL_adapters_H
29 #define mrpt_maps_PCL_adapters_H
31 #include <mrpt/config.h>
38 #include <pcl/point_types.h>
39 #include <pcl/point_cloud.h>
50 pcl::PointCloud<pcl::PointXYZ> &
m_obj;
53 static const int HAS_RGB = 0;
54 static const int HAS_RGBf = 0;
55 static const int HAS_RGBu8 = 0;
58 inline PointCloudAdapter(
const pcl::PointCloud<pcl::PointXYZ> &obj) : m_obj(*const_cast<pcl::PointCloud<pcl::PointXYZ>*>(&obj)) { }
60 inline size_t size()
const {
return m_obj.points.size(); }
62 inline void resize(
const size_t N) { m_obj.points.resize(N); }
66 inline void getPointXYZ(
const size_t idx, T &x,T &y, T &z)
const {
67 const pcl::PointXYZ &p=m_obj.points[idx];
72 pcl::PointXYZ &p=m_obj.points[idx];
83 pcl::PointCloud<pcl::PointXYZRGB> &
m_obj;
86 static const int HAS_RGB = 1;
87 static const int HAS_RGBf = 0;
88 static const int HAS_RGBu8 = 1;
91 inline PointCloudAdapter(
const pcl::PointCloud<pcl::PointXYZRGB> &obj) : m_obj(*const_cast<pcl::PointCloud<pcl::PointXYZRGB>*>(&obj)) { }
93 inline size_t size()
const {
return m_obj.points.size(); }
95 inline void resize(
const size_t N) { m_obj.points.resize(N); }
99 inline void getPointXYZ(
const size_t idx, T &x,T &y, T &z)
const {
100 const pcl::PointXYZRGB &p=m_obj.points[idx];
105 pcl::PointXYZRGB &p=m_obj.points[idx];
111 template <
typename T>
112 inline void getPointXYZ_RGBf(
const size_t idx, T &x,T &y, T &z,
float &r,
float &g,
float &b)
const {
113 const pcl::PointXYZRGB &p=m_obj.points[idx];
115 r=p.r/255.f; g=p.g/255.f; b=p.b/255.f;
119 pcl::PointXYZRGB &p=m_obj.points[idx];
121 p.r=r*255; p.g=g*255; p.b=b*255;
125 template <
typename T>
126 inline void getPointXYZ_RGBu8(
const size_t idx, T &x,T &y, T &z, uint8_t &r,uint8_t &g,uint8_t &b)
const {
127 const pcl::PointXYZRGB &p=m_obj.points[idx];
133 pcl::PointXYZRGB &p=m_obj.points[idx];
139 inline void getPointRGBf(
const size_t idx,
float &r,
float &g,
float &b)
const {
140 const pcl::PointXYZRGB &p=m_obj.points[idx];
141 r=p.r/255.f; g=p.g/255.f; b=p.b/255.f;
144 inline void setPointRGBf(
const size_t idx,
const float r,
const float g,
const float b) {
145 pcl::PointXYZRGB &p=m_obj.points[idx];
146 p.r=r*255; p.g=g*255; p.b=b*255;
150 inline void getPointRGBu8(
const size_t idx, uint8_t &r,uint8_t &g,uint8_t &b)
const {
151 const pcl::PointXYZRGB &p=m_obj.points[idx];
155 inline void setPointRGBu8(
const size_t idx,
const uint8_t r,
const uint8_t g,
const uint8_t b) {
156 pcl::PointXYZRGB &p=m_obj.points[idx];
168 pcl::PointCloud<pcl::PointXYZRGBA> &
m_obj;
171 static const int HAS_RGB = 1;
172 static const int HAS_RGBf = 0;
173 static const int HAS_RGBu8 = 1;
176 inline PointCloudAdapter(
const pcl::PointCloud<pcl::PointXYZRGBA> &obj) : m_obj(*const_cast<pcl::PointCloud<pcl::PointXYZRGBA>*>(&obj)) { }
178 inline size_t size()
const {
return m_obj.points.size(); }
180 inline void resize(
const size_t N) { m_obj.points.resize(N); }
183 template <
typename T>
184 inline void getPointXYZ(
const size_t idx, T &x,T &y, T &z)
const {
185 const pcl::PointXYZRGBA &p=m_obj.points[idx];
190 pcl::PointXYZRGBA &p=m_obj.points[idx];
196 template <
typename T>
197 inline void getPointXYZ_RGBf(
const size_t idx, T &x,T &y, T &z,
float &r,
float &g,
float &b)
const {
198 const pcl::PointXYZRGBA &p=m_obj.points[idx];
200 r=p.r/255.f; g=p.g/255.f; b=p.b/255.f;
204 pcl::PointXYZRGBA &p=m_obj.points[idx];
206 p.r=r*255; p.g=g*255; p.b=b*255;
210 template <
typename T>
211 inline void getPointXYZ_RGBu8(
const size_t idx, T &x,T &y, T &z, uint8_t &r,uint8_t &g,uint8_t &b)
const {
212 const pcl::PointXYZRGBA &p=m_obj.points[idx];
218 pcl::PointXYZRGBA &p=m_obj.points[idx];
224 inline void getPointRGBf(
const size_t idx,
float &r,
float &g,
float &b)
const {
225 const pcl::PointXYZRGBA &p=m_obj.points[idx];
226 r=p.r/255.f; g=p.g/255.f; b=p.b/255.f;
229 inline void setPointRGBf(
const size_t idx,
const float r,
const float g,
const float b) {
230 pcl::PointXYZRGBA &p=m_obj.points[idx];
231 p.r=r*255; p.g=g*255; p.b=b*255;
235 inline void getPointRGBu8(
const size_t idx, uint8_t &r,uint8_t &g,uint8_t &b)
const {
236 const pcl::PointXYZRGBA &p=m_obj.points[idx];
240 inline void setPointRGBu8(
const size_t idx,
const uint8_t r,
const uint8_t g,
const uint8_t b) {
241 pcl::PointXYZRGBA &p=m_obj.points[idx];