30 double x_min = -1.0,
double x_max = 1.0,
double y_min = -1.0,
31 double y_max = +1.0,
double z_min = -1.0,
double z_max = 1.0,
32 double resolution_xy = 0.5,
double resolution_z = 0.5)
36 x_min, x_max, y_min, y_max, z_min, z_max, resolution_xy,
44 double new_x_min,
double new_x_max,
double new_y_min,
double new_y_max,
45 double new_z_min,
double new_z_max,
const T& defaultValueNewCells,
46 double additionalMarginMeters = 2.0)
62 if (additionalMarginMeters > 0)
65 new_x_min = floor(new_x_min - additionalMarginMeters);
67 new_x_max = ceil(new_x_max + additionalMarginMeters);
69 new_y_min = floor(new_y_min - additionalMarginMeters);
71 new_y_max = ceil(new_y_max + additionalMarginMeters);
73 new_z_min = floor(new_z_min - additionalMarginMeters);
75 new_z_max = ceil(new_z_max + additionalMarginMeters);
113 size_t new_size_x_times_y = new_size_x * new_size_y;
116 typename std::vector<T> new_map;
118 new_size_x * new_size_y * new_size_z, defaultValueNewCells);
131 (new_map.begin() + extra_x_izq +
132 (
y + extra_y_arr) * new_size_x +
133 (
z + extra_z_top) * new_size_x_times_y);
171 const double x_min,
const double x_max,
const double y_min,
172 const double y_max,
const double z_min,
const double z_max,
173 const double resolution_xy,
const double resolution_z_ = -1.0,
174 const T* fill_value =
nullptr)
176 const double resolution_z =
177 resolution_z_ > 0.0 ? resolution_z_ : resolution_xy;
186 x_min + resolution_xy *
round((x_max - x_min) / resolution_xy);
188 y_min + resolution_xy *
round((y_max - y_min) / resolution_xy);
189 m_z_max = z_min + resolution_z *
round((z_max - z_min) / resolution_z);
221 it !=
m_map.end(); ++it)
231 const int cx,
const int cy,
const int cz)
const
233 if (cx < 0 || cx >=
static_cast<int>(
m_size_x))
235 if (cy < 0 || cy >=
static_cast<int>(
m_size_y))
237 if (cz < 0 || cz >=
static_cast<int>(
m_size_z))
264 inline T*
cellByIndex(
unsigned int cx,
unsigned int cy,
unsigned int cz)
275 unsigned int cx,
unsigned int cy,
unsigned int cz)
const
324 template <
class ARCHIVE>
329 out << static_cast<uint32_t>(
m_size_x)
335 template <
class ARCHIVE>
342 in >> nX >> nY >> nZ;
346 m_map.resize(nX * nY * nZ);
A 3D rectangular grid of dynamic size which stores any kind of data at each voxel.
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.
std::vector< T > m_map
The cells.
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 getResolutionXY() const
double idx2y(int cy) const
void dyngridcommon_writeToStream(ARCHIVE &out) const
Serialization of all parameters, except the contents of each voxel (responsability of the derived cla...
double idx2x(int cx) const
Transform a voxel index into a coordinate value of the voxel central point.
size_t getVoxelCount() const
std::vector< T > & m_map_castaway_const() const
Used only from logically const method that really need to modify the object.
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...
static const size_t INVALID_VOXEL_IDX
int x2idx(double x) const
Transform a coordinate values into voxel indexes.
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,...
virtual void clear()
Erase the contents of all the cells, setting them to their default values (default ctor).
int z2idx(double z) const
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 y2idx(double y) const
double getResolutionZ() const
void dyngridcommon_readFromStream(ARCHIVE &in)
Serialization of all parameters, except the contents of each voxel (responsability of the derived cla...
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.
void fill(const T &value)
Fills all the cells with the same value.
double idx2z(int cz) const
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...
GLsizei const GLfloat * value
int round(const T value)
Returns the closer integer (int) to x.
unsigned __int32 uint32_t