17#define _USE_MATH_DEFINES
52 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) :
56 setSize(x_min,x_max,y_min,y_max,resolution);
70 const double x_min,
const double x_max,
71 const double y_min,
const double y_max,
72 const double resolution,
const T * fill_value = NULL)
101 inline void fill(
const T& value ) {
102 for (
typename std::vector<T>::iterator it=
m_map.begin();it!=
m_map.end();++it)
110 double new_x_min,
double new_x_max,
111 double new_y_min,
double new_y_max,
112 const T& defaultValueNewCells,
double additionalMarginMeters = 2.0 )
126 if (additionalMarginMeters>0)
128 if (new_x_min<
m_x_min) new_x_min= floor(new_x_min-additionalMarginMeters);
129 if (new_x_max>
m_x_max) new_x_max= ceil(new_x_max+additionalMarginMeters);
130 if (new_y_min<
m_y_min) new_y_min= floor(new_y_min-additionalMarginMeters);
131 if (new_y_max>
m_y_max) new_y_max= ceil(new_y_max+additionalMarginMeters);
152 typename std::vector<T> new_map;
153 new_map.resize(new_size_x*new_size_y,defaultValueNewCells);
157 typename std::vector<T>::iterator itSrc,itDst;
160 for (x=0,itSrc=(
m_map.begin()+y*
m_size_x),itDst=(new_map.begin()+extra_x_izq + (y+extra_y_arr)*new_size_x);
185 const int cx =
x2idx(x);
186 const int cy =
y2idx(y);
187 if( cx<0 || cx>=
static_cast<int>(
m_size_x) )
return NULL;
188 if( cy<0 || cy>=
static_cast<int>(
m_size_y) )
return NULL;
194 const int cx =
x2idx(x);
195 const int cy =
y2idx(y);
196 if( cx<0 || cx>=
static_cast<int>(
m_size_x) )
return NULL;
197 if( cy<0 || cy>=
static_cast<int>(
m_size_y) )
return NULL;
212 inline const T*
cellByIndex(
unsigned int cx,
unsigned int cy )
const
246 inline void idx2cxcy(
const int &idx,
int &cx,
int &cy )
const
266 if (
m_map.empty())
return;
267 const T* c = &
m_map[0];
270 m.set_unsafe(cy,cx, *c++);
285 virtual unsigned int getSizeX()
const {
return m_obj.getSizeX(); }
286 virtual unsigned int getSizeY()
const {
return m_obj.getSizeY(); }
287 virtual float getCellAsFloat(
unsigned int cx,
unsigned int cy)
const {
return m_obj.cell2float(m_obj.m_map[ cx + cy*m_obj.getSizeX() ]); }
290 aux_saver aux(*
this);
291 return aux.saveToTextFile(fileName);
301 if (!cast_from_float) {
305 float xmin,xmax,ymin,ymax,res;
306 in >> xmin >> xmax >> ymin >> ymax >> res;
A 2D grid of dynamic size which stores any kind of data at each cell.
size_t getSizeX() const
Returns the horizontal size of grid map in cells count.
double idx2y(int cy) const
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 NULL if it is out of the ma...
std::vector< T > m_map
The cells.
void idx2cxcy(const int &idx, int &cx, int &cy) const
Transform a global (linear) cell index value into its corresponding (x,y) cell indexes.
void clear()
Erase the contents of all the cells.
virtual ~CDynamicGrid()
Destructor.
double getResolution() const
Returns the resolution of the grid map.
void dyngridcommon_writeToStream(mrpt::utils::CStream &out) const
bool saveToTextFile(const std::string &fileName) const
Saves a float representation of the grid (via "cell2float()") to a text file.
int x2idx(double x) const
Transform a coordinate values into cell indexes.
void dyngridcommon_readFromStream(mrpt::utils::CStream &in, bool cast_from_float=false)
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.
const T * cellByPos(double x, double y) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
std::vector< T > & m_map_castaway_const() const
Used only from logically const method that really need to modify the object.
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=NULL)
Changes the size of the grid, ERASING all previous contents.
int xy2idx(double x, double y) const
double getYMin() const
Returns the "y" coordinate of top side of grid map.
T * cellByIndex(unsigned int cx, unsigned int cy)
Returns a pointer to the contents of a cell given by its cell indexes, or NULL if it is out of the ma...
void fill(const T &value)
Fills all the cells with the same value.
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 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...
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.
void getAsMatrix(MAT &m) const
Get the entire grid as a matrix.
double idx2x(int cx) const
Transform a cell index into a coordinate value of the cell central point.
double getYMax() const
Returns the "y" coordinate of bottom side of grid map.
T * cellByPos(double x, double y)
Returns a pointer to the contents of a cell given by its coordinates, or NULL if it is out of the map...
double getXMax() const
Returns the "x" coordinate of right side of grid map.
int y2idx(double y) const
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
int round(const T value)
Returns the closer integer (int) to x.
#define MRPT_UNUSED_PARAM(a)
Can be used to avoid "not used parameters" warnings from the compiler.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
bool saveToTextFile(const std::string &fileName) const
virtual unsigned int getSizeY() const =0
virtual unsigned int getSizeX() const =0
virtual float getCellAsFloat(unsigned int cx, unsigned int cy) const =0