CCCoreLib 31 May 2022
CloudCompare Core algorithms
Public Member Functions | Static Public Attributes | List of all members
CCCoreLib::ChamferDistanceTransform Class Reference

Class to compute a Chamfer distance field on a 3D grid. More...

#include <ChamferDistanceTransform.h>

Inheritance diagram for CCCoreLib::ChamferDistanceTransform:
Inheritance graph
[legend]
Collaboration diagram for CCCoreLib::ChamferDistanceTransform:
Collaboration graph
[legend]

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 Tuple3uisize () 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 GridElementgetValue (int i, int j, int k) const
 Returns the value of a given cell (const version) More...
 
GridElementgetValue (int i, int j, int k)
 Returns the value of a given cell. More...
 
const GridElementgetValue (const Tuple3i &cellPos) const
 Returns the value of a given cell const version) More...
 
GridElementgetValue (const Tuple3i &cellPos)
 Returns the value of a given cell. More...
 
GridElementdata ()
 Gives access to the internal grid data (with margin)
 
const GridElementdata () 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< GridElementm_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)
 

Detailed Description

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.

Member Function Documentation

◆ init()

bool CCCoreLib::ChamferDistanceTransform::init ( const Tuple3ui gridSize)
inline

Initializes the grid.

'Zero' cells must be initialized with setValue(0). The grid must be explicitelty initialized prior to any action.

Returns
true if the initialization succeeded

◆ propagateDistance()

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).

Parameters
typethe Chamfer distance type
progressCbthe client application can get some notification of the process progress through this callback mechanism (see GenericProgressCallback)
Returns
max distance (or -1 if an error occurred)

Member Data Documentation

◆ MAX_DIST

const unsigned short CCCoreLib::ChamferDistanceTransform::MAX_DIST = 0xFAFA
static

Max possible 'distance'.

Warning
Never pass a 'constant initializer' by reference

The documentation for this class was generated from the following files: