10 #define CDynamicGrid_H 29 virtual unsigned int getSizeX()
const = 0;
30 virtual unsigned int getSizeY()
const = 0;
31 virtual float getCellAsFloat(
unsigned int cx,
unsigned int cy)
const = 0;
49 return const_cast<std::vector<T>&
>(
m_map);
58 double x_min = -10.0,
double x_max = 10.0,
double y_min = -10.0f,
59 double y_max = 10.0f,
double resolution = 0.10f)
69 setSize(x_min, x_max, y_min, y_max, resolution);
85 const double x_min,
const double x_max,
const double y_min,
86 const double y_max,
const double resolution,
87 const T* fill_value =
nullptr)
122 it !=
m_map.end(); ++it)
130 double new_x_min,
double new_x_max,
double new_y_min,
double new_y_max,
131 const T& defaultValueNewCells,
double additionalMarginMeters = 2.0)
144 if (additionalMarginMeters > 0)
147 new_x_min = floor(new_x_min - additionalMarginMeters);
149 new_x_max = ceil(new_x_max + additionalMarginMeters);
151 new_y_min = floor(new_y_min - additionalMarginMeters);
153 new_y_max = ceil(new_y_max + additionalMarginMeters);
179 typename std::vector<T> new_map;
180 new_map.resize(new_size_x * new_size_y, defaultValueNewCells);
189 (new_map.begin() + extra_x_izq +
190 (
y + extra_y_arr) * new_size_x);
217 if (cx < 0 || cx >= static_cast<int>(
m_size_x))
return nullptr;
218 if (cy < 0 || cy >= static_cast<int>(
m_size_y))
return nullptr;
226 if (cx < 0 || cx >= static_cast<int>(
m_size_x))
return nullptr;
227 if (cy < 0 || cy >= static_cast<int>(
m_size_y))
return nullptr;
245 inline const T*
cellByIndex(
unsigned int cx,
unsigned int cy)
const 283 inline void idx2cxcy(
const int& idx,
int& cx,
int& cy)
const 314 if (
m_map.empty())
return;
316 for (
size_t cy = 0; cy <
m_size_y; cy++)
317 for (
size_t cx = 0; cx <
m_size_x; cx++) m.set_unsafe(cy, cx, *
c++);
334 virtual unsigned int getSizeX()
const {
return m_obj.getSizeX(); }
335 virtual unsigned int getSizeY()
const {
return m_obj.getSizeY(); }
336 virtual float getCellAsFloat(
unsigned int cx,
unsigned int cy)
const 338 return m_obj.cell2float(
339 m_obj.m_map[cx + cy * m_obj.getSizeX()]);
343 aux_saver aux(*
this);
344 return aux.saveToTextFile(fileName);
352 out << static_cast<uint32_t>(
m_size_x)
358 if (!cast_from_float)
365 float xmin, xmax, ymin, ymax,
res;
366 in >> xmin >> xmax >> ymin >> ymax >>
res;
377 m_map.resize(nX * nY);
std::vector< T > & m_map_castaway_const() const
Used only from logically const method that really need to modify the object.
double getXMax() const
Returns the "x" coordinate of right side of grid map.
void clear()
Erase the contents of all the cells.
int xy2idx(double x, double y) const
virtual float cell2float(const T &c) const
The user must implement this in order to provide "saveToTextFile" a way to convert each cell into a n...
virtual unsigned int getSizeY() const =0
int x2idx(double x) const
Transform a coordinate values into cell indexes.
double getYMin() const
Returns the "y" coordinate of top side of grid map.
double getXMin() const
Returns the "x" coordinate of left side of grid map.
size_t getSizeY() const
Returns the vertical size of grid map in cells count.
virtual void resize(double new_x_min, double new_x_max, double new_y_min, double new_y_max, const T &defaultValueNewCells, double additionalMarginMeters=2.0)
Changes the size of the grid, maintaining previous contents.
void fill(const T &value)
Fills all the cells with the same value.
GLsizei GLsizei GLuint * obj
void idx2cxcy(const int &idx, int &cx, int &cy) const
Transform a global (linear) cell index value into its corresponding (x,y) cell indexes.
int y2idx(double y) const
bool saveToTextFile(const std::string &fileName) const
T * cellByPos(double x, double y)
Returns a pointer to the contents of a cell given by its coordinates, or nullptr if it is out of the ...
double idx2y(int cy) const
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
A 2D grid of dynamic size which stores any kind of data at each cell.
double getYMax() const
Returns the "y" coordinate of bottom side of grid map.
#define MRPT_UNUSED_PARAM(a)
Can be used to avoid "not used parameters" warnings from the compiler.
std::vector< T > m_map
The cells.
size_t getSizeX() const
Returns the horizontal size of grid map in cells count.
CDynamicGrid(double x_min=-10.0, double x_max=10.0, double y_min=-10.0f, double y_max=10.0f, double resolution=0.10f)
Constructor.
virtual unsigned int getSizeX() const =0
GLsizei const GLchar ** string
T * cellByIndex(unsigned int cx, unsigned int cy)
Returns a pointer to the contents of a cell given by its cell indexes, or nullptr if it is out of the...
double idx2x(int cx) const
Transform a cell index into a coordinate value of the cell central point.
virtual float getCellAsFloat(unsigned int cx, unsigned int cy) const =0
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
double getResolution() const
Returns the resolution of the grid map.
const T * cellByPos(double x, double y) const
virtual ~CDynamicGrid()
Destructor.
const T * cellByIndex(unsigned int cx, unsigned int cy) const
Returns a pointer to the contents of a cell given by its cell indexes, or nullptr if it is out of the...
void setSize(const double x_min, const double x_max, const double y_min, const double y_max, const double resolution, const T *fill_value=nullptr)
Changes the size of the grid, ERASING all previous contents.
bool saveToTextFile(const std::string &fileName) const
Saves a float representation of the grid (via "cell2float()") to a text file.
int round(const T value)
Returns the closer integer (int) to x.
void dyngridcommon_writeToStream(mrpt::utils::CStream &out) const
GLsizei const GLfloat * value
unsigned __int32 uint32_t
void dyngridcommon_readFromStream(mrpt::utils::CStream &in, bool cast_from_float=false)
void getAsMatrix(MAT &m) const
Get the entire grid as a matrix.