CCCoreLib 31 May 2022
CloudCompare Core algorithms
|
Class to compute a Chamfer distance field on a 3D grid. More...
#include <ChamferDistanceTransform.h>
Public Member Functions | |
bool | init (const Tuple3ui &gridSize) |
Initializes the grid. More... | |
int | propagateDistance (CHAMFER_DISTANCE_TYPE type, GenericProgressCallback *progressCb=nullptr) |
Computes the Chamfer distance on the whole grid. More... | |
Public Member Functions inherited from CCCoreLib::Grid3D< unsigned short > | |
Grid3D () | |
Default constructor. | |
const Tuple3ui & | size () const |
Returns the grid dimensions. | |
bool | isInitialized () const |
Returns whether the grid has been initialized or not. | |
void | clear () |
Clears the grid. More... | |
bool | init (unsigned di, unsigned dj, unsigned dk, unsigned margin, GridElement defaultCellValue=0) |
Initializes the grid. More... | |
Tuple3i | computeCellPos (const CCVector3 &P, const CCVector3 &gridMinCorner, PointCoordinateType cellSize) const |
Computes the (grid) cell position that contains a given point. | |
bool | intersectWith (GenericIndexedMesh *mesh, PointCoordinateType cellLength, const CCVector3 &gridMinCorner, GridElement intersectValue=0, GenericProgressCallback *progressCb=nullptr) |
Intersects this grid with a mesh. | |
bool | intersectWith (GenericIndexedMesh *mesh, PointCoordinateType cellLength, const CCVector3 &gridMinCorner, genericCellTriIntersectionAction action, GenericProgressCallback *progressCb=nullptr) |
Intersects this grid with a mesh (generic form) | |
bool | intersectWith (GenericCloud *cloud, PointCoordinateType cellLength, const CCVector3 &gridMinCorner, GridElement intersectValue=0, GenericProgressCallback *progressCb=nullptr) |
Intersects this grid with a cloud. | |
void | setValue (int i, int j, int k, GridElement value) |
Sets the value of a given cell. More... | |
void | setValue (const Tuple3i &cellPos, GridElement value) |
Sets the value of a given cell. More... | |
const GridElement & | getValue (int i, int j, int k) const |
Returns the value of a given cell (const version) More... | |
GridElement & | getValue (int i, int j, int k) |
Returns the value of a given cell. More... | |
const GridElement & | getValue (const Tuple3i &cellPos) const |
Returns the value of a given cell const version) More... | |
GridElement & | getValue (const Tuple3i &cellPos) |
Returns the value of a given cell. More... | |
GridElement * | data () |
Gives access to the internal grid data (with margin) | |
const GridElement * | data () const |
Gives access to the internal grid data (with margin) (const version) | |
unsigned | innerCellCount () const |
Returns the number of cell count (whithout margin) | |
unsigned | totalCellCount () const |
Returns the total number of cell count (with margin) | |
Static Public Attributes | |
static const unsigned short | MAX_DIST = 0xFAFA |
Max possible 'distance'. More... | |
Additional Inherited Members | |
Public Types inherited from CCCoreLib::Grid3D< unsigned short > | |
using | GridElement = unsigned short |
Cell type. | |
using | genericCellTriIntersectionAction = std::function< void(const Tuple3i &, unsigned)> |
Generic function applied to a cell intersected by a triangle (used by the generic form of intersectWith) | |
Protected Member Functions inherited from CCCoreLib::Grid3D< unsigned short > | |
int | pos2index (int i, int j, int k) const |
Converts a 3D position to an absolute index. | |
Protected Attributes inherited from CCCoreLib::Grid3D< unsigned short > | |
std::vector< GridElement > | m_grid |
Grid data. | |
Tuple3ui | m_innerSize |
Dimensions of the grid (without margin) | |
unsigned | m_margin |
Margin. | |
unsigned | m_rowSize |
1D row size (with margin) | |
unsigned | m_sliceSize |
2D slice size (with margin) | |
unsigned | m_innerCellCount |
3D grid size without margin | |
unsigned | m_totalCellCount |
3D grid size with margin | |
unsigned | m_marginShift |
First index of real data (i.e. after marin) | |
Class to compute a Chamfer distance field on a 3D grid.
Internally we use 'unsigned short' value to limit memory consumption. For computational reasons, the max computable 'distance' is 0xFAFA = 64250.
|
inline |
Initializes the grid.
'Zero' cells must be initialized with setValue(0). The grid must be explicitelty initialized prior to any action.
int ChamferDistanceTransform::propagateDistance | ( | CHAMFER_DISTANCE_TYPE | type, |
GenericProgressCallback * | progressCb = nullptr |
||
) |
Computes the Chamfer distance on the whole grid.
Propagates the distances on the whole grid. The 'zeros' should have already been initialized before calling this method (see ChamferDistanceTransform::setZero).
type | the Chamfer distance type |
progressCb | the client application can get some notification of the process progress through this callback mechanism (see GenericProgressCallback) |
|
static |
Max possible 'distance'.