HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT > Class Template Reference

Computes signed distance values from an initial iso-surface and optionally performs velocity extension at the same time. This is done by means of a novel sparse and parallel fast sweeping algorithm based on a first order Godunov's scheme. More...

#include <FastSweeping.h>

Classes

struct  DilateKernel
 Private class of FastSweeping to perform multi-threaded initialization. More...
 
struct  InitSdf
 
struct  MinMaxKernel
 
struct  PruneMinMaxFltKernel
 
struct  SweepingKernel
 Private class of FastSweeping to perform concurrent fast sweeping in two directions. More...
 

Public Member Functions

 FastSweeping ()
 Constructor. More...
 
 ~FastSweeping ()
 Destructor. More...
 
 FastSweeping (const FastSweeping &)=delete
 Disallow copy construction. More...
 
FastSweepingoperator= (const FastSweeping &)=delete
 Disallow copy assignment. More...
 
SdfGridT::Ptr sdfGrid ()
 Returns a shared pointer to the signed distance field computed by this class. More...
 
ExtGridT::Ptr extGrid ()
 Returns a shared pointer to the extension field computed by this class. More...
 
ExtGridT::Ptr extGridInput ()
 Returns a shared pointer to the extension grid input. This is non-NULL if this class is used to extend a field with a non-default sweep direction. More...
 
bool initSdf (const SdfGridT &sdfGrid, SdfValueT isoValue, bool isInputSdf)
 Initializer for input grids that are either a signed distance field or a scalar fog volume. More...
 
template<typename ExtOpT >
bool initExt (const SdfGridT &sdfGrid, const ExtOpT &op, const ExtValueT &background, SdfValueT isoValue, bool isInputSdf, FastSweepingDomain mode=FastSweepingDomain::SWEEP_ALL, const typename ExtGridT::ConstPtr extGrid=nullptr)
 Initializer used whenever velocity extension is performed in addition to the computation of signed distance fields. More...
 
bool initDilate (const SdfGridT &sdfGrid, int dilation, NearestNeighbors nn=NN_FACE, FastSweepingDomain mode=FastSweepingDomain::SWEEP_ALL)
 Initializer used when dilating an existing signed distance field. More...
 
template<typename MaskTreeT >
bool initMask (const SdfGridT &sdfGrid, const Grid< MaskTreeT > &mask, bool ignoreActiveTiles=false)
 Initializer used for the extension of an existing signed distance field into the active values of an input mask of arbitrary value type. More...
 
void sweep (int nIter=1, bool finalize=true)
 Perform nIter iterations of the fast sweeping algorithm. More...
 
void clear ()
 Clears all the grids and counters so initialization can be called again. More...
 
size_t sweepingVoxelCount () const
 Return the number of voxels that will be solved for. More...
 
size_t boundaryVoxelCount () const
 Return the number of voxels that defined the boundary condition. More...
 
bool isValid () const
 Return true if there are voxels and boundaries to solve for. More...
 
FastSweepingDomain sweepDirection () const
 Return whether the sweep update is in all direction (SWEEP_ALL), greater than isovalue (SWEEP_GREATER_THAN_ISOVALUE), or less than isovalue (SWEEP_LESS_THAN_ISOVALUE). More...
 
bool isInputSdf ()
 Return whether the fast-sweeping input grid a signed distance function or not (fog). More...
 
template<typename OpT >
bool initExt (const SdfGridT &fogGrid, const OpT &op, const ExtValueT &background, SdfValueT isoValue, bool isInputSdf, FastSweepingDomain mode, const typename ExtGridT::ConstPtr extGrid)
 

Detailed Description

template<typename SdfGridT, typename ExtValueT = typename SdfGridT::ValueType>
class openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >

Computes signed distance values from an initial iso-surface and optionally performs velocity extension at the same time. This is done by means of a novel sparse and parallel fast sweeping algorithm based on a first order Godunov's scheme.

Solves: $|\nabla \phi|^2 = 1 $

Warning
Note, it is important to call one of the initialization methods before called the sweep function. Failure to do so will throw a RuntimeError. Consider instead call one of the many higher-level free-standing functions defined above!

Definition at line 460 of file FastSweeping.h.

Constructor & Destructor Documentation

template<typename SdfGridT , typename ExtValueT >
openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::FastSweeping ( )

Constructor.

Definition at line 718 of file FastSweeping.h.

template<typename SdfGridT , typename ExtValueT = typename SdfGridT::ValueType>
openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::~FastSweeping ( )
inline

Destructor.

Definition at line 485 of file FastSweeping.h.

template<typename SdfGridT , typename ExtValueT = typename SdfGridT::ValueType>
openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::FastSweeping ( const FastSweeping< SdfGridT, ExtValueT > &  )
delete

Disallow copy construction.

Member Function Documentation

template<typename SdfGridT , typename ExtValueT = typename SdfGridT::ValueType>
size_t openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::boundaryVoxelCount ( ) const
inline

