33 double x_min = -1.0,
double x_max = 1.0,
double y_min = -1.0,
34 double y_max = +1.0,
double z_min = -1.0,
double z_max = 1.0,
35 double resolution_xy = 0.5,
double resolution_z = 0.5)
39 x_min, x_max, y_min, y_max, z_min, z_max, resolution_xy,
47 double new_x_min,
double new_x_max,
double new_y_min,
double new_y_max,
48 double new_z_min,
double new_z_max,
const T& defaultValueNewCells,
49 double additionalMarginMeters = 2.0)
65 if (additionalMarginMeters > 0)
68 new_x_min = floor(new_x_min - additionalMarginMeters);
70 new_x_max = ceil(new_x_max + additionalMarginMeters);
72 new_y_min = floor(new_y_min - additionalMarginMeters);
74 new_y_max = ceil(new_y_max + additionalMarginMeters);
76 new_z_min = floor(new_z_min - additionalMarginMeters);
78 new_z_max = ceil(new_z_max + additionalMarginMeters);
116 size_t new_size_x_times_y = new_size_x * new_size_y;
119 typename std::vector<T> new_map;
121 new_size_x * new_size_y * new_size_z, defaultValueNewCells);
134 (new_map.begin() + extra_x_izq +
135 (
y + extra_y_arr) * new_size_x +
136 (
z + extra_z_top) * new_size_x_times_y);
174 const double x_min,
const double x_max,
const double y_min,
175 const double y_max,
const double z_min,
const double z_max,
176 const double resolution_xy,
const double resolution_z_ = -1.0,
177 const T* fill_value =
nullptr)
179 const double resolution_z =
180 resolution_z_ > 0.0 ? resolution_z_ : resolution_xy;
189 x_min + resolution_xy *
round((x_max - x_min) / resolution_xy);
191 y_min + resolution_xy *
round((y_max - y_min) / resolution_xy);
192 m_z_max = z_min + resolution_z *
round((z_max - z_min) / resolution_z);
224 it !=
m_map.end(); ++it)
234 const int cx,
const int cy,
const int cz)
const 236 if (cx < 0 || cx >= static_cast<int>(
m_size_x))
238 if (cy < 0 || cy >= static_cast<int>(
m_size_y))
240 if (cz < 0 || cz >= static_cast<int>(
m_size_z))
267 inline T*
cellByIndex(
unsigned int cx,
unsigned int cy,
unsigned int cz)
278 unsigned int cx,
unsigned int cy,
unsigned int cz)
const 331 out << static_cast<uint32_t>(
m_size_x)
343 in >> nX >> nY >> nZ;
347 m_map.resize(nX * nY * nZ);
int z2idx(double z) const
T * cellByPos(double x, double y, double z)
Returns a pointer to the contents of a voxel given by its coordinates, or nullptr if it is out of the...
std::vector< T > m_map
The cells.
size_t cellAbsIndexFromCXCYCZ(const int cx, const int cy, const int cz) const
Gets the absolute index of a voxel in the linear container m_map[] from its cx,cy,cz indices, or -1 if out of map bounds (in any dimension).
const T * cellByPos(double x, double y, double z) const
CDynamicGrid3D(double x_min=-1.0, double x_max=1.0, double y_min=-1.0, double y_max=+1.0, double z_min=-1.0, double z_max=1.0, double resolution_xy=0.5, double resolution_z=0.5)
Constructor.
double idx2z(int cz) const
static const size_t INVALID_VOXEL_IDX
void dyngridcommon_writeToStream(mrpt::utils::CStream &out) const
Serialization of all parameters, except the contents of each voxel (responsability of the derived cla...
virtual void clear()
Erase the contents of all the cells, setting them to their default values (default ctor)...
A 3D rectangular grid of dynamic size which stores any kind of data at each voxel.
const T * cellByIndex(unsigned int cx, unsigned int cy, unsigned int cz) const
Returns a pointer to the contents of a voxel given by its voxel indexes, or nullptr if it is out of t...
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
T * cellByIndex(unsigned int cx, unsigned int cy, unsigned int cz)
Returns a pointer to the contents of a voxel given by its voxel indexes, or nullptr if it is out of t...
virtual void resize(double new_x_min, double new_x_max, double new_y_min, double new_y_max, double new_z_min, double new_z_max, const T &defaultValueNewCells, double additionalMarginMeters=2.0)
Changes the size of the grid, maintaining previous contents.
virtual void setSize(const double x_min, const double x_max, const double y_min, const double y_max, const double z_min, const double z_max, const double resolution_xy, const double resolution_z_=-1.0, const T *fill_value=nullptr)
Changes the size of the grid, ERASING all previous contents.
double getResolutionXY() const
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
int x2idx(double x) const
Transform a coordinate values into voxel indexes.
void fill(const T &value)
Fills all the cells with the same value.
double idx2x(int cx) const
Transform a voxel index into a coordinate value of the voxel central point.
double getResolutionZ() const
size_t getVoxelCount() const
double idx2y(int cy) const
void dyngridcommon_readFromStream(mrpt::utils::CStream &in)
Serialization of all parameters, except the contents of each voxel (responsability of the derived cla...
int round(const T value)
Returns the closer integer (int) to x.
GLsizei const GLfloat * value
std::vector< T > & m_map_castaway_const() const
Used only from logically const method that really need to modify the object.
unsigned __int32 uint32_t
int y2idx(double y) const