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);
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.
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.
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).
double idx2z(int cz) const
double idx2y(int cy) 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...
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...
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...
A 3D rectangular grid of dynamic size which stores any kind of data at each voxel.
double getResolutionXY() const
int x2idx(double x) const
Transform a coordinate values into voxel indexes.
int z2idx(double z) const
void dyngridcommon_readFromStream(ARCHIVE &in)
Serialization of all parameters, except the contents of each voxel (responsability of the derived cla...
int y2idx(double y) const
std::vector< T > m_map
The cells.
const T * cellByPos(double x, double y, double z) const
void fill(const T &value)
Fills all the cells with the same value.
void dyngridcommon_writeToStream(ARCHIVE &out) const
Serialization of all parameters, except the contents of each voxel (responsability of the derived cla...
double getResolutionZ() const
virtual void clear()
Erase the contents of all the cells, setting them to their default values (default ctor)...
double idx2x(int cx) const
Transform a voxel index into a coordinate value of the voxel central point.
std::vector< T > & m_map_castaway_const() const
Used only from logically const method that really need to modify the object.
GLsizei const GLfloat * value
size_t getVoxelCount() const
static const size_t INVALID_VOXEL_IDX
unsigned __int32 uint32_t
int round(const T value)
Returns the closer integer (int) to x.