Return the number of voxels that defined the boundary condition.

Definition at line 663 of file FastSweeping.h.

template<typename SdfGridT , typename ExtValueT >
void openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::clear ( void  )

Clears all the grids and counters so initialization can be called again.

Definition at line 724 of file FastSweeping.h.

template<typename SdfGridT , typename ExtValueT = typename SdfGridT::ValueType>
ExtGridT::Ptr openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::extGrid ( )
inline

Returns a shared pointer to the extension field computed by this class.

Warning
This shared pointer might point to NULL if the grid has not been initialize (by one of the init methods) or computed (by the sweep method).

Definition at line 507 of file FastSweeping.h.

template<typename SdfGridT , typename ExtValueT = typename SdfGridT::ValueType>
ExtGridT::Ptr openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::extGridInput ( )
inline

Returns a shared pointer to the extension grid input. This is non-NULL if this class is used to extend a field with a non-default sweep direction.

Warning
This shared pointer might point to NULL. This is non-NULL if this class is used to extend a field with a non-default sweep direction, i.e. SWEEP_LESS_THAN_ISOVALUE or SWEEP_GREATER_THAN_ISOVALUE.

Definition at line 515 of file FastSweeping.h.

template<typename SdfGridT , typename ExtValueT >
bool openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::initDilate ( const SdfGridT &  sdfGrid,
int  dilation,
NearestNeighbors  nn = NN_FACE,
FastSweepingDomain  mode = FastSweepingDomain::SWEEP_ALL 
)

Initializer used when dilating an existing signed distance field.

Returns
True if the initialization succeeded.
Parameters
sdfGridInput signed distance field to to be dilated.
dilationNumer of voxels that the input SDF will be dilated.
nnStencil-pattern used for dilation
modeDetermines the direction of the dilation. SWEEP_ALL will dilate in both sides of the signed distance function, SWEEP_GREATER_THAN_ISOVALUE will dilate in the positive side of the iso-surface, SWEEP_LESS_THAN_ISOVALUE will dilate in the negative side of the iso-surface.

This, or any of ther other initialization methods, should be called before any call to sweep(). Failure to do so will throw a RuntimeError.

Warning
Note, if this method fails, i.e. returns false, a subsequent call to sweep will trow a RuntimeError. Instead call clear and try again.

Definition at line 802 of file FastSweeping.h.

template<typename SdfGridT , typename ExtValueT = typename SdfGridT::ValueType>
template<typename ExtOpT >
bool openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::initExt ( const SdfGridT &  sdfGrid,
const ExtOpT &  op,
const ExtValueT &  background,
SdfValueT  isoValue,
bool  isInputSdf,
FastSweepingDomain  mode = FastSweepingDomain::SWEEP_ALL,
const typename ExtGridT::ConstPtr  extGrid = nullptr 
)

Initializer used whenever velocity extension is performed in addition to the computation of signed distance fields.

Returns
True if the initialization succeeded.
Parameters
sdfGridInput scalar grid that represents an existing signed distance field or a fog volume (signified by isInputSdf).
opFunctor with signature [](const Vec3R &xyz)->ExtValueT that defines the Dirichlet boundary condition, on the iso-surface, of the field to be extended. Strictly the return type of this functor is only required to be convertible to ExtValueT!
backgroundBackground value of return grid with the extension field.
isoValueIso-value to be used for the boundary condition of the fast sweeping algorithm (typically 0 for sdfs and a positive value for fog volumes).
isInputSdfUsed to determine if sdfGrid is a sigend distance field (true) or a scalar fog volume (false).
modeDetermines the mode of updating the extension field. SWEEP_ALL will update all voxels of the extension field affected by the fast sweeping algorithm. SWEEP_GREATER_THAN_ISOVALUE will update all voxels corresponding to fog values that are greater than a given isovalue. SWEEP_LESS_THAN_ISOVALUE will update all voxels corresponding to fog values that are less than a given isovalue. If a mode other than SWEEP_ALL is chosen, a user needs to supply extGrid.
extGridOptional parameter required to supply a default value for the extension field when SWEEP_GREATER_THAN_ISOVALUE or SWEEP_LESS_THAN_ISOVALUE mode is picked for mode. When SWEEP_GREATER_THAN_ISOVALUE is supplied as an argument for mode, the extension field voxel will default to the value of the extGrid in that position if it corresponds to a level-set value that is less than the isovalue. Otherwise, the extension field voxel value will be computed by the Fast Sweeping algorithm. The opposite convention is implemented when SWEEP_LESS_THAN_ISOVALUE is supplied as an argument for mode.

This, or any of ther other initialization methods, should be called before any call to sweep(). Failure to do so will throw a RuntimeError.

