Core 1.0
Public Member Functions | Static Public Member Functions | Protected Attributes | Static Protected Attributes | List of all members
Voxel Class Reference

A base three-dimensional voxel. More...

#include <array.h>

Inheritance diagram for Voxel:
Array Box

Public Member Functions

 Voxel (const Box &, int)
 Create the voxel structure. More...
 
 Voxel (const Box &, int, int, int)
 Create the voxel structure. More...
 
 Voxel (const Box &, int, int, int, const QVector< int > &)
 Create and initialize the voxel structure. More...
 
int at (int, int, int) const
 Return the data in the cell of the voxel. More...
 
int at (int) const
 Return the data in the cell of the voxel. More...
 
int & operator() (int, int, int)
 Return the data in the cell of the voxel. More...
 
int & operator() (int)
 Return the data in the cell of the voxel. More...
 
int & operator[] (int)
 Return the data in the cell of the voxel. More...
 
bool Inside (const Vector &) const
 Check if a point is inside a non-empty cell. More...
 
bool Inside (int, int, int) const
 Test if a cell is inside or outside of the voxel. More...
 
double Signed (const Vector &) const
 Compute the approximate signed distance to the voxel. More...
 
int OctantCells (const Vector &, int[24], int &, Vector &) const
 Compute the integer coordinates of the (at most) eight octant cells closest to p. More...
 
QVector< VectorGetCubes (Box &, bool=false) const
 Create a set of cubes representing a voxel. More...
 
int Accessibility (int, int, int) const
 Compute the integer accessibility of a voxel. More...
 
unsigned int Memory () const
 Compute the amount of memory used by the voxel structure.
 
- Public Member Functions inherited from Array
 Array ()
 Empty. More...
 
 Array (const Box &, int, int, int)
 Create the array structure. More...
 
 ~Array ()
 Empty.
 
Array Extract (int, int, int, int, int, int) const
 Extract an sub-array. More...
 
int VertexSize () const
 Return the size of the array.
 
int VertexSize (int) const
 Get the size of the array for every axis. More...
 
Box Cell (int) const
 Return the geometry of the cell. More...
 
Box Cell (int, int, int) const
 Return the geometry of the cell. More...
 
Vector CellCenter (int, int, int) const
 Return the center of the cell. More...
 
void Scale (const Vector &)
 Scales the array structure. More...
 
void Scale (const double &)
 Scales the array structure. More...
 
Box GetBox () const
 Get the box of the array.
 
Vector CellDiagonal () const
 Return the cell diagonal.
 
Vector Vertex (int, int, int) const
 Compute the coordinates of a point on the grid. More...
 
int GetSizeX () const
 Get the size of the array for x axis.
 
int GetSizeY () const
 Get the size of the array for y axis.
 
int GetSizeZ () const
 Get the size of the array for z axis.
 
int CellSize () const
 Return the size of the voxel.
 
int CellSizeX () const
 Get the size of the voxel for x axis.
 
int CellSizeY () const
 Get the size of the voxel for y axis.
 
int CellSizeZ () const
 Get the size of the voxel for z axis.
 
bool IsEmpty () const
 Detect if the array is empty.
 
Box UnitCell () const
 Return the geometry of a generic cell. More...
 
void Resize (const Box &, int, int, int)
 Resize the voxel with the given parameters. More...
 
void VertexInteger (const Vector &, int &, int &, int &) const
 Compute the coordinates of a vertex inside a cell. More...
 
void VertexIntegerVolume (const Box &, int &, int &, int &, int &, int &, int &) const
 Compute the integer coordinates of the vertices of a box embedding an input box. More...
 
void CellInteger (const Vector &, int &, int &, int &) const
 Compute the coordinates of a vertex inside a cell. More...
 
void CellInteger (const Vector &, int &, int &, int &, double &, double &, double &) const
 Compute the point on the grid given an input point. More...
 
void CellIntegerVolume (const Box &, int &, int &, int &, int &, int &, int &) const
 Compute the integer coordinates of the cells of the array embedding an input box. More...
 
int Memory () const
 Compute the size of the array.
 
constexpr int VertexIndex (int, int, int) const
 Compute the index of a given vertex. More...
 
constexpr bool InsideVertexIndex (int, int, int) const
 Check if the indexes are within range. More...
 
constexpr bool InsideCellIndex (int, int, int) const
 Check if the indexes are within range. More...
 
void InverseVertexIndex (int, int &, int &, int &) const
 Compute the coordinates of a given vertex. More...
 
constexpr int CellIndex (int, int, int) const
 Compute the index of a given cell. More...
 
void InverseCellIndex (int, int &, int &, int &) const
 Compute the coordinates of a given cell. More...
 

Static Public Member Functions

static double OctantSigned (const Vector &, const Vector &, int)
 Computes the distance between a point a eight octant volumes. More...
 
- Static Public Member Functions inherited from Array
static Array CubicCells (Box, int)
 Create an array with enforced cubic cells. More...
 

Protected Attributes

QVector< int > voxel
 Array of integer storing the data.
 
- Protected Attributes inherited from Array
int nz
 Sizes.
 
Vector celldiagonal
 Cell diagonal.
 
Vector inversecelldiagonal
 Inverse cell diagonal.
 
- Protected Attributes inherited from Box
Vector a
 Lower vertex.
 
Vector b
 Upper vertex.
 

Static Protected Attributes

static const int octantcellindex [8][24]
 
- Static Protected Attributes inherited from Box
static constexpr const double epsilon = 1.0e-5
 Epsilon value used to check intersections and some round off errors and for ray intersection tests.
 
static const Box Infinity
 Largest box. More...
 
static const Box Null
 Null box, equivalent to: More...
 
static const Box Unit
 Unit box.
 
static const int edge [24]
 Edge vertex indexes.
 
static const Vector normal [6]
 Face normals.
 

Additional Inherited Members

- Protected Member Functions inherited from Box
 Box ()
 Empty.
 
 Box (const double &)
 Create a cube centered at the origin and of given half side length. More...
 
 Box (const Vector &)
 Create an empty box given one vertex. More...
 
 Box (const Vector &, const Vector &)
 Create a box given two opposite corners. More...
 
 Box (const Vector &, const double &)
 Create a box given a center point and the half side length. More...
 
 Box (const Vector &, const double &, const double &, const double &)
 Create a box given a center point and its width, length, and height. More...
 
 Box (const double &, const double &, const double &)
 Create a box given its sizes. More...
 
 Box (const Vector *, int)
 Creates the bounding box of a set of points. More...
 
 Box (const QVector< Vector > &)
 Creates the bounding box of a set of points. More...
 
 Box (const Box &, const Box &)
 Create a box embedding two boxes. More...
 
 Box (const Box &, const Frame &)
 Creates an axis aligned bounding box from a box and a frame. More...
 
 Box (const Box &, const FrameScaled &)
 Creates an axis aligned bounding box from a box and a frame. More...
 
 Box (const Box &, const Matrix &)
 Creates an axis aligned bounding box from a box and a transformation matrix. More...
 
 ~Box ()
 Empty.
 
Vectoroperator[] (int)
 Returns either end vertex of the box.
 
Vector operator[] (int) const
 Overloaded.
 
Vector Center () const
 Returns the center of the box.
 
Vector Vertex (int) const
 Returns the k-th vertex of the box. More...
 
Vector Vertex (int, int, int, int, int, int) const
 Compute the coordinates of a grid aligned point. More...
 
Segment Edge (int) const
 Compute the k-th edge segment of the box. More...
 
Plane Face (int) const
 Compute the k-th plane of the box. More...
 
Vector Size () const
 Compute the size (width, length and height) of a box. More...
 
Vector Diagonal () const
 Returns the diagonal of the box.
 
double Radius () const
 Returns the radius of the box, i.e. the length of the half diagonal of the box.
 
double R (const Vector &) const
 Computes the squared Euclidean distance between the box and a point. More...
 
double Signed (const Vector &) const
 Computes the signed distance between the box and a point. More...
 
Vector Normal (const Vector &) const
 Computes the normal vector between a point and a box. More...
 
double R (const Box &) const
 Compute the squared Euclidean distance between two boxes. More...
 
double RInfinity (const Box &) const
 Compute the maximum distance between two boxes. More...
 
int Intersect (const Ray &) const
 Check the intersection between a box and a ray. More...
 
int Intersect (const Ray &, double &, double &) const
 Computes the intersection between a box and a ray. More...
 
int Intersect (const Ray &, double &) const
 Compute the first positive intersection between the box and a ray. More...
 
int Intersect (const Ray &, double &, double &, Vector &, Vector &) const
 Compute the intersection between an axis aligned box and a ray. More...
 
int Intersect (const Ray &, double &, Vector &) const
 Compute the first positive intersection between the box and a ray. More...
 
int Intersect (const Vector &, const Vector &) const
 Check if a segment intersects an axis aligned box. More...
 
bool Intersect (const Box &) const
 Check if the box intersects another box. More...
 
bool Inside (const Box &) const
 Check if an argument box is inside the box. More...
 
bool Inside (const Vector &) const
 Check if a point is inside the box. More...
 
Box Intersection (const Box &) const
 Computes the intersection between two boxes. More...
 
int Difference (const Box &, Box *) const
 Computes the difference between two boxes. More...
 
bool Empty () const
 Check if a box is empty. More...
 
double Volume () const
 Compute the volume of a box.
 
double Area () const
 Compute the surface area of a box.
 
void SetCubic ()
 Creates the tightest embedding cube from an arbitrarilly shaped box. More...
 
void SetInscribedCubic ()
 Creates the biggest cube iscribed in the box. More...
 
Box Cube () const
 Return the tightest embedding cube from an arbitrarilly shaped box. More...
 
void Extend (const double &)
 Extend the limits of the box by a given distance. More...
 
Box Extended (const double &) const
 Extend the limits of the box by a given distance. More...
 
void Extend (const Vector &)
 Extend the limits of the box given a point. More...
 
void SetParallelepipedic (const double &, int &, int &, int &)
 Creates a parallelepipedic box whose dimensions are integer multiples of a given input reference size. More...
 
void SetParallelepipedic (int, int &, int &, int &)
 Inflates a box so that its dimensions should be a fraction of its maximum side length. More...
 
Box Sub (int) const
 Computes the sub-box in the n-th octant. More...
 
int Octant (const Vector &) const
 Compute the octant index of a vertex with respect to the box center. More...
 
void Translate (const Vector &)
 Translates a box. More...
 
Box Translated (const Vector &) const
 Translated box. More...
 
void Scale (const double &)
 Scales a box. More...
 
void Scale (const Vector &)
 Scales a box. More...
 
Box Scaled (const Vector &) const
 Scales a box and return the scaled box. More...
 
Box Offsetted (const Vector &) const
 Offets a box. More...
 
Box Centered () const
 Compute the box translated to origin. More...
 
Box Cut (const Vector &, const Vector &) const
 Compute the minimal box embedding the box cut by half space. More...
 
int IntegerAxis () const
 Compute the axis which has the greater length.
 
Vector RandomInside (Random &=Random::R239) const
 Generate a random vector inside the box. More...
 
Vector RandomSurface (Random &=Random::R239) const
 Generate a random vector on the surface of the box. More...
 
QVector< VectorPoisson (const double &, int, Random &=Random::R239) const
 Compute a Poisson sphere distribution inside a box. More...
 

Detailed Description

A base three-dimensional voxel.

Constructor & Destructor Documentation

◆ Voxel() [1/3]

Voxel::Voxel ( const Box box,
int  n 
)
explicit

Create the voxel structure.

Parameters
boxThe cubic box.
nDiscretization.

◆ Voxel() [2/3]

Voxel::Voxel ( const Box box,
int  x,
int  y,
int  z 
)
explicit

Create the voxel structure.

Parameters
boxThe box.
x,y,zDiscretization, i.e. number of cells.

◆ Voxel() [3/3]

Voxel::Voxel ( const Box box,
int  x,
int  y,
int  z,
const QVector< int > &  v 
)
explicit

Create and initialize the voxel structure.

Parameters
boxThe box.
x,y,zSize of the array, i.e. number of cells.
vVoxel data.

Member Function Documentation

◆ Accessibility()

int Voxel::Accessibility ( int  x,
int  y,
int  z 
) const

Compute the integer accessibility of a voxel.

Uses a 1-neighborhood, thus checking 333-1=26 cells.

Parameters
x,y,zInteger coordinates of the cell.

◆ at() [1/2]

int Voxel::at ( int  c) const
inline

Return the data in the cell of the voxel.

Parameters
cCell index.

◆ at() [2/2]

int Voxel::at ( int  i,
int  j,
int  k 
) const
inline

Return the data in the cell of the voxel.

Parameters
i,j,kInteger coordinates of the cell.

◆ GetCubes()

QVector< Vector > Voxel::GetCubes ( Box u,
bool  surface = false 
) const

Create a set of cubes representing a voxel.

Parameters
uUnit reference box of the voxel.
boolsurface Only produce cubes that participate to the visible surface.

◆ Inside() [1/2]

bool Voxel::Inside ( const Vector p) const

Check if a point is inside a non-empty cell.

Note that if the point is not inside the box, then it is defined as outside.

Parameters
pPoint.

◆ Inside() [2/2]

bool Voxel::Inside ( int  x,
int  y,
int  z 
) const

Test if a cell is inside or outside of the voxel.

Parameters
x,y,zInteger coordinates of the cell.

◆ OctantCells()

int Voxel::OctantCells ( const Vector p,
int  cells[24],
int &  configuration,
Vector q 
) const

Compute the integer coordinates of the (at most) eight octant cells closest to p.

Parameters
pPoint.
cellsReturned array of integer coordinates.
configurationReturned configuration.
qReturned center of the octant that can be used for computing the distance.
Returns
The number of cells in the voxel structure.

◆ OctantSigned()

double Voxel::OctantSigned ( const Vector p,
const Vector q,
int  c 
)
static

Computes the distance between a point a eight octant volumes.

The octant configuration is provided as an integer whose bits are set to 0 if octants are empty, 1 otherwise.

See also
Box::Octant(const Vector&)
Parameters
pPoint.
qOrigin of the eight octant volumes.
cOctant configuration.

◆ operator()() [1/2]

int & Voxel::operator() ( int  c)
inline

Return the data in the cell of the voxel.

Parameters
cCell index.

◆ operator()() [2/2]

int & Voxel::operator() ( int  i,
int  j,
int  k 
)
inline

Return the data in the cell of the voxel.

Parameters
i,j,kInteger coordinates of the cell.

◆ operator[]()

int & Voxel::operator[] ( int  c)
inline

Return the data in the cell of the voxel.

Parameters
cInteger cell index.

◆ Signed()

double Voxel::Signed ( const Vector p) const

Compute the approximate signed distance to the voxel.

Parameters
pPoint.

Member Data Documentation

◆ octantcellindex

const int Voxel::octantcellindex
staticprotected
Initial value:
=
{
{0, 0, 0,-1, 0, 0, 0,-1, 0,-1,-1, 0,
0, 0,-1,-1, 0,-1, 0,-1,-1,-1,-1,-1},
{0, 0, 0, 1, 0, 0, 0,-1, 0, 1,-1, 0,
0, 0,-1, 1, 0,-1, 0,-1,-1, 1,-1,-1},
{0, 0, 0,-1, 0, 0, 0, 1, 0,-1, 1, 0,
0, 0,-1,-1, 0,-1, 0, 1,-1,-1, 1,-1},
{0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0,
0, 0,-1, 1, 0,-1, 0, 1,-1, 1, 1,-1},
{0, 0, 0,-1, 0, 0, 0,-1, 0,-1,-1, 0,
0, 0, 1,-1, 0, 1, 0,-1, 1,-1,-1, 1},
{0, 0, 0, 1, 0, 0, 0,-1, 0, 1,-1, 0,
0, 0, 1, 1, 0, 1, 0,-1, 1, 1,-1, 1},
{0, 0, 0,-1, 0, 0, 0, 1, 0,-1, 1, 0,
0, 0, 1,-1, 0, 1, 0, 1, 1,-1, 1, 1},
{0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0,
0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1}
}

< Set of eight cells, sorted.