#include <openvdb/tools/FastSweeping.h>
Public Types | |
| using | LeafMgr = tree::LeafManager<const SdfTreeT> |
| using | LeafRange = typename LeafMgr::LeafRange |
Public Member Functions | |
| MinMaxKernel () | |
| MinMaxKernel (MinMaxKernel &other, tbb::split) | |
| math::MinMax< SdfValueT > | run (const SdfGridT &grid) |
| void | operator() (const LeafRange &r) |
| void | join (const MinMaxKernel &other) |
| bool | initExt (const SdfGridT &fogGrid, const OpT &op, const ExtValueT &background, SdfValueT isoValue, bool isInputSdf, FastSweepingDomain mode, const typename ExtGridT::ConstPtr extGrid) |
| FastSweeping () | |
| Constructor. | |
| FastSweeping (const FastSweeping &)=delete | |
| Disallow copy construction. | |
| ~FastSweeping () | |
| Destructor. | |
| 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. | |
| 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 | initExt (const SdfGridT &fogGrid, const OpT &op, const ExtValueT &background, SdfValueT isoValue, bool isInputSdf, FastSweepingDomain mode, const typename ExtGridT::ConstPtr extGrid) |
| 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. | |
| 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). | |
Public Attributes | |
| SdfValueT | mMin |
| SdfValueT | mMax |
| bool | mFltMinExists |
| bool | mFltMaxExists |
Private class of FastSweeping to quickly compute the extrema values of the active voxels in the leaf nodes. Several orders of magnitude faster than tools::extrema! Also determines whether there is float max or float min stored in a voxel.
| using LeafMgr = tree::LeafManager<const SdfTreeT> |
| using LeafRange = typename LeafMgr::LeafRange |
|
inline |
|
inline |
|
inline |
Destructor.
|
inline |
Return the number of voxels that defined the boundary condition.
| void clear | ( | ) |
Clears all the grids and counters so initialization can be called again.
|
inline |
Returns a shared pointer to the extension field computed by this class.
|
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.
| FastSweeping | ( | ) |
Constructor.
|
delete |
Disallow copy construction.
| 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.
| 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.
| bool initExt | ( | const SdfGridT & | fogGrid, |
| const OpT & | op, | ||
| const ExtValueT & | background, | ||
| SdfValueT | isoValue, | ||
| bool | isInputSdf, | ||
| FastSweepingDomain | mode, | ||
| const typename ExtGridT::ConstPtr | extGrid ) |
| bool initExt | ( | const SdfGridT & | fogGrid, |
| const OpT & | op, | ||
| const ExtValueT & | background, | ||
| SdfValueT | isoValue, | ||
| bool | isInputSdf, | ||
| FastSweepingDomain | mode, | ||
| const typename ExtGridT::ConstPtr | extGrid ) |
| 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.
| 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.
| 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.
| 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.
Initializer for input grids that are either a signed distance field or a scalar fog volume.
| 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.
|
inline |
Return whether the fast-sweeping input grid a signed distance function or not (fog).
|
inline |
Return true if there are voxels and boundaries to solve for.
|
inline |
|
inline |
|
delete |
Disallow copy assignment.
|
inline |
|
inline |
Returns a shared pointer to the signed distance field computed by this class.
| void sweep | ( | int | nIter = 1, |
| bool | finalize = true ) |
Perform nIter iterations of the fast sweeping algorithm.
| 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! |
| RuntimeError | if sweepingVoxelCount() or boundaryVoxelCount() return zero. This might happen if none of the initialization methods above were called or if that initialization failed. |
|
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).
|
inline |
Return the number of voxels that will be solved for.
| bool mFltMaxExists |
| bool mFltMinExists |
| SdfValueT mMax |
| SdfValueT mMin |