Warning
Note, if this method fails, i.e. returns false, a subsequent call to sweep will trow a RuntimeError. Instead call clear and try again.
template<typename SdfGridT , typename ExtValueT = typename SdfGridT::ValueType>
template<typename OpT >
bool openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::initExt ( const SdfGridT &  fogGrid,
const OpT &  op,
const ExtValueT &  background,
SdfValueT  isoValue,
bool  isInputSdf,
FastSweepingDomain  mode,
const typename ExtGridT::ConstPtr  extGrid 
)

Definition at line 777 of file FastSweeping.h.

template<typename SdfGridT , typename ExtValueT >
template<typename MaskTreeT >
bool openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::initMask ( const SdfGridT &  sdfGrid,
const Grid< MaskTreeT > &  mask,
bool  ignoreActiveTiles = false 
)

Initializer used for the extension of an existing signed distance field into the active values of an input mask of arbitrary value type.

Returns
True if the initialization succeeded.
Parameters
sdfGridInput signed distance field to be extended into the mask.
maskMask used to identify the topology of the output SDF. Note this mask is assume to overlap with the sdfGrid.
ignoreActiveTilesIf false, active tiles in the mask are treated as active voxels. Else they are ignored.

This, or any of ther other initialization methods, should be called before any call to sweep(). Failure to do so will throw a RuntimeError.

Warning
Note, if this method fails, i.e. returns false, a subsequent call to sweep will trow a RuntimeError. Instead call clear and try again.

Definition at line 814 of file FastSweeping.h.

template<typename SdfGridT , typename ExtValueT >
bool openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::initSdf ( const SdfGridT &  sdfGrid,
SdfValueT  isoValue,
bool  isInputSdf 
)

Initializer for input grids that are either a signed distance field or a scalar fog volume.

Returns
True if the initialization succeeded.
Parameters
sdfGridInput scalar grid that represents an existing signed distance field or a fog volume (signified by isInputSdf).
isoValueIso-value to be used to define the Dirichlet boundary condition of the fast sweeping algorithm (typically 0 for sdfs and a positive value for fog volumes).
isInputSdfUsed to determine if sdfGrid is a sigend distance field (true) or a scalar fog volume (false).

This, or any of ther other initialization methods, should be called before any call to sweep(). Failure to do so will throw a RuntimeError.

Warning
Note, if this method fails, i.e. returns false, a subsequent call to sweep will trow a RuntimeError. Instead call clear and try again.

Definition at line 765 of file FastSweeping.h.

template<typename SdfGridT , typename ExtValueT = typename SdfGridT::ValueType>
bool openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::isInputSdf ( )
inline

Return whether the fast-sweeping input grid a signed distance function or not (fog).

Definition at line 677 of file FastSweeping.h.

template<typename SdfGridT , typename ExtValueT = typename SdfGridT::ValueType>
bool openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::isValid ( ) const
inline

Return true if there are voxels and boundaries to solve for.

Definition at line 666 of file FastSweeping.h.

template<typename SdfGridT , typename ExtValueT = typename SdfGridT::ValueType>
FastSweeping& openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::operator= ( const FastSweeping< SdfGridT, ExtValueT > &  )
delete

Disallow copy assignment.

template<typename SdfGridT , typename ExtValueT = typename SdfGridT::ValueType>
SdfGridT::Ptr openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::sdfGrid ( )
inline

Returns a shared pointer to the signed distance field computed by this class.

Warning
This shared pointer might point to NULL if the grid has not been initialize (by one of the init methods) or computed (by the sweep method).

Definition at line 499 of file FastSweeping.h.

template<typename SdfGridT , typename ExtValueT >
void openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::sweep ( int  nIter = 1,
bool  finalize = true 
)

Perform nIter iterations of the fast sweeping algorithm.

Parameters
nIterNumber of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps.
finalizeIf true the (possibly asymmetric) inside and outside values of the resulting signed distance field are properly set. Unless you're an expert this should remain true!
Exceptions
RuntimeErrorif sweepingVoxelCount() or boundaryVoxelCount() return zero. This might happen if none of the initialization methods above were called or if that initialization failed.

Definition at line 845 of file FastSweeping.h.

template<typename SdfGridT , typename ExtValueT = typename SdfGridT::ValueType>
FastSweepingDomain openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::sweepDirection ( ) const
inline

Return whether the sweep update is in all direction (SWEEP_ALL), greater than isovalue (SWEEP_GREATER_THAN_ISOVALUE), or less than isovalue (SWEEP_LESS_THAN_ISOVALUE).

Note
SWEEP_GREATER_THAN_ISOVALUE and SWEEP_LESS_THAN_ISOVALUE modes are used in dilating the narrow-band of a levelset or in extending a field.

Definition at line 674 of file FastSweeping.h.

template<typename SdfGridT , typename ExtValueT = typename SdfGridT::ValueType>
size_t openvdb::OPENVDB_VERSION_NAME::tools::FastSweeping< SdfGridT, ExtValueT >::sweepingVoxelCount ( ) const
inline

Return the number of voxels that will be solved for.

Definition at line 660 of file FastSweeping.h.


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