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...
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).
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!
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.
Initializer used when dilating an existing signed distance field.
Returns
True if the initialization succeeded.
Parameters
sdfGrid
Input signed distance field to to be dilated.
dilation
Numer of voxels that the input SDF will be dilated.
nn
Stencil-pattern used for dilation
mode
Determines 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.
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.
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.
Perform nIter iterations of the fast sweeping algorithm.
Parameters
nIter
Number of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps.
finalize
If 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!
if sweepingVoxelCount() or boundaryVoxelCount() return zero. This might happen if none of the initialization methods above were called or if that initialization failed.
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.