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);
A 3D rectangular grid of dynamic size which stores any kind of data at each voxel.
double getResolutionXY() const
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...
double idx2z(int cz) const
std::vector< T > & m_map_castaway_const() const
Used only from logically const method that really need to modify the object.
double idx2x(int cx) const
Transform a voxel index into a coordinate value of the voxel central point.
std::vector< T > m_map
The cells.
void fill(const T &value)
Fills all the cells with the same value.
static const size_t INVALID_VOXEL_IDX
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.
int z2idx(double z) const
int x2idx(double x) const
Transform a coordinate values into voxel indexes.
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...
int y2idx(double y) const
void dyngridcommon_writeToStream(mrpt::utils::CStream &out) const
Serialization of all parameters, except the contents of each voxel (responsability of the derived cla...
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,...
size_t getVoxelCount() const
double getResolutionZ() const
virtual void clear()
Erase the contents of all the cells, setting them to their default values (default ctor).
double idx2y(int cy) 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.
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...
const T * cellByPos(double x, double y, double z) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
void dyngridcommon_readFromStream(mrpt::utils::CStream &in)
Serialization of all parameters, except the contents of each voxel (responsability of the derived cla...
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.
This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...
GLsizei const GLfloat * value
int round(const T value)
Returns the closer integer (int) to x.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
unsigned __int32 uint32_t