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...
|
| | FastSweeping () |
| | Constructor.
|
| | ~FastSweeping () |
| | Destructor.
|
| | FastSweeping (const FastSweeping &)=delete |
| | Disallow copy construction.
|
| FastSweeping & | operator= (const FastSweeping &)=delete |
| | Disallow copy assignment.
|
| SdfGridT::Ptr | sdfGrid () |
| | Returns a shared pointer to the signed distance field computed by this class.
|
| ExtGridT::Ptr | extGrid () |
| | Returns a shared pointer to the extension field computed by this class.
|
| 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.
|
| 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.
|
| 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.
|
| 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.
|
| 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.
|
| void | sweep (int nIter=1, bool finalize=true) |
| | Perform nIter iterations of the fast sweeping algorithm.
|
| void | clear () |
| | Clears all the grids and counters so initialization can be called again.
|
| size_t | sweepingVoxelCount () const |
| | Return the number of voxels that will be solved for.
|
| size_t | boundaryVoxelCount () const |
| | Return the number of voxels that defined the boundary condition.
|
| bool | isValid () const |
| | Return true if there are voxels and boundaries to solve for.
|
| 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).
|
| bool | isInputSdf () |
| | Return whether the fast-sweeping input grid a signed distance function or not (fog).
|
| 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) |
template<typename SdfGridT, typename ExtValueT = typename SdfGridT::ValueType>
class openvdb::v13_0::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: 
- 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!
template<typename SdfGridT, typename ExtValueT = typename SdfGridT::ValueType>
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.
- Returns
- True if the initialization succeeded.
- Parameters
-
| sdfGrid | Input scalar grid that represents an existing signed distance field or a fog volume (signified by isInputSdf). |
| op | Functor 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! |
| background | Background value of return grid with the extension field. |
| isoValue | Iso-value to be used for the boundary condition of the fast sweeping algorithm (typically 0 for sdfs and a positive value for fog volumes). |
| isInputSdf | Used to determine if sdfGrid is a sigend distance field (true) or a scalar fog volume (false). |
| mode | Determines 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. |
| extGrid | Optional 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>
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.
- Returns
- True if the initialization succeeded.
- Parameters
-
| sdfGrid | Input signed distance field to be extended into the mask. |
| mask | Mask used to identify the topology of the output SDF. Note this mask is assume to overlap with the sdfGrid. |
| ignoreActiveTiles | If 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.
template<typename SdfGridT, typename ExtValueT>
| 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.
- Returns
- True if the initialization succeeded.
- Parameters
-
| sdfGrid | Input scalar grid that represents an existing signed distance field or a fog volume (signified by isInputSdf). |
| isoValue | Iso-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). |
| isInputSdf | Used 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.