9 #ifndef CColouredPointsMap_H
10 #define CColouredPointsMap_H
24 class CObservation3DRangeScan;
43 virtual ~CColouredPointsMap();
57 virtual
void reserve(
size_t newLength);
63 virtual
void resize(
size_t newLength);
69 virtual
void setSize(
size_t newLength);
72 virtual
void setPointFast(
size_t index,
float x,
float y,
float z)
80 virtual void insertPointFast(
float x,
float y,
float z = 0 );
84 virtual void copyFrom(
const CPointsMap &obj);
90 virtual void getPointAllFieldsFast(
const size_t index, std::vector<float> & point_data )
const {
92 point_data[0] = x[index];
93 point_data[1] = y[index];
94 point_data[2] = z[index];
95 point_data[3] = m_color_R[index];
96 point_data[4] = m_color_G[index];
97 point_data[5] = m_color_B[index];
106 x[index] = point_data[0];
107 y[index] = point_data[1];
108 z[index] = point_data[2];
109 m_color_R[index] = point_data[3];
110 m_color_G[index] = point_data[4];
111 m_color_B[index] = point_data[5];
115 virtual void loadFromRangeScan(
116 const CObservation2DRangeScan &rangeScan,
117 const CPose3D *robotPose = NULL );
120 virtual void loadFromRangeScan(
121 const CObservation3DRangeScan &rangeScan,
122 const CPose3D *robotPose = NULL );
127 virtual void addFrom_classSpecific(
const CPointsMap &anotherMap,
const size_t nPreviousPoints);
143 bool save3D_and_colour_to_text_file(
const std::string &file)
const;
148 virtual void setPoint(
size_t index,
float x,
float y,
float z,
float R,
float G,
float B);
152 inline void setPoint(
size_t index,
float x,
float y,
float z) {
154 setPointFast(index,x,y,z);
164 virtual void insertPoint(
float x,
float y,
float z,
float R,
float G,
float B );
173 inline void insertPoint(
float x,
float y,
float z) { insertPointFast(x,y,z); mark_as_modified(); }
178 void setPointColor(
size_t index,
float R,
float G,
float B);
183 this->m_color_R[index]=R;
184 this->m_color_G[index]=G;
185 this->m_color_B[index]=B;
190 virtual void getPoint(
size_t index,
float &x,
float &y,
float &z,
float &R,
float &G,
float &B )
const;
193 unsigned long getPoint(
size_t index,
float &x,
float &y,
float &z)
const;
196 void getPointColor(
size_t index,
float &R,
float &G,
float &B )
const;
201 R = m_color_R[index];
202 G = m_color_G[index];
203 B = m_color_B[index];
212 virtual void getAs3DObject ( mrpt::opengl::CSetOfObjectsPtr &outObj )
const;
225 cmFromHeightRelativeToSensor = 0,
226 cmFromHeightRelativeToSensorJet = 0,
227 cmFromHeightRelativeToSensorGray = 1,
228 cmFromIntensityImage = 2
239 void loadFromConfigFile(
241 const std::string §ion);
245 void dumpToTextStream(
CStream &out)
const;
254 void resetPointsMinDist(
float defValue = 2000.0f );
260 virtual bool savePCDFile(
const std::string &filename,
bool save_as_binary)
const;
272 template <
class POINTCLOUD>
275 const size_t N = cloud.points.size();
278 const float f = 1.0f/255.0f;
279 for (
size_t i=0;i<N;++i)
280 this->insertPoint(cloud.points[i].x,cloud.points[i].y,cloud.points[i].z,cloud.points[i].r*f,cloud.points[i].g*f,cloud.points[i].b*f);
284 template <
class POINTCLOUD>
287 const size_t nThis = this->
size();
288 this->getPCLPointCloud(cloud);
290 for (
size_t i = 0; i < nThis; ++i) {
292 this->getPointColor_fast(i,R,G,B);
293 cloud.points[i].r =
static_cast<uint8_t
>(R*255);
294 cloud.points[i].g =
static_cast<uint8_t
>(G*255);
295 cloud.points[i].b =
static_cast<uint8_t
>(B*255);
309 virtual void internal_clear();
319 virtual void PLY_import_set_vertex_count(
const size_t N);
327 virtual void PLY_export_get_vertex(
350 static const int HAS_RGB = 1;
351 static const int HAS_RGBf = 1;
352 static const int HAS_RGBu8 = 0;
357 inline size_t size()
const {
return m_obj.
size(); }
362 template <
typename T>
363 inline void getPointXYZ(
const size_t idx, T &x,T &y, T &z)
const {
367 inline void setPointXYZ(
const size_t idx,
const coords_t x,
const coords_t y,
const coords_t z) {
372 template <
typename T>
373 inline void getPointXYZ_RGBf(
const size_t idx, T &x,T &y, T &z,
float &r,
float &g,
float &b)
const {
377 inline void setPointXYZ_RGBf(
const size_t idx,
const coords_t x,
const coords_t y,
const coords_t z,
const float r,
const float g,
const float b) {
382 template <
typename T>
383 inline void getPointXYZ_RGBu8(
const size_t idx, T &x,T &y, T &z, uint8_t &r,uint8_t &g,uint8_t &b)
const {
386 r=Rf*255; g=Gf*255; b=Bf*255;
389 inline void setPointXYZ_RGBu8(
const size_t idx,
const coords_t x,
const coords_t y,
const coords_t z,
const uint8_t r,
const uint8_t g,
const uint8_t b) {
396 inline void setPointRGBf(
const size_t idx,
const float r,
const float g,
const float b) { m_obj.
setPointColor_fast(idx,r,g,b); }
399 inline void getPointRGBu8(
const size_t idx, uint8_t &r,uint8_t &g,uint8_t &b)
const {
402 r=R*255; g=G*255; b=B*255;
405 inline void setPointRGBu8(
const size_t idx,
const uint8_t r,
const uint8_t g,
const uint8_t b) {
void setFromPCLPointCloudRGB(const POINTCLOUD &cloud)
Loads a PCL point cloud (WITH RGB information) into this MRPT class (for clouds without RGB data...
void insertPoint(const mrpt::math::TPoint3D &p)
The definition of parameters for generating colors from laser scans.
void setPoint(size_t index, float x, float y, float z)
float coords_t
The type of each point XYZ coordinates.
void getPointXYZ_RGBf(const size_t idx, T &x, T &y, T &z, float &r, float &g, float &b) const
Get XYZ_RGBf coordinates of i'th point.
void getPointFast(size_t index, float &x, float &y, float &z) const
Just like getPoint() but without checking out-of-bound index and without returning the point weight...
void setPointXYZ_RGBf(const size_t idx, const coords_t x, const coords_t y, const coords_t z, const float r, const float g, const float b)
Set XYZ_RGBf coordinates of i'th point.
A map of 2D/3D points with individual colours (RGB).
void insertPoint(const CPoint3D &p)
size_t size(const MATRIXLIKE &m, int dim)
virtual void setPointFast(size_t index, float x, float y, float z)
Changes the coordinates of the given point (0-based index), without checking for out-of-bounds and wi...
size_t size() const
Returns the number of stored points in the map.
virtual bool hasColorPoints() const
Returns true if the point map has a color field for each point.
#define ASSERT_BELOW_(__A, __B)
void resize(const size_t N)
Set number of points (to uninitialized values)
virtual ~TColourOptions()
double z
X,Y,Z coordinates.
void setPointXYZ(const size_t idx, const coords_t x, const coords_t y, const coords_t z)
Set XYZ coordinates of i'th point.
void setPointXYZ_RGBu8(const size_t idx, const coords_t x, const coords_t y, const coords_t z, const uint8_t r, const uint8_t g, const uint8_t b)
Set XYZ_RGBu8 coordinates of i'th point.
void getPointXYZ_RGBu8(const size_t idx, T &x, T &y, T &z, uint8_t &r, uint8_t &g, uint8_t &b) const
Get XYZ_RGBu8 coordinates of i'th point.
TColouringMethod
The choices for coloring schemes:
std::vector< float > m_color_R
The color data.
This class allows loading and storing values and vectors of different types from a configuration text...
void insertPoint(float x, float y, float z)
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
#define DEFINE_SERIALIZABLE_PRE_CUSTOM_BASE_LINKAGE(class_name, base_name, _LINKAGE_)
This declaration must be inserted in all CSerializable classes definition, before the class declarati...
double x() const
Common members of all points & poses classes.
Lightweight 3D point (float version).
TColourOptions colorScheme
The options employed when inserting laser scans in the map.
void setPointRGBu8(const size_t idx, const uint8_t r, const uint8_t g, const uint8_t b)
Set RGBu8 coordinates of i'th point.
virtual void resize(size_t newLength)
Resizes all point buffers so they can hold the given number of points: newly created points are set t...
EIGEN_STRONG_INLINE void setSize(size_t row, size_t col)
Changes the size of matrix, maintaining its previous content as possible and padding with zeros where...
void setPoint(size_t index, mrpt::math::TPoint3Df &p)
virtual void setPointAllFieldsFast(const size_t index, const std::vector< float > &point_data)
Set all the data fields for one point as a vector: [X Y Z R G B] Unlike setPointAllFields(), this method does not check for index out of bounds.
size_t size() const
Get number of points.
A class used to store a 3D point.
mrpt::slam::CColouredPointsMap & m_obj
Declares a class derived from "CObservation" that encapsules an image from a camera, whose relative pose to robot is also stored.
void getPointRGBf(const size_t idx, float &r, float &g, float &b) const
Get RGBf color of i'th point.
void getPointXYZ(const size_t idx, T &x, T &y, T &z) const
Get XYZ coordinates of i'th point.
void insertPoint(const mrpt::math::TPoint3Df &p)
void setPointColor_fast(size_t index, float R, float G, float B)
Like setPointColor but without checking for out-of-index erors.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
#define DEFINE_SERIALIZABLE(class_name)
This declaration must be inserted in all CSerializable classes definition, within the class declarati...
An adapter to different kinds of point cloud object.
void getPCLPointCloudXYZRGB(POINTCLOUD &cloud) const
Like CPointsMap::getPCLPointCloud() but for PointCloud
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
void getPointRGBu8(const size_t idx, uint8_t &r, uint8_t &g, uint8_t &b) const
Get RGBu8 color of i'th point.
A RGB color - floats in the range [0,1].
virtual void setPoint(size_t index, float x, float y, float z, float R, float G, float B)
Changes a given point from map.
A cloud of points in 2D or 3D, which can be built from a sequence of laser scans or other sensors...
#define DEFINE_SERIALIZABLE_POST_CUSTOM_BASE_LINKAGE(class_name, base_name, _LINKAGE_)
void setPoint(size_t index, float x, float y)
void getPointColor_fast(size_t index, float &R, float &G, float &B) const
Like getPointColor but without checking for out-of-index erors.
This is a virtual base class for sets of options than can be loaded from and/or saved to configuratio...
virtual void getPoint(size_t index, float &x, float &y, float &z, float &R, float &G, float &B) const
Retrieves a point and its color (colors range is [0,1])