OpenVDB  9.0.1
Namespaces | Classes | Typedefs | Enumerations | Functions
openvdb::v9_0::tools Namespace Reference

Namespaces

 composite
 
 ds
 
 gridop
 
 local_util
 
 lstrack
 
 morphology
 
 poisson
 
 Scheme
 
 valxform
 

Classes

class  ABTransform
 This class implements the Transformer functor interface (specifically, the isAffine(), transform() and invTransform() methods) for a transform that maps an A grid into a B grid's index space such that, after resampling, A's index space and transform match B's index space and transform. More...
 
class  AlphaMask
 
class  BaseCamera
 Abstract base class for the perspective and orthographic cameras. More...
 
class  BasePointScatter
 Forward declaration of base class. More...
 
class  BaseShader
 Abstract base class for the shaders. More...
 
struct  BoxSampler
 
class  ChangeBackgroundOp
 
class  ChangeLevelSetBackgroundOp
 
struct  CheckDivergence
 Checks the divergence against a range. More...
 
struct  CheckEikonal
 Checks the norm of the gradient at zero-crossing voxels against a range. More...
 
struct  CheckFinite
 Checks for both NaN and inf values, i.e. any value that is not finite. More...
 
class  CheckFogVolume
 Class that performs various types of checks on fog volumes. More...
 
struct  CheckInf
 Checks for infinite values, e.g. 1/0 or -1/0. More...
 
class  CheckLevelSet
 Class that performs various types of checks on narrow-band level sets. More...
 
struct  CheckMagnitude
 Check that the magnitude of a value, a, is close to a fixed magnitude, b, given a fixed tolerance c. That is | |a| - |b| | <= c. More...
 
struct  CheckMax
 Checks a value against a maximum. More...
 
struct  CheckMin
 Checks a value against a minimum. More...
 
struct  CheckNan
 Checks NaN values. More...
 
struct  CheckNormGrad
 Checks the norm of the gradient against a range, i.e., |∇Φ| ∈ [min, max]. More...
 
struct  CheckRange
 Checks a value against a range. More...
 
class  ClosestPointProjector
 
class  ClosestSurfacePoint
 Accelerated closest surface point queries for narrow band level sets. More...
 
struct  CompReplaceOp
 
class  ConstrainedPointAdvect
 
struct  ContiguousOp
 a wrapper struct used to avoid unnecessary computation of memory access from Coord when all offsets are guaranteed to be within the dense grid. More...
 
class  CopyFromDense
 Copy the values from a dense grid into an OpenVDB tree. More...
 
class  CopyToDense
 Copy an OpenVDB tree into an existing dense grid. More...
 
class  Cpt
 Compute the closest-point transform of a scalar grid. More...
 
struct  CsgDifferenceOp
 DynamicNodeManager operator to merge two trees using a CSG difference. More...
 
struct  CsgUnionOrIntersectionOp
 DynamicNodeManager operator to merge trees using a CSG union or intersection. More...
 
class  Curl
 Compute the curl of a vector grid. More...
 
class  Dense
 Dense is a simple dense grid API used by the CopyToDense and CopyFromDense classes defined below. More...
 
class  DenseBase
 Base class for Dense which is defined below. More...
 
class  DenseBase< ValueT, LayoutXYZ >
 Partial template specialization of DenseBase. More...
 
class  DenseBase< ValueT, LayoutZYX >
 Partial template specialization of DenseBase. More...
 
class  DenseTransformer
 Class that applies a functor to the index space intersection of a prescribed bounding box and the dense grid. NB: This class only supports DenseGrids with ZYX memory layout. More...
 
class  DenseUniformPointScatter
 Scatters a fixed (and integer) number of points in all active voxels and tiles. More...
 
struct  DepthFirstNodeVisitor
 Visit all nodes that are downstream of a specific node in depth-first order and apply a user-supplied functor to each node. More...
 
struct  DepthFirstNodeVisitor< NodeT, 0 >
 
class  Diagnose
 Performs multithreaded diagnostics of a grid. More...
 
class  DiffuseShader
 Simple diffuse Lambertian surface shader. More...
 
class  DiffuseShader< Film::RGBA, SamplerType >
 
class  DiracDelta
 Smeared-out and continuous Dirac Delta function. More...
 
class  DiscreteField
 Thin wrapper class for a velocity grid. More...
 
class  Divergence
 Compute the divergence of a vector grid. More...
 
struct  DSConverter
 
class  DualGridSampler
 This is a simple convenience class that allows for sampling from a source grid into the index space of a target grid. At construction the source and target grids are checked for alignment which potentially renders interpolation unnecessary. Else interpolation is performed according to the templated Sampler type. More...
 
class  DualGridSampler< tree::ValueAccessor< TreeT >, SamplerT >
 Specialization of DualGridSampler for construction from a ValueAccessor type. More...
 
class  EnrightField
 Analytical, divergence-free and periodic velocity field. More...
 
struct  ExtractAll
 a simple utility class used by extractSparseTreeWithMask More...
 
class  FastSweeping
 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...
 
class  Film
 A simple class that allows for concurrent writes to pixels in an image, background initialization of the image, and PPM file output. More...
 
class  Filter
 Volume filtering (e.g., diffusion) with optional alpha masking. More...
 
class  FindActiveValues
 Finds the active values in a tree which intersects a bounding box. More...
 
class  Gradient
 Compute the gradient of a scalar grid. More...
 
class  GridResampler
 
class  GridSampler
 Class that provides the interface for continuous sampling of values in a tree. More...
 
class  GridSampler< tree::ValueAccessor< TreeT >, SamplerType >
 Specialization of GridSampler for construction from a ValueAccessor type. More...
 
class  GridTransformer
 A GridTransformer applies a geometric transformation to an input grid using one of several sampling schemes, and stores the result in an output grid. More...
 
struct  HalfWidthOp
 
struct  HalfWidthOp< bool >
 
struct  HomogeneousMatMul
 
class  InactivePruneOp
 
class  Laplacian
 
class  LevelSetAdvection
 Hyperbolic advection of narrow-band level sets in an external velocity field. More...
 
class  LevelSetFilter
 Filtering (e.g. diffusion) of narrow-band level sets. An optional scalar field can be used to produce a (smooth) alpha mask for the filtering. More...
 
class  LevelSetFracture
 Level set fracturing. More...
 
class  LevelSetMeasure
 Multi-threaded computation of surface area, volume and average mean-curvature for narrow band level sets. More...
 
class  LevelSetMorphing
 Shape morphology of level sets. Morphing from a source narrow-band level sets to a target narrow-band level set. More...
 
class  LevelSetPruneOp
 
class  LevelSetRayIntersector
 This class provides the public API for intersecting a ray with a narrow-band level set. More...
 
class  LevelSetRayTracer
 A (very) simple multithreaded ray tracer specifically for narrow-band level sets. More...
 
class  LevelSetSphere
 Generates a signed distance field (or narrow band level set) to a single sphere. More...
 
class  LevelSetTracker
 Performs multi-threaded interface tracking of narrow band level sets. More...
 
class  LinearSearchImpl
 Implements linear iterative search for an iso-value of the level set along the direction of the ray. More...
 
class  Magnitude
 
struct  MatMul
 
struct  MatMulNormalize
 
class  MatteShader
 Shader that produces a simple matte. More...
 
class  MatteShader< Film::RGBA, SamplerType >
 
class  MeanCurvature
 
class  MeshToVoxelEdgeData
 Extracts and stores voxel edge intersection data from a mesh. More...
 
class  MultiResGrid
 
class  NonUniformPointScatter
 Non-uniform scatters of point in the active voxels. The local point count is implicitly defined as a product of of a global density (called pointsPerVolume) and the local voxel (or tile) value. More...
 
class  Normalize
 
class  NormalShader
 Color shader that treats the surface normal (x, y, z) as an RGB color. More...
 
class  NormalShader< Film::RGBA, SamplerType >
 
class  OrthographicCamera
 
struct  ParticleAtlas
 
class  ParticlesToLevelSet
 
class  PerspectiveCamera
 
class  PointAdvect
 
struct  PointIndexFilter
 
struct  PointIndexIterator
 Accelerated range and nearest-neighbor searches for point index grids. More...
 
struct  PointIndexLeafNode
 
class  PointPartitioner
 
struct  PointSampler
 
class  PointsToMask
 Makes every voxel of a grid active if it contains a point. More...
 
class  PolygonPool
 Collection of quads and triangles. More...
 
class  PositionShader
 Color shader that treats position (x, y, z) as an RGB color in a cube defined from an axis-aligned bounding box in world space. More...
 
class  PositionShader< Film::RGBA, SamplerType >
 
struct  QuadAndTriangleDataAdapter
 Contiguous quad and triangle data adapter class. More...
 
struct  QuadraticSampler
 
struct  Sampler
 Provises a unified interface for sampling, i.e. interpolation. More...
 
struct  Sampler< 0, false >
 
struct  Sampler< 0, true >
 
struct  Sampler< 1, false >
 
struct  Sampler< 1, true >
 
struct  Sampler< 2, false >
 
struct  Sampler< 2, true >
 
struct  ScalarToVectorConverter
 ScalarToVectorConverter<ScalarGridType>::Type is the type of a grid having the same tree configuration as ScalarGridType but value type Vec3<T> where T is ScalarGridType::ValueType. More...
 
class  SignedFloodFillOp
 
class  SparseExtractor
 Functor-based class used to extract data that satisfies some criteria defined by the embedded OpType functor. The extractSparseTree function wraps this class. More...
 
class  SparseMaskedExtractor
 Functor-based class used to extract data from a dense grid, at the index-space intersection with a supplied mask in the form of a sparse tree. The extractSparseTreeWithMask function wraps this class. More...
 
class  SparseToDenseCompositor
 
struct  StaggeredBoxSampler
 
struct  StaggeredPointSampler
 
struct  StaggeredQuadraticSampler
 
struct  SumMergeOp
 DynamicNodeManager operator to merge trees using a sum operation. More...
 
struct  TileData
 Struct that encodes a bounding box, value and level of a tile. More...
 
class  TolerancePruneOp
 
struct  TreeToMerge
 Convenience class that contains a pointer to a tree to be stolen or deep copied depending on the tag dispatch class used and a subset of methods to retrieve data from the tree. More...
 
class  UniformPointScatter
 The two point scatters UniformPointScatter and NonUniformPointScatter depend on the following two classes: More...
 
struct  VectorToScalarConverter
 VectorToScalarConverter<VectorGridType>::Type is the type of a grid having the same tree configuration as VectorGridType but a scalar value type, T, where T is the type of the original vector components. More...
 
struct  VectorToScalarGrid
 Metafunction to convert a vector-valued grid type to a scalar grid type. More...
 
class  VelocityIntegrator
 Performs Runge-Kutta time integration of variable order in a static velocity field. More...
 
class  VelocitySampler
 
class  VolumeAdvection
 Performs advections of an arbitrary type of volume in a static velocity field. The advections are performed by means of various derivatives of Semi-Lagrangian integration, i.e. backwards tracking along the hyperbolic characteristics followed by interpolation. More...
 
class  VolumeRayIntersector
 This class provides the public API for intersecting a ray with a generic (e.g. density) volume. More...
 
class  VolumeRender
 A (very) simple multithreaded volume render specifically for scalar density. More...
 
struct  VolumeToMesh
 Mesh any scalar grid that has a continuous isosurface. More...
 

Typedefs

template<typename TreeT >
using CsgUnionOp = CsgUnionOrIntersectionOp< TreeT, true >
 
template<typename TreeT >
using CsgIntersectionOp = CsgUnionOrIntersectionOp< TreeT, false >
 
using ParticleIndexAtlas = ParticleAtlas< PointIndexGrid >
 
using PointIndexTree = tree::Tree< tree::RootNode< tree::InternalNode< tree::InternalNode< PointIndexLeafNode< PointIndex32, 3 >, 4 >, 5 >>>
 Point index tree configured to match the default OpenVDB tree configuration. More...
 
using PointIndexGrid = Grid< PointIndexTree >
 Point index grid. More...
 
using UInt32PointPartitioner = PointPartitioner< uint32_t, 3 >
 
using PointList = std::unique_ptr< openvdb::Vec3s[]>
 Point and primitive list types. More...
 
using PolygonPoolList = std::unique_ptr< PolygonPool[]>
 Point and primitive list types. More...
 

Enumerations

enum  MemoryLayout { LayoutXYZ, LayoutZYX }
 
enum  DSCompositeOp {
  DS_OVER, DS_ADD, DS_SUB, DS_MIN,
  DS_MAX, DS_MULT, DS_SET
}
 
enum  FastSweepingDomain { SWEEP_ALL, SWEEP_GREATER_THAN_ISOVALUE, SWEEP_LESS_THAN_ISOVALUE }
 Fast Sweeping update mode. This is useful to determine narrow-band extension or field extension in one side of a signed distance field. More...
 
enum  MeshToVolumeFlags { UNSIGNED_DISTANCE_FIELD = 0x1, DISABLE_INTERSECTING_VOXEL_REMOVAL = 0x2, DISABLE_RENORMALIZATION = 0x4, DISABLE_NARROW_BAND_TRIMMING = 0x8 }
 Mesh to volume conversion flags. More...
 
enum  NearestNeighbors { NN_FACE = 6, NN_FACE_EDGE = 18, NN_FACE_EDGE_VERTEX = 26 }
 Voxel topology of nearest neighbors. More...
 
enum  TilePolicy { IGNORE_TILES, EXPAND_TILES, PRESERVE_TILES }
 Different policies when dilating trees with active tiles. More...
 
enum  { POLYFLAG_EXTERIOR = 0x1, POLYFLAG_FRACTURE_SEAM = 0x2, POLYFLAG_SUBDIVIDED = 0x4 }
 Polygon flags, used for reference based meshing. More...
 

Functions

template<typename GridOrTree >
void activate (GridOrTree &, const typename GridOrTree::ValueType &value, const typename GridOrTree::ValueType &tolerance=zeroVal< typename GridOrTree::ValueType >(), const bool threaded=true)
 Mark as active any inactive tiles or voxels in the given grid or tree whose values are equal to value (optionally to within the given tolerance). More...
 
template<typename GridOrTree >
void deactivate (GridOrTree &, const typename GridOrTree::ValueType &value, const typename GridOrTree::ValueType &tolerance=zeroVal< typename GridOrTree::ValueType >(), const bool threaded=true)
 Mark as inactive any active tiles or voxels in the given grid or tree whose values are equal to value (optionally to within the given tolerance). More...
 
template<typename TreeOrLeafManagerT >
void changeBackground (TreeOrLeafManagerT &tree, const typename TreeOrLeafManagerT::ValueType &background, bool threaded=true, size_t grainSize=32)
 Replace the background value in all the nodes of a tree. More...
 
template<typename TreeOrLeafManagerT >
void changeLevelSetBackground (TreeOrLeafManagerT &tree, const typename TreeOrLeafManagerT::ValueType &halfWidth, bool threaded=true, size_t grainSize=32)
 Replace the background value in all the nodes of a floating-point tree containing a symmetric narrow-band level set. More...
 
template<typename TreeOrLeafManagerT >
void changeAsymmetricLevelSetBackground (TreeOrLeafManagerT &tree, const typename TreeOrLeafManagerT::ValueType &outsideWidth, const typename TreeOrLeafManagerT::ValueType &insideWidth, bool threaded=true, size_t grainSize=32)
 Replace the background values in all the nodes of a floating-point tree containing a possibly asymmetric narrow-band level set. More...
 
template<typename GridType >
GridType::Ptr clip (const GridType &grid, const BBoxd &bbox, bool keepInterior=true)
 Clip the given grid against a world-space bounding box and return a new grid containing the result. More...
 
template<typename GridType >
GridType::Ptr clip (const GridType &grid, const math::NonlinearFrustumMap &frustum, bool keepInterior=true)
 Clip the given grid against a frustum and return a new grid containing the result. More...
 
template<typename GridType , typename MaskTreeType >
GridType::Ptr clip (const GridType &grid, const Grid< MaskTreeType > &mask, bool keepInterior=true)
 Clip a grid against the active voxels of another grid and return a new grid containing the result. More...
 
template<typename GridOrTreeT >
void csgUnion (GridOrTreeT &a, GridOrTreeT &b, bool prune=true)
 Given two level set grids, replace the A grid with the union of A and B. More...
 
template<typename GridOrTreeT >
void csgIntersection (GridOrTreeT &a, GridOrTreeT &b, bool prune=true)
 Given two level set grids, replace the A grid with the intersection of A and B. More...
 
template<typename GridOrTreeT >
void csgDifference (GridOrTreeT &a, GridOrTreeT &b, bool prune=true)
 Given two level set grids, replace the A grid with the difference A / B. More...
 
template<typename GridOrTreeT >
GridOrTreeT::Ptr csgUnionCopy (const GridOrTreeT &a, const GridOrTreeT &b)
 Threaded CSG union operation that produces a new grid or tree from immutable inputs. More...
 
template<typename GridOrTreeT >
GridOrTreeT::Ptr csgIntersectionCopy (const GridOrTreeT &a, const GridOrTreeT &b)
 Threaded CSG intersection operation that produces a new grid or tree from immutable inputs. More...
 
template<typename GridOrTreeT >
GridOrTreeT::Ptr csgDifferenceCopy (const GridOrTreeT &a, const GridOrTreeT &b)
 Threaded CSG difference operation that produces a new grid or tree from immutable inputs. More...
 
template<typename GridOrTreeT >
void compMax (GridOrTreeT &a, GridOrTreeT &b)
 Given grids A and B, compute max(a, b) per voxel (using sparse traversal). Store the result in the A grid and leave the B grid empty. More...
 
template<typename GridOrTreeT >
void compMin (GridOrTreeT &a, GridOrTreeT &b)
 Given grids A and B, compute min(a, b) per voxel (using sparse traversal). Store the result in the A grid and leave the B grid empty. More...
 
template<typename GridOrTreeT >
void compSum (GridOrTreeT &a, GridOrTreeT &b)
 Given grids A and B, compute a + b per voxel (using sparse traversal). Store the result in the A grid and leave the B grid empty. More...
 
template<typename GridOrTreeT >
void compMul (GridOrTreeT &a, GridOrTreeT &b)
 Given grids A and B, compute a * b per voxel (using sparse traversal). Store the result in the A grid and leave the B grid empty. More...
 
template<typename GridOrTreeT >
void compDiv (GridOrTreeT &a, GridOrTreeT &b)
 Given grids A and B, compute a / b per voxel (using sparse traversal). Store the result in the A grid and leave the B grid empty. More...
 
template<typename GridOrTreeT >
void compReplace (GridOrTreeT &a, const GridOrTreeT &b)
 Copy the active voxels of B into A. More...
 
template<typename TreeT , typename OpT = composite::CopyOp<TreeT>>
void compActiveLeafVoxels (TreeT &srcTree, TreeT &dstTree, OpT op=composite::CopyOp< TreeT >())
 Composite the active values in leaf nodes, i.e. active voxels, of a source tree into a destination tree. More...
 
template<typename TreeT >
Index64 countActiveVoxels (const TreeT &tree, bool threaded=true)
 Return the total number of active voxels in the tree. More...
 
template<typename TreeT >
Index64 countActiveVoxels (const TreeT &tree, const CoordBBox &bbox, bool threaded=true)
 Return the total number of active voxels in the tree that intersects a bounding box. More...
 
template<typename TreeT >
Index64 countActiveLeafVoxels (const TreeT &tree, bool threaded=true)
 Return the total number of active voxels stored in leaf nodes. More...
 
template<typename TreeT >
Index64 countActiveLeafVoxels (const TreeT &tree, const CoordBBox &bbox, bool threaded=true)
 Return the total number of active voxels stored in leaf nodes that intersects a bounding box. More...
 
template<typename TreeT >
Index64 countInactiveVoxels (const TreeT &tree, bool threaded=true)
 Return the total number of inactive voxels in the tree. More...
 
template<typename TreeT >
Index64 countInactiveLeafVoxels (const TreeT &tree, bool threaded=true)
 Return the total number of inactive voxels stored in leaf nodes. More...
 
template<typename TreeT >
Index64 countActiveTiles (const TreeT &tree, bool threaded=true)
 Return the total number of active tiles in the tree. More...
 
template<typename TreeT >
Index64 memUsage (const TreeT &tree, bool threaded=true)
 Return the total amount of memory in bytes occupied by this tree. More...
 
template<typename DenseT , typename GridOrTreeT >
void copyToDense (const GridOrTreeT &sparse, DenseT &dense, bool serial=false)
 Populate a dense grid with the values of voxels from a sparse grid, where the sparse grid intersects the dense grid. More...
 
template<typename DenseT , typename GridOrTreeT >
void copyFromDense (const DenseT &dense, GridOrTreeT &sparse, const typename GridOrTreeT::ValueType &tolerance, bool serial=false)
 Populate a sparse grid with the values of all of the voxels of a dense grid. More...
 
template<typename OpType , typename DenseType >
OpType::ResultTreeType::Ptr extractSparseTree (const DenseType &dense, const OpType &functor, const typename OpType::ResultValueType &background, bool threaded=true)
 Selectively extract and transform data from a dense grid, producing a sparse tree with leaf nodes only (e.g. create a tree from the square of values greater than a cutoff.) More...
 
template<typename DenseType , typename MaskTreeType >
DSConverter< DenseType, MaskTreeType >::Type::Ptr extractSparseTreeWithMask (const DenseType &dense, const MaskTreeType &mask, const typename DenseType::ValueType &background, bool threaded=true)
 Copy data from the intersection of a sparse tree and a dense input grid. The resulting tree has the same configuration as the sparse tree, but holds the data type specified by the dense input. More...
 
template<typename ValueT , typename OpType >
void transformDense (Dense< ValueT, openvdb::tools::LayoutZYX > &dense, const openvdb::CoordBBox &bbox, const OpType &op, bool parallel=true)
 
template<DSCompositeOp , typename TreeT >
void compositeToDense (Dense< typename TreeT::ValueType, LayoutZYX > &dense, const TreeT &source, const TreeT &alpha, const typename TreeT::ValueType beta, const typename TreeT::ValueType strength, bool threaded=true)
 Composite data from a sparse tree into a dense array of the same value type. More...
 
template<typename ValueT , typename PointwiseOpT >
void transformDense (Dense< ValueT, openvdb::tools::LayoutZYX > &dense, const openvdb::CoordBBox &bbox, const PointwiseOpT &functor, bool parallel)
 Apply a point-wise functor to the intersection of a dense grid and a given bounding box. More...
 
template<class GridType >
std::string checkLevelSet (const GridType &grid, size_t number=9)
 Perform checks on a grid to see if it is a valid symmetric, narrow-band level set. More...
 
template<class GridType >
std::string checkFogVolume (const GridType &grid, size_t number=6)
 Perform checks on a grid to see if it is a valid fog volume. More...
 
template<class GridType >
bool uniqueInactiveValues (const GridType &grid, std::vector< typename GridType::ValueType > &values, size_t numValues)
 Threaded method to find unique inactive values. More...
 
template<typename GridT >
GridT::Ptr fogToSdf (const GridT &fogGrid, typename GridT::ValueType isoValue, int nIter=1)
 Converts a scalar fog volume into a signed distance function. Active input voxels with scalar values above the given isoValue will have NEGATIVE distance values on output, i.e. they are assumed to be INSIDE the iso-surface. More...
 
template<typename GridT >
GridT::Ptr sdfToSdf (const GridT &sdfGrid, typename GridT::ValueType isoValue=0, int nIter=1)
 Given an existing approximate SDF it solves the Eikonal equation for all its active voxels. Active input voxels with a signed distance value above the given isoValue will have POSITIVE distance values on output, i.e. they are assumed to be OUTSIDE the iso-surface. More...
 
template<typename FogGridT , typename ExtOpT , typename ExtValueT >
FogGridT::template ValueConverter< ExtValueT >::Type::Ptr fogToExt (const FogGridT &fogGrid, const ExtOpT &op, const ExtValueT &background, typename FogGridT::ValueType isoValue, int nIter=1, FastSweepingDomain mode=FastSweepingDomain::SWEEP_ALL, const typename FogGridT::template ValueConverter< ExtValueT >::Type::ConstPtr extGrid=nullptr)
 Computes the extension of a field (scalar, vector, or int are supported), defined by the specified functor, off an iso-surface from an input FOG volume. More...
 
template<typename SdfGridT , typename ExtOpT , typename ExtValueT >
SdfGridT::template ValueConverter< ExtValueT >::Type::Ptr sdfToExt (const SdfGridT &sdfGrid, const ExtOpT &op, const ExtValueT &background, typename SdfGridT::ValueType isoValue=0, int nIter=1, FastSweepingDomain mode=FastSweepingDomain::SWEEP_ALL, const typename SdfGridT::template ValueConverter< ExtValueT >::Type::ConstPtr extGrid=nullptr)
 Computes the extension of a field (scalar, vector, or int are supported), defined by the specified functor, off an iso-surface from an input SDF volume. More...
 
template<typename FogGridT , typename ExtOpT , typename ExtValueT >
std::pair< typename FogGridT::Ptr, typename FogGridT::template ValueConverter< ExtValueT >::Type::Ptr > fogToSdfAndExt (const FogGridT &fogGrid, const ExtOpT &op, const ExtValueT &background, typename FogGridT::ValueType isoValue, int nIter=1, FastSweepingDomain mode=FastSweepingDomain::SWEEP_ALL, const typename FogGridT::template ValueConverter< ExtValueT >::Type::ConstPtr extGrid=nullptr)
 Computes the signed distance field and the extension of a field (scalar, vector, or int are supported), defined by the specified functor, off an iso-surface from an input FOG volume. More...
 
template<typename SdfGridT , typename ExtOpT , typename ExtValueT >
std::pair< typename SdfGridT::Ptr, typename SdfGridT::template ValueConverter< ExtValueT >::Type::Ptr > sdfToSdfAndExt (const SdfGridT &sdfGrid, const ExtOpT &op, const ExtValueT &background, typename SdfGridT::ValueType isoValue=0, int nIter=1, FastSweepingDomain mode=FastSweepingDomain::SWEEP_ALL, const typename SdfGridT::template ValueConverter< ExtValueT >::Type::ConstPtr extGrid=nullptr)
 Computes the signed distance field and the extension of a field (scalar, vector, or int are supported), defined by the specified functor, off an iso-surface from an input SDF volume. More...
 
template<typename GridT >
GridT::Ptr dilateSdf (const GridT &sdfGrid, int dilation, NearestNeighbors nn=NN_FACE, int nIter=1, FastSweepingDomain mode=FastSweepingDomain::SWEEP_ALL)
 Dilates the narrow band of an existing signed distance field by a specified number of voxels (like adding "onion-rings"). More...
 
template<typename GridT , typename MaskTreeT >
GridT::Ptr maskSdf (const GridT &sdfGrid, const Grid< MaskTreeT > &mask, bool ignoreActiveTiles=false, int nIter=1)
 Fills mask by extending an existing signed distance field into the active values of this input ree of arbitrary value type. More...
 
template<typename SdfGridT , typename OpT , typename ExtValueT >
SdfGridT::template ValueConverter< ExtValueT >::Type::Ptr sdfToExt (const SdfGridT &sdfGrid, const OpT &op, const ExtValueT &background, typename SdfGridT::ValueType isoValue, int nIter, FastSweepingDomain mode, const typename SdfGridT::template ValueConverter< ExtValueT >::Type::ConstPtr extGrid)
 
template<typename TreeT >
bool anyActiveValues (const TreeT &tree, const CoordBBox &bbox)
 Returns true if the bounding box intersects any of the active values in a tree, i.e. either active voxels or active tiles. More...
 
template<typename TreeT >
bool anyActiveVoxels (const TreeT &tree, const CoordBBox &bbox)
 Returns true if the bounding box intersects any of the active voxels in a tree, i.e. ignores active tile values. More...
 
template<typename TreeT >
bool anyActiveTiles (const TreeT &tree, const CoordBBox &bbox)
 Returns true if the bounding box intersects any of the active tiles in a tree, i.e. ignores active leaf values. More...
 
template<typename TreeT >
bool noActiveValues (const TreeT &tree, const CoordBBox &bbox)
 Returns true if the bounding box intersects none of the active values in a tree, i.e. neither active voxels or active tiles. More...
 
template<typename TreeT >
Index64 countActiveValues (const TreeT &tree, const CoordBBox &bbox)
 Returns the number of active values that intersects a bounding box intersects, i.e. the count includes both active voxels and virtual voxels in active tiles. More...
 
template<typename TreeT >
std::vector< TileData< typename TreeT::ValueType > > activeTiles (const TreeT &tree, const CoordBBox &bbox)
 Return a vector with bounding boxes that represents all the intersections between active tiles in the tree and the specified bounding box. More...
 
template<typename GridType , typename InterruptT >
ScalarToVectorConverter< GridType >::Type::Ptr cpt (const GridType &grid, bool threaded, InterruptT *interrupt)
 Compute the Closest-Point Transform (CPT) from a distance field. More...
 
template<typename GridType , typename MaskT , typename InterruptT >
ScalarToVectorConverter< GridType >::Type::Ptr cpt (const GridType &grid, const MaskT &mask, bool threaded, InterruptT *interrupt)
 
template<typename GridType >
ScalarToVectorConverter< GridType >::Type::Ptr cpt (const GridType &grid, bool threaded=true)
 
template<typename GridType , typename MaskT >
ScalarToVectorConverter< GridType >::Type::Ptr cpt (const GridType &grid, const MaskT &mask, bool threaded=true)
 
template<typename GridType , typename InterruptT >
GridType::Ptr curl (const GridType &grid, bool threaded, InterruptT *interrupt)
 Compute the curl of the given vector-valued grid. More...
 
template<typename GridType , typename MaskT , typename InterruptT >
GridType::Ptr curl (const GridType &grid, const MaskT &mask, bool threaded, InterruptT *interrupt)
 
template<typename GridType >
GridType::Ptr curl (const GridType &grid, bool threaded=true)
 
template<typename GridType , typename MaskT >
GridType::Ptr curl (const GridType &grid, const MaskT &mask, bool threaded=true)
 
template<typename GridType , typename InterruptT >
VectorToScalarConverter< GridType >::Type::Ptr divergence (const GridType &grid, bool threaded, InterruptT *interrupt)
 Compute the divergence of the given vector-valued grid. More...
 
template<typename GridType , typename MaskT , typename InterruptT >
VectorToScalarConverter< GridType >::Type::Ptr divergence (const GridType &grid, const MaskT &mask, bool threaded, InterruptT *interrupt)
 
template<typename GridType >
VectorToScalarConverter< GridType >::Type::Ptr divergence (const GridType &grid, bool threaded=true)
 
template<typename GridType , typename MaskT >
VectorToScalarConverter< GridType >::Type::Ptr divergence (const GridType &grid, const MaskT &mask, bool threaded=true)
 
template<typename GridType , typename InterruptT >
ScalarToVectorConverter< GridType >::Type::Ptr gradient (const GridType &grid, bool threaded, InterruptT *interrupt)
 Compute the gradient of the given scalar grid. More...
 
template<typename GridType , typename MaskT , typename InterruptT >
ScalarToVectorConverter< GridType >::Type::Ptr gradient (const GridType &grid, const MaskT &mask, bool threaded, InterruptT *interrupt)
 
template<typename GridType >
ScalarToVectorConverter< GridType >::Type::Ptr gradient (const GridType &grid, bool threaded=true)
 
template<typename GridType , typename MaskT >
ScalarToVectorConverter< GridType >::Type::Ptr gradient (const GridType &grid, const MaskT &mask, bool threaded=true)
 
template<typename GridType , typename InterruptT >
GridType::Ptr laplacian (const GridType &grid, bool threaded, InterruptT *interrupt)
 Compute the Laplacian of the given scalar grid. More...
 
template<typename GridType , typename MaskT , typename InterruptT >
GridType::Ptr laplacian (const GridType &grid, const MaskT &mask, bool threaded, InterruptT *interrupt)
 
template<typename GridType >
GridType::Ptr laplacian (const GridType &grid, bool threaded=true)
 
template<typename GridType , typename MaskT >
GridType::Ptr laplacian (const GridType &grid, const MaskT &mask, bool threaded=true)
 
template<typename GridType , typename InterruptT >
GridType::Ptr meanCurvature (const GridType &grid, bool threaded, InterruptT *interrupt)
 Compute the mean curvature of the given grid. More...
 
template<typename GridType , typename MaskT , typename InterruptT >
GridType::Ptr meanCurvature (const GridType &grid, const MaskT &mask, bool threaded, InterruptT *interrupt)
 
template<typename GridType >
GridType::Ptr meanCurvature (const GridType &grid, bool threaded=true)
 
template<typename GridType , typename MaskT >
GridType::Ptr meanCurvature (const GridType &grid, const MaskT &mask, bool threaded=true)
 
template<typename GridType , typename InterruptT >
VectorToScalarConverter< GridType >::Type::Ptr magnitude (const GridType &grid, bool threaded, InterruptT *interrupt)
 Compute the magnitudes of the vectors of the given vector-valued grid. More...
 
template<typename GridType , typename MaskT , typename InterruptT >
VectorToScalarConverter< GridType >::Type::Ptr magnitude (const GridType &grid, const MaskT &mask, bool threaded, InterruptT *interrupt)
 
template<typename GridType >
VectorToScalarConverter< GridType >::Type::Ptr magnitude (const GridType &grid, bool threaded=true)
 
template<typename GridType , typename MaskT >
VectorToScalarConverter< GridType >::Type::Ptr magnitude (const GridType &grid, const MaskT &mask, bool threaded=true)
 
template<typename GridType , typename InterruptT >
GridType::Ptr normalize (const GridType &grid, bool threaded, InterruptT *interrupt)
 Normalize the vectors of the given vector-valued grid. More...
 
template<typename GridType , typename MaskT , typename InterruptT >
GridType::Ptr normalize (const GridType &grid, const MaskT &mask, bool threaded, InterruptT *interrupt)
 
template<typename GridType >
GridType::Ptr normalize (const GridType &grid, bool threaded=true)
 
template<typename GridType , typename MaskT >
GridType::Ptr normalize (const GridType &grid, const MaskT &mask, bool threaded=true)
 
template<typename Sampler , typename Interrupter , typename GridType >
void resampleToMatch (const GridType &inGrid, GridType &outGrid, Interrupter &interrupter)
 Resample an input grid into an output grid of the same type such that, after resampling, the input and output grids coincide (apart from sampling artifacts), but the output grid's transform is unchanged. More...
 
template<typename Sampler , typename GridType >
void resampleToMatch (const GridType &inGrid, GridType &outGrid)
 Resample an input grid into an output grid of the same type such that, after resampling, the input and output grids coincide (apart from sampling artifacts), but the output grid's transform is unchanged. More...
 
template<typename Sampler , typename Interrupter , typename GridType >
void doResampleToMatch (const GridType &inGrid, GridType &outGrid, Interrupter &interrupter)
 
template<class GridType >
Real levelSetArea (const GridType &grid, bool useWorldSpace=true)
 Return the surface area of a narrow-band level set. More...
 
template<class GridType >
Real levelSetVolume (const GridType &grid, bool useWorldSpace=true)
 Return the volume of a narrow-band level set surface. More...
 
template<class GridType >
int levelSetEulerCharacteristic (const GridType &grid)
 Return the Euler Characteristics of a narrow-band level set surface (possibly disconnected). More...
 
template<class GridType >
int levelSetGenus (const GridType &grid)
 Return the genus of a narrow-band level set surface. More...
 
template<class GridT >
Real levelSetArea (const GridT &grid, bool useWorldUnits)
 
template<class GridT >
Real levelSetVolume (const GridT &grid, bool useWorldUnits)
 
template<class GridT >
int levelSetEulerCharacteristic (const GridT &grid)
 
template<class GridT >
int levelSetGenus (const GridT &grid)
 
template<typename GridType , typename InterruptT >
GridType::Ptr createLevelSetPlatonic (int faceCount, float scale=1.0f, const Vec3f &center=Vec3f(0.0f), float voxelSize=0.1f, float halfWidth=float(LEVEL_SET_HALF_WIDTH), InterruptT *interrupt=nullptr)
 Return a grid of type GridType containing a narrow-band level set representation of a platonic solid. More...
 
template<typename GridType >
GridType::Ptr createLevelSetPlatonic (int faceCount, float scale=1.0f, const Vec3f &center=Vec3f(0.0f), float voxelSize=0.1f, float halfWidth=float(LEVEL_SET_HALF_WIDTH))
 Return a grid of type GridType containing a narrow-band level set representation of a platonic solid. More...
 
template<typename GridType , typename InterruptT >
GridType::Ptr createLevelSetTetrahedron (float scale=1.0f, const Vec3f &center=Vec3f(0.0f), float voxelSize=0.1f, float halfWidth=float(LEVEL_SET_HALF_WIDTH), InterruptT *interrupt=nullptr)
 Return a grid of type GridType containing a narrow-band level set representation of a tetrahedron. More...
 
template<typename GridType >
GridType::Ptr createLevelSetTetrahedron (float scale=1.0f, const Vec3f &center=Vec3f(0.0f), float voxelSize=0.1f, float halfWidth=float(LEVEL_SET_HALF_WIDTH))
 Return a grid of type GridType containing a narrow-band level set representation of a tetrahedron. More...
 
template<typename GridType , typename InterruptT >
GridType::Ptr createLevelSetCube (float scale=1.0f, const Vec3f &center=Vec3f(0.0f), float voxelSize=0.1f, float halfWidth=float(LEVEL_SET_HALF_WIDTH), InterruptT *interrupt=nullptr)
 Return a grid of type GridType containing a narrow-band level set representation of a cube. More...
 
template<typename GridType >
GridType::Ptr createLevelSetCube (float scale=1.0f, const Vec3f &center=Vec3f(0.0f), float voxelSize=0.1f, float halfWidth=float(LEVEL_SET_HALF_WIDTH))
 Return a grid of type GridType containing a narrow-band level set representation of a cube. More...
 
template<typename GridType , typename InterruptT >
GridType::Ptr createLevelSetOctahedron (float scale=1.0f, const Vec3f &center=Vec3f(0.0f), float voxelSize=0.1f, float halfWidth=float(LEVEL_SET_HALF_WIDTH), InterruptT *interrupt=nullptr)
 Return a grid of type GridType containing a narrow-band level set representation of an octahedron. More...
 
template<typename GridType >
GridType::Ptr createLevelSetOctahedron (float scale=1.0f, const Vec3f &center=Vec3f(0.0f), float voxelSize=0.1f, float halfWidth=float(LEVEL_SET_HALF_WIDTH))
 Return a grid of type GridType containing a narrow-band level set representation of an octahedron. More...
 
template<typename GridType , typename InterruptT >
GridType::Ptr createLevelSetDodecahedron (float scale=1.0f, const Vec3f &center=Vec3f(0.0f), float voxelSize=0.1f, float halfWidth=float(LEVEL_SET_HALF_WIDTH), InterruptT *interrupt=nullptr)
 Return a grid of type GridType containing a narrow-band level set representation of a dodecahedron. More...
 
template<typename GridType >
GridType::Ptr createLevelSetDodecahedron (float scale=1.0f, const Vec3f &center=Vec3f(0.0f), float voxelSize=0.1f, float halfWidth=float(LEVEL_SET_HALF_WIDTH))
 Return a grid of type GridType containing a narrow-band level set representation of a dodecahedron. More...
 
template<typename GridType , typename InterruptT >
GridType::Ptr createLevelSetIcosahedron (float scale=1.0f, const Vec3f &center=Vec3f(0.0f), float voxelSize=0.1f, float halfWidth=float(LEVEL_SET_HALF_WIDTH), InterruptT *interrupt=nullptr)
 Return a grid of type GridType containing a narrow-band level set representation of an icosahedron. More...
 
template<typename GridType >
GridType::Ptr createLevelSetIcosahedron (float scale=1.0f, const Vec3f &center=Vec3f(0.0f), float voxelSize=0.1f, float halfWidth=float(LEVEL_SET_HALF_WIDTH))
 Return a grid of type GridType containing a narrow-band level set representation of an icosahedron. More...
 
template<class GridType >
GridType::Ptr levelSetRebuild (const GridType &grid, float isovalue=0, float halfWidth=float(LEVEL_SET_HALF_WIDTH), const math::Transform *xform=nullptr)
 Return a new grid of type GridType that contains a narrow-band level set representation of an isosurface of a given grid. More...
 
template<class GridType >
GridType::Ptr levelSetRebuild (const GridType &grid, float isovalue, float exBandWidth, float inBandWidth, const math::Transform *xform=nullptr)
 Return a new grid of type GridType that contains a narrow-band level set representation of an isosurface of a given grid. More...
 
template<class GridType , typename InterruptT >
GridType::Ptr levelSetRebuild (const GridType &grid, float isovalue, float exBandWidth, float inBandWidth, const math::Transform *xform=nullptr, InterruptT *interrupter=nullptr)
 Return a new grid of type GridType that contains a narrow-band level set representation of an isosurface of a given grid. More...
 
template<typename GridType , typename InterruptT >
GridType::Ptr createLevelSetSphere (float radius, const openvdb::Vec3f &center, float voxelSize, float halfWidth=float(LEVEL_SET_HALF_WIDTH), InterruptT *interrupt=nullptr, bool threaded=true)
 Return a grid of type GridType containing a narrow-band level set representation of a sphere. More...
 
template<typename GridType >
GridType::Ptr createLevelSetSphere (float radius, const openvdb::Vec3f &center, float voxelSize, float halfWidth=float(LEVEL_SET_HALF_WIDTH), bool threaded=true)
 Return a grid of type GridType containing a narrow-band level set representation of a sphere. More...
 
template<class GridType >
void sdfToFogVolume (GridType &grid, typename GridType::ValueType cutoffDistance=lsutilGridMax< GridType >())
 Threaded method to convert a sparse level set/SDF into a sparse fog volume. More...
 
template<class GridOrTreeType >
GridOrTreeType::template ValueConverter< bool >::Type::Ptr sdfInteriorMask (const GridOrTreeType &volume, typename GridOrTreeType::ValueType isovalue=lsutilGridZero< GridOrTreeType >())
 Threaded method to construct a boolean mask that represents interior regions in a signed distance field. More...
 
template<typename GridOrTreeType >
GridOrTreeType::template ValueConverter< bool >::Type::Ptr extractEnclosedRegion (const GridOrTreeType &volume, typename GridOrTreeType::ValueType isovalue=lsutilGridZero< GridOrTreeType >(), const typename TreeAdapter< GridOrTreeType >::TreeType::template ValueConverter< bool >::Type *fillMask=nullptr)
 Extracts the interior regions of a signed distance field and topologically enclosed (watertight) regions of value greater than the isovalue (cavities) that can arise as the result of CSG union operations between different shapes where at least one of the shapes has a concavity that is capped. More...
 
template<typename GridOrTreeType >
GridOrTreeType::template ValueConverter< bool >::Type::Ptr extractIsosurfaceMask (const GridOrTreeType &volume, typename GridOrTreeType::ValueType isovalue)
 Return a mask of the voxels that intersect the implicit surface with the given isovalue. More...
 
template<typename GridOrTreeType >
void extractActiveVoxelSegmentMasks (const GridOrTreeType &volume, std::vector< typename GridOrTreeType::template ValueConverter< bool >::Type::Ptr > &masks)
 Return a mask for each connected component of the given grid's active voxels. More...
 
template<typename GridOrTreeType >
void segmentActiveVoxels (const GridOrTreeType &volume, std::vector< typename GridOrTreeType::Ptr > &segments)
 Separates disjoint active topology components into distinct grids or trees. More...
 
template<typename GridOrTreeType >
void segmentSDF (const GridOrTreeType &volume, std::vector< typename GridOrTreeType::Ptr > &segments)
 Separates disjoint SDF surfaces into distinct grids or trees. More...
 
template<class GridType >
OPENVDB_DOCS_INTERNAL void sdfToFogVolume (GridType &grid, typename GridType::ValueType cutoffDistance)
 Threaded method to convert a sparse level set/SDF into a sparse fog volume. More...
 
template<typename GridType >
GridType::template ValueConverter< bool >::Type::Ptr interiorMask (const GridType &grid, const double isovalue=0.0)
 Given an input grid of any type, return a new, boolean grid whose active voxel topology matches the input grid's or, if the input grid is a level set, matches the input grid's interior. More...
 
template<typename GridType , typename MeshDataAdapter >
GridType::Ptr meshToVolume (const MeshDataAdapter &mesh, const math::Transform &transform, float exteriorBandWidth=3.0f, float interiorBandWidth=3.0f, int flags=0, typename GridType::template ValueConverter< Int32 >::Type *polygonIndexGrid=nullptr)
 
template<typename GridType , typename MeshDataAdapter , typename Interrupter >
GridType::Ptr meshToVolume (Interrupter &interrupter, const MeshDataAdapter &mesh, const math::Transform &transform, float exteriorBandWidth=3.0f, float interiorBandWidth=3.0f, int flags=0, typename GridType::template ValueConverter< Int32 >::Type *polygonIndexGrid=nullptr)
 Convert polygonal meshes that consist of quads and/or triangles into signed or unsigned distance field volumes. More...
 
template<typename GridType >
GridType::Ptr meshToLevelSet (const openvdb::math::Transform &xform, const std::vector< Vec3s > &points, const std::vector< Vec3I > &triangles, float halfWidth=float(LEVEL_SET_HALF_WIDTH))
 Convert a triangle mesh to a level set volume. More...
 
template<typename GridType , typename Interrupter >
GridType::Ptr meshToLevelSet (Interrupter &interrupter, const openvdb::math::Transform &xform, const std::vector< Vec3s > &points, const std::vector< Vec3I > &triangles, float halfWidth=float(LEVEL_SET_HALF_WIDTH))
 Adds support for a interrupter callback used to cancel the conversion. More...
 
template<typename GridType >
GridType::Ptr meshToLevelSet (const openvdb::math::Transform &xform, const std::vector< Vec3s > &points, const std::vector< Vec4I > &quads, float halfWidth=float(LEVEL_SET_HALF_WIDTH))
 Convert a quad mesh to a level set volume. More...
 
template<typename GridType , typename Interrupter >
GridType::Ptr meshToLevelSet (Interrupter &interrupter, const openvdb::math::Transform &xform, const std::vector< Vec3s > &points, const std::vector< Vec4I > &quads, float halfWidth=float(LEVEL_SET_HALF_WIDTH))
 Adds support for a interrupter callback used to cancel the conversion. More...
 
template<typename GridType >
GridType::Ptr meshToLevelSet (const openvdb::math::Transform &xform, const std::vector< Vec3s > &points, const std::vector< Vec3I > &triangles, const std::vector< Vec4I > &quads, float halfWidth=float(LEVEL_SET_HALF_WIDTH))
 Convert a triangle and quad mesh to a level set volume. More...
 
template<typename GridType , typename Interrupter >
GridType::Ptr meshToLevelSet (Interrupter &interrupter, const openvdb::math::Transform &xform, const std::vector< Vec3s > &points, const std::vector< Vec3I > &triangles, const std::vector< Vec4I > &quads, float halfWidth=float(LEVEL_SET_HALF_WIDTH))
 Adds support for a interrupter callback used to cancel the conversion. More...
 
template<typename GridType >
GridType::Ptr meshToSignedDistanceField (const openvdb::math::Transform &xform, const std::vector< Vec3s > &points, const std::vector< Vec3I > &triangles, const std::vector< Vec4I > &quads, float exBandWidth, float inBandWidth)
 Convert a triangle and quad mesh to a signed distance field with an asymmetrical narrow band. More...
 
template<typename GridType , typename Interrupter >
GridType::Ptr meshToSignedDistanceField (Interrupter &interrupter, const openvdb::math::Transform &xform, const std::vector< Vec3s > &points, const std::vector< Vec3I > &triangles, const std::vector< Vec4I > &quads, float exBandWidth, float inBandWidth)
 Adds support for a interrupter callback used to cancel the conversion. More...
 
template<typename GridType >
GridType::Ptr meshToUnsignedDistanceField (const openvdb::math::Transform &xform, const std::vector< Vec3s > &points, const std::vector< Vec3I > &triangles, const std::vector< Vec4I > &quads, float bandWidth)
 Convert a triangle and quad mesh to an unsigned distance field. More...
 
template<typename GridType , typename Interrupter >
GridType::Ptr meshToUnsignedDistanceField (Interrupter &interrupter, const openvdb::math::Transform &xform, const std::vector< Vec3s > &points, const std::vector< Vec3I > &triangles, const std::vector< Vec4I > &quads, float bandWidth)
 Adds support for a interrupter callback used to cancel the conversion. More...
 
template<typename GridType , typename VecType >
GridType::Ptr createLevelSetBox (const math::BBox< VecType > &bbox, const openvdb::math::Transform &xform, typename VecType::ValueType halfWidth=LEVEL_SET_HALF_WIDTH)
 Return a grid of type GridType containing a narrow-band level set representation of a box. More...
 
template<typename FloatTreeT >
void traceExteriorBoundaries (FloatTreeT &tree)
 Traces the exterior voxel boundary of closed objects in the input volume tree. Exterior voxels are marked with a negative sign, voxels with a value below 0.75 are left unchanged and act as the boundary layer. More...
 
std::ostream & operator<< (std::ostream &ostr, const MeshToVoxelEdgeData::EdgeData &rhs)
 
MeshToVoxelEdgeData::EdgeData Abs (const MeshToVoxelEdgeData::EdgeData &x)
 
template<typename TreeOrLeafManagerT >
void dilateActiveValues (TreeOrLeafManagerT &tree, const int iterations=1, const NearestNeighbors nn=NN_FACE, const TilePolicy mode=PRESERVE_TILES, const bool threaded=true)
 Topologically dilate all active values (i.e. both voxels and tiles) in a tree using one of three nearest neighbor connectivity patterns. More...
 
template<typename TreeOrLeafManagerT >
void erodeActiveValues (TreeOrLeafManagerT &tree, const int iterations=1, const NearestNeighbors nn=NN_FACE, const TilePolicy mode=PRESERVE_TILES, const bool threaded=true)
 Topologically erode all active values (i.e. both voxels and tiles) in a tree using one of three nearest neighbor connectivity patterns. More...
 
template<typename TreeType >
void dilateVoxels (TreeType &tree, int iterations=1, NearestNeighbors nn=NN_FACE)
 Topologically dilate all leaf-level active voxels in a tree using one of three nearest neighbor connectivity patterns. More...
 
template<typename TreeType >
void dilateVoxels (tree::LeafManager< TreeType > &manager, int iterations=1, NearestNeighbors nn=NN_FACE)
 Topologically dilate all leaf-level active voxels in a tree using one of three nearest neighbor connectivity patterns. More...
 
template<typename TreeT , typename OpT >
size_t visitNodesDepthFirst (TreeT &tree, OpT &op, size_t idx=0)
 Visit all nodes in the tree depth-first and apply a user-supplied functor to each node. More...
 
template<typename GridT , typename ParticleListT , typename InterrupterT = util::NullInterrupter>
void particlesToSdf (const ParticleListT &, GridT &, InterrupterT *=nullptr)
 Populate a scalar, floating-point grid with CSG-unioned level set spheres described by the given particle positions and radii. More...
 
template<typename GridT , typename ParticleListT , typename InterrupterT = util::NullInterrupter>
void particlesToSdf (const ParticleListT &, GridT &, Real radius, InterrupterT *=nullptr)
 Populate a scalar, floating-point grid with fixed-size, CSG-unioned level set spheres described by the given particle positions and the specified radius. More...
 
template<typename GridT , typename ParticleListT , typename InterrupterT = util::NullInterrupter>
void particleTrailsToSdf (const ParticleListT &, GridT &, Real delta=1, InterrupterT *=nullptr)
 Populate a scalar, floating-point grid with CSG-unioned trails of level set spheres with decreasing radius, where the starting position and radius and the direction of each trail is given by particle attributes. More...
 
template<typename GridT , typename ParticleListT , typename InterrupterT = util::NullInterrupter>
void particlesToMask (const ParticleListT &, GridT &, InterrupterT *=nullptr)
 Activate a boolean grid wherever it intersects the spheres described by the given particle positions and radii. More...
 
template<typename GridT , typename ParticleListT , typename InterrupterT = util::NullInterrupter>
void particlesToMask (const ParticleListT &, GridT &, Real radius, InterrupterT *=nullptr)
 Activate a boolean grid wherever it intersects the fixed-size spheres described by the given particle positions and the specified radius. More...
 
template<typename GridT , typename ParticleListT , typename InterrupterT = util::NullInterrupter>
void particleTrailsToMask (const ParticleListT &, GridT &, Real delta=1, InterrupterT *=nullptr)
 Activate a boolean grid wherever it intersects trails of spheres with decreasing radius, where the starting position and radius and the direction of each trail is given by particle attributes. More...
 
template<typename GridT , typename PointArrayT >
GridT::Ptr createPointIndexGrid (const PointArrayT &points, double voxelSize)
 Partition points into a point index grid to accelerate range and nearest-neighbor searches. More...
 
template<typename GridT , typename PointArrayT >
GridT::Ptr createPointIndexGrid (const PointArrayT &points, const math::Transform &xform)
 Partition points into a point index grid to accelerate range and nearest-neighbor searches. More...
 
template<typename PointArrayT , typename GridT >
bool isValidPartition (const PointArrayT &points, const GridT &grid)
 Return true if the given point index grid represents a valid partitioning of the given point array. More...
 
template<typename GridT , typename PointArrayT >
GridT::ConstPtr getValidPointIndexGrid (const PointArrayT &points, const typename GridT::ConstPtr &grid)
 Repartition the points if needed, otherwise return the input grid. More...
 
template<typename GridT , typename PointArrayT >
GridT::Ptr getValidPointIndexGrid (const PointArrayT &points, const typename GridT::Ptr &grid)
 Repartition the points if needed, otherwise return the input grid. More...
 
template<typename PointListT , typename GridT >
void maskPoints (const PointListT &points, GridT &grid)
 Makes every voxel of the grid active if it contains a point. More...
 
template<typename PointListT >
MaskGrid::Ptr createPointMask (const PointListT &points, const math::Transform &xform)
 Return a MaskGrid where each binary voxel value is on if the voxel contains one (or more) points (i.e. the 3D position of a point is closer to this voxel than any other voxels). More...
 
template<typename GridT , typename MaskT = typename GridT::template ValueConverter<ValueMask>::Type>
MaskT::Ptr createPotentialFlowMask (const GridT &grid, int dilation=5)
 Construct a mask for the Potential Flow domain. More...
 
template<typename Vec3T , typename GridT , typename MaskT >
GridT::template ValueConverter< Vec3T >::Type::Ptr createPotentialFlowNeumannVelocities (const GridT &collider, const MaskT &domain, const typename GridT::template ValueConverter< Vec3T >::Type::ConstPtr boundaryVelocity, const Vec3T &backgroundVelocity)
 Create a Potential Flow velocities grid for the Neumann boundary. More...
 
template<typename Vec3GridT , typename MaskT , typename InterrupterT = util::NullInterrupter>
VectorToScalarGrid< Vec3GridT >::Ptr computeScalarPotential (const MaskT &domain, const Vec3GridT &neumann, math::pcg::State &state, InterrupterT *interrupter=nullptr)
 Compute the Potential on the domain using the Neumann boundary conditions on solid boundaries. More...
 
template<typename Vec3GridT >
Vec3GridT::Ptr computePotentialFlow (const typename VectorToScalarGrid< Vec3GridT >::Type &potential, const Vec3GridT &neumann, const typename Vec3GridT::ValueType backgroundVelocity=zeroVal< typename Vec3GridT::TreeType::ValueType >())
 Compute a vector Flow Field comprising the gradient of the potential with Neumann boundary conditions applied. More...
 
template<typename TreeT >
void prune (TreeT &tree, typename TreeT::ValueType tolerance=zeroVal< typename TreeT::ValueType >(), bool threaded=true, size_t grainSize=1)
 Reduce the memory footprint of a tree by replacing with tiles any nodes whose values are all the same (optionally to within a tolerance) and have the same active state. More...
 
template<typename TreeT >
void pruneTiles (TreeT &tree, typename TreeT::ValueType tolerance=zeroVal< typename TreeT::ValueType >(), bool threaded=true, size_t grainSize=1)
 Reduce the memory footprint of a tree by replacing with tiles any non-leaf nodes whose values are all the same (optionally to within a tolerance) and have the same active state. More...
 
template<typename TreeT >
void pruneInactive (TreeT &tree, bool threaded=true, size_t grainSize=1)
 Reduce the memory footprint of a tree by replacing with background tiles any nodes whose values are all inactive. More...
 
template<typename TreeT >
void pruneInactiveWithValue (TreeT &tree, const typename TreeT::ValueType &value, bool threaded=true, size_t grainSize=1)
 Reduce the memory footprint of a tree by replacing any nodes whose values are all inactive with tiles of the given value. More...
 
template<typename TreeT >
void pruneLevelSet (TreeT &tree, bool threaded=true, size_t grainSize=1)
 Reduce the memory footprint of a tree by replacing nodes whose values are all inactive with inactive tiles having a value equal to the first value encountered in the (inactive) child. More...
 
template<typename TreeT >
void pruneLevelSet (TreeT &tree, const typename TreeT::ValueType &outsideWidth, const typename TreeT::ValueType &insideWidth, bool threaded=true, size_t grainSize=1)
 Reduce the memory footprint of a tree by replacing nodes whose voxel values are all inactive with inactive tiles having the value -| insideWidth | if the voxel values are negative and | outsideWidth | otherwise. More...
 
template<typename GridT >
void rayTrace (const GridT &, const BaseShader &, BaseCamera &, size_t pixelSamples=1, unsigned int seed=0, bool threaded=true)
 Ray-trace a volume. More...
 
template<typename GridT , typename IntersectorT >
void rayTrace (const GridT &, const IntersectorT &, const BaseShader &, BaseCamera &, size_t pixelSamples=1, unsigned int seed=0, bool threaded=true)
 Ray-trace a volume using a given ray intersector. More...
 
template<typename TreeOrLeafManagerT >
void signedFloodFill (TreeOrLeafManagerT &tree, bool threaded=true, size_t grainSize=1, Index minLevel=0)
 Set the values of all inactive voxels and tiles of a narrow-band level set from the signs of the active voxels, setting outside values to +background and inside values to -background. More...
 
template<typename TreeOrLeafManagerT >
void signedFloodFillWithValues (TreeOrLeafManagerT &tree, const typename TreeOrLeafManagerT::ValueType &outsideWidth, const typename TreeOrLeafManagerT::ValueType &insideWidth, bool threaded=true, size_t grainSize=1, Index minLevel=0)
 Set the values of all inactive voxels and tiles of a narrow-band level set from the signs of the active voxels, setting exterior values to outsideWidth and interior values to insideWidth. Set the background value of this tree to outsideWidth. More...
 
template<typename IterT >
math::Histogram histogram (const IterT &iter, double minVal, double maxVal, size_t numBins=10, bool threaded=true)
 Iterate over a scalar grid and compute a histogram of the values of the voxels that are visited, or iterate over a vector-valued grid and compute a histogram of the magnitudes of the vectors. More...
 
template<typename IterT >
math::Extrema extrema (const IterT &iter, bool threaded=true)
 Iterate over a scalar grid and compute extrema (min/max) of the values of the voxels that are visited, or iterate over a vector-valued grid and compute extrema of the magnitudes of the vectors. More...
 
template<typename IterT >
math::Stats statistics (const IterT &iter, bool threaded=true)
 Iterate over a scalar grid and compute statistics (mean, variance, etc.) of the values of the voxels that are visited, or iterate over a vector-valued grid and compute statistics of the magnitudes of the vectors. More...
 
template<typename IterT , typename ValueOp >
math::Extrema extrema (const IterT &iter, const ValueOp &op, bool threaded)
 Iterate over a grid and compute extrema (min/max) of the values produced by applying the given functor at each voxel that is visited. More...
 
template<typename IterT , typename ValueOp >
math::Stats statistics (const IterT &iter, const ValueOp &op, bool threaded)
 Iterate over a grid and compute statistics (mean, variance, etc.) of the values produced by applying the given functor at each voxel that is visited. More...
 
template<typename OperatorT , typename IterT >
math::Stats opStatistics (const IterT &iter, const OperatorT &op=OperatorT(), bool threaded=true)
 Iterate over a grid and compute statistics (mean, variance, etc.) of the values produced by applying a given operator (see math/Operators.h) at each voxel that is visited. More...
 
template<typename OperatorT , typename IterT >
math::Extrema opExtrema (const IterT &iter, const OperatorT &op=OperatorT(), bool threaded=true)
 Same as opStatistics except it returns a math::Extrema vs a math::Stats. More...
 
template<typename GridT >
GridT::template ValueConverter< float >::Type::Ptr topologyToLevelSet (const GridT &grid, int halfWidth=3, int closingSteps=1, int dilation=0, int smoothingSteps=0)
 Compute the narrow-band signed distance to the interface between active and inactive voxels in the input grid. More...
 
template<typename GridT , typename InterrupterT >
GridT::template ValueConverter< float >::Type::Ptr topologyToLevelSet (const GridT &grid, int halfWidth=3, int closingSteps=1, int dilation=0, int smoothingSteps=0, InterrupterT *interrupt=nullptr)
 Compute the narrow-band signed distance to the interface between active and inactive voxels in the input grid. More...
 
template<typename IterT , typename XformOp >
void foreach (const IterT &iter, XformOp &op, bool threaded=true, bool shareOp=true)
 
template<typename IterT , typename XformOp >
void foreach (const IterT &iter, const XformOp &op, bool threaded=true, bool shareOp=true)
 
template<typename InIterT , typename OutGridT , typename XformOp >
void transformValues (const InIterT &inIter, OutGridT &outGrid, XformOp &op, bool threaded=true, bool shareOp=true, MergePolicy merge=MERGE_ACTIVE_STATES)
 
template<typename InIterT , typename OutGridT , typename XformOp >
void transformValues (const InIterT &inIter, OutGridT &outGrid, const XformOp &op, bool threaded=true, bool shareOp=true, MergePolicy merge=MERGE_ACTIVE_STATES)
 
template<typename IterT , typename XformOp >
void accumulate (const IterT &iter, XformOp &op, bool threaded=true)
 
template<typename TreeT >
void setValueOnMin (TreeT &tree, const Coord &xyz, const typename TreeT::ValueType &value)
 Set the value of the voxel at the given coordinates in tree to the minimum of its current value and value, and mark the voxel as active. More...
 
template<typename TreeT >
void setValueOnMax (TreeT &tree, const Coord &xyz, const typename TreeT::ValueType &value)
 Set the value of the voxel at the given coordinates in tree to the maximum of its current value and value, and mark the voxel as active. More...
 
template<typename TreeT >
void setValueOnSum (TreeT &tree, const Coord &xyz, const typename TreeT::ValueType &value)
 Set the value of the voxel at the given coordinates in tree to the sum of its current value and value, and mark the voxel as active. More...
 
template<typename TreeT >
void setValueOnMult (TreeT &tree, const Coord &xyz, const typename TreeT::ValueType &value)
 Set the value of the voxel at the given coordinates in tree to the product of its current value and value, and mark the voxel as active. More...
 
template<typename GridType >
void transformVectors (GridType &, const Mat4d &)
 Apply an affine transform to the voxel values of a vector-valued grid in accordance with the grid's vector type (covariant, contravariant, etc.). More...
 
template<typename GridType >
void volumeToMesh (const GridType &grid, std::vector< Vec3s > &points, std::vector< Vec4I > &quads, double isovalue=0.0)
 Uniformly mesh any scalar grid that has a continuous isosurface. More...
 
template<typename GridType >
void volumeToMesh (const GridType &grid, std::vector< Vec3s > &points, std::vector< Vec3I > &triangles, std::vector< Vec4I > &quads, double isovalue=0.0, double adaptivity=0.0, bool relaxDisorientedTriangles=true)
 Adaptively mesh any scalar grid that has a continuous isosurface. More...
 
Vec3d findFeaturePoint (const std::vector< Vec3d > &points, const std::vector< Vec3d > &normals)
 Given a set of tangent elements, points with corresponding normals, this method returns the intersection point of all tangent elements. More...
 
template<typename GridT , typename InterrupterT = util::NullInterrupter>
void fillWithSpheres (const GridT &grid, std::vector< openvdb::Vec4s > &spheres, const Vec2i &sphereCount=Vec2i(1, 50), bool overlapping=false, float minRadius=1.0, float maxRadius=std::numeric_limits< float >::max(), float isovalue=0.0, int instanceCount=10000, InterrupterT *interrupter=nullptr)
 Fill a closed level set or fog volume with adaptively-sized spheres. More...
 
template<typename TreeType >
void erodeVoxels (TreeType &tree, int iterations=1, NearestNeighbors nn=NN_FACE)
 Topologically erode all leaf-level active voxels in the given tree. More...
 
template<typename TreeType >
void erodeVoxels (tree::LeafManager< TreeType > &manager, int iterations=1, NearestNeighbors nn=NN_FACE)
 

Typedef Documentation

using CsgUnionOp = CsgUnionOrIntersectionOp<TreeT, true>

Point index grid.

Point index tree configured to match the default OpenVDB tree configuration.

using PointList = std::unique_ptr<openvdb::Vec3s[]>

Point and primitive list types.

using PolygonPoolList = std::unique_ptr<PolygonPool[]>

Point and primitive list types.

Enumeration Type Documentation

anonymous enum

Polygon flags, used for reference based meshing.

Enumerator
POLYFLAG_EXTERIOR 
POLYFLAG_FRACTURE_SEAM 
POLYFLAG_SUBDIVIDED 

We currrently support the following operations when compositing sparse data into a dense grid.

Enumerator
DS_OVER 
DS_ADD 
DS_SUB 
DS_MIN 
DS_MAX 
DS_MULT 
DS_SET 
enum FastSweepingDomain
strong

Fast Sweeping update mode. This is useful to determine narrow-band extension or field extension in one side of a signed distance field.

Enumerator
SWEEP_ALL 

Update all voxels affected by the sweeping algorithm.

SWEEP_GREATER_THAN_ISOVALUE 
SWEEP_LESS_THAN_ISOVALUE 

We currently support the following two 3D memory layouts for dense volumes: XYZ, i.e. x is the fastest moving index, and ZYX, i.e. z is the fastest moving index. The ZYX memory layout leads to nested for-loops of the order x, y, z, which we find to be the most intuitive. Hence, ZYX is the layout used throughout VDB. However, other data structures, e.g. Houdini and Maya, employ the XYZ layout. Clearly a dense volume with the ZYX layout converts more efficiently to a VDB, but we support both for convenience.

Enumerator
LayoutXYZ 
LayoutZYX 

Mesh to volume conversion flags.

Enumerator
UNSIGNED_DISTANCE_FIELD 

Switch from the default signed distance field conversion that classifies regions as either inside or outside the mesh boundary to a unsigned distance field conversion that only computes distance values. This conversion type does not require a closed watertight mesh.

DISABLE_INTERSECTING_VOXEL_REMOVAL 

Disable the cleanup step that removes voxels created by self intersecting portions of the mesh.

DISABLE_RENORMALIZATION 

Disable the distance renormalization step that smooths out bumps caused by self intersecting or overlapping portions of the mesh

DISABLE_NARROW_BAND_TRIMMING 

Disable the cleanup step that removes active voxels that exceed the narrow band limits. (Only relevant for small limits)

Voxel topology of nearest neighbors.

NN_FACE

face adjacency (6 nearest neighbors, defined as all neighbor voxels connected along one of the primary axes)

NN_FACE_EDGE

face and edge adjacency (18 nearest neighbors, defined as all neighbor voxels connected along either one or two of the primary axes)

NN_FACE_EDGE_VERTEX
face, edge and vertex adjacency (26 nearest neighbors, defined as all neighbor voxels connected along either one, two or all three of the primary axes)
Enumerator
NN_FACE 
NN_FACE_EDGE 
NN_FACE_EDGE_VERTEX 
enum TilePolicy

Different policies when dilating trees with active tiles.

IGNORE_TILES

Active tiles are ignores. For dilation, only active voxels are dilated. For erosion, active tiles still appear as neighboring activity however will themselves not be eroded.

EXPAND_TILES

For dilation and erosion, active tiles are voxelized (expanded), dilated or eroded and left in their voxelized state irrespective of their final state.

PRESERVE_TILES
For dilation, active tiles remain unchanged but they still contribute to the dilation as if they were active voxels. For erosion, active tiles are only eroded should the erosion wavefront reach them, otherwise they are left unchanged. Additionally, dense or empty nodes with constant values are pruned.
Enumerator
IGNORE_TILES 
EXPAND_TILES 
PRESERVE_TILES 

Function Documentation

MeshToVoxelEdgeData::EdgeData openvdb::v9_0::tools::Abs ( const MeshToVoxelEdgeData::EdgeData x)
inline
void accumulate ( const IterT &  iter,
XformOp &  op,
bool  threaded = true 
)
inline

Iterate over a grid and at each step call op(iter). If threading is enabled, call op.join(otherOp) to accumulate intermediate results from pairs of threads.

Parameters
iteran iterator over a grid or its tree (Grid::ValueOnCIter, Tree::NodeIter, etc.)
opa functor with a join method of the form void join(XformOp&) and a call method of the form void op(const IterT&), where IterT is the type of iter
threadedif true, transform multiple values of the grid in parallel
Note
If threaded is true, each thread gets its own copy of the original functor. The order in which threads are joined is unspecified.
If threaded is false, the join method is never called.
Example:
Compute the average of the active values of a scalar, floating-point grid using the math::Stats class.
namespace {
struct Average {
math::Stats stats;
// Accumulate voxel and tile values into this functor's Stats object.
inline void operator()(const FloatGrid::ValueOnCIter& iter) {
if (iter.isVoxelValue()) stats.add(*iter);
else stats.add(*iter, iter.getVoxelCount());
}
// Accumulate another functor's Stats object into this functor's.
inline void join(Average& other) { stats.add(other.stats); }
// Return the cumulative result.
inline double average() const { return stats.mean(); }
};
}
{
FloatGrid grid = ...;
Average op;
tools::accumulate(grid.cbeginValueOn(), op);
double average = op.average();
}
Note
For more complex operations that require finer control over threading, consider using tbb::parallel_for() or tbb::parallel_reduce() in conjunction with a tree::IteratorRange that wraps a grid or tree iterator.
void activate ( GridOrTree &  gridOrTree,
const typename GridOrTree::ValueType &  value,
const typename GridOrTree::ValueType &  tolerance = zeroVal<typename GridOrTree::ValueType>(),
const bool  threaded = true 
)

Mark as active any inactive tiles or voxels in the given grid or tree whose values are equal to value (optionally to within the given tolerance).

std::vector< TileData< typename TreeT::ValueType > > activeTiles ( const TreeT &  tree,
const CoordBBox &  bbox 
)

Return a vector with bounding boxes that represents all the intersections between active tiles in the tree and the specified bounding box.

Warning
For repeated calls to this method consider instead creating an instance of FindActiveValues and then repeatedly call count(). This assumes the tree to be constant between calls but is slightly faster.
Parameters
treeconst tree to be tested for active tiles.
bboxindex bounding box which is intersected against the active tiles.
bool anyActiveTiles ( const TreeT &  tree,
const CoordBBox &  bbox 
)

Returns true if the bounding box intersects any of the active tiles in a tree, i.e. ignores active leaf values.

Warning
For repeated calls to this method consider instead creating an instance of FindActiveValues and then repeatedly call anyActiveTiles(). This assumes the tree to be constant between calls but is slightly faster.
Parameters
treeconst tree to be tested for active tiles.
bboxindex bounding box which is intersected against the active tiles.
bool anyActiveValues ( const TreeT &  tree,
const CoordBBox &  bbox 
)

Returns true if the bounding box intersects any of the active values in a tree, i.e. either active voxels or active tiles.

Warning
For repeated calls to this method consider instead creating an instance of FindActiveValues and then repeatedly call anyActiveValues(). This assumes the tree to be constant between calls but is slightly faster.
Parameters
treeconst tree to be tested for active values.
bboxindex bounding box which is intersected against the active values.
bool anyActiveVoxels ( const TreeT &  tree,
const CoordBBox &  bbox 
)

Returns true if the bounding box intersects any of the active voxels in a tree, i.e. ignores active tile values.

Note
In VDB voxels by definition reside in the leaf nodes ONLY. So this method ignores active tile values that reside higher up in the VDB tree structure.
Warning
For repeated calls to this method consider instead creating an instance of FindActiveValues and then repeatedly call anyActiveVoxels(). This assumes the tree to be constant between calls but is slightly faster.
Parameters
treeconst tree to be tested for active voxels.
bboxindex bounding box which is intersected against the active voxels.
void changeAsymmetricLevelSetBackground ( TreeOrLeafManagerT &  tree,
const typename TreeOrLeafManagerT::ValueType &  outsideWidth,
const typename TreeOrLeafManagerT::ValueType &  insideWidth,
bool  threaded = true,
size_t  grainSize = 32 
)

Replace the background values in all the nodes of a floating-point tree containing a possibly asymmetric narrow-band level set.

All inactive values will be set to +| outsideWidth | if outside and -| insideWidth | if inside, where outsideWidth is the outside width of the narrow band and insideWidth is its inside width.

Note
This method is faster than changeBackground since it does not perform tests to see if inactive values are equal to the old background value.
If a LeafManager is used the cached leaf nodes are reused, resulting in slightly better overall performance.
Parameters
treeTree (or LeafManager) that will have its background value changed
outsideWidthThe width of the outside of the narrow band
insideWidthThe width of the inside of the narrow band
threadedenable or disable threading (threading is enabled by default)
grainSizeused to control the threading granularity (default is 32)
Exceptions
ValueErrorif outsideWidth is negative or insideWidth is not negative (as defined by math::isNegative)
void changeBackground ( TreeOrLeafManagerT &  tree,
const typename TreeOrLeafManagerT::ValueType &  background,
bool  threaded = true,
size_t  grainSize = 32 
)

Replace the background value in all the nodes of a tree.

The sign of the background value is preserved, and only inactive values equal to the old background value are replaced.

Note
If a LeafManager is used the cached leaf nodes are reused, resulting in slightly better overall performance.
Parameters
treeTree (or LeafManager) that will have its background value changed
backgroundthe new background value
threadedenable or disable threading (threading is enabled by default)
grainSizeused to control the threading granularity (default is 32)
void changeLevelSetBackground ( TreeOrLeafManagerT &  tree,
const typename TreeOrLeafManagerT::ValueType &  halfWidth,
bool  threaded = true,
size_t  grainSize = 32 
)

Replace the background value in all the nodes of a floating-point tree containing a symmetric narrow-band level set.

All inactive values will be set to +| halfWidth | if outside and -| halfWidth | if inside, where halfWidth is half the width of the symmetric narrow band.

Note
This method is faster than changeBackground since it does not perform tests to see if inactive values are equal to the old background value.
If a LeafManager is used the cached leaf nodes are reused, resulting in slightly better overall performance.
Parameters
treeTree (or LeafManager) that will have its background value changed
halfWidthhalf of the width of the symmetric narrow band
threadedenable or disable threading (threading is enabled by default)
grainSizeused to control the threading granularity (default is 32)
Exceptions
ValueErrorif halfWidth is negative (as defined by math::isNegative)
std::string checkFogVolume ( const GridType &  grid,
size_t  number = 6 
)

Perform checks on a grid to see if it is a valid fog volume.

Parameters
gridGrid to be checked
numberNumber of the checks to be performed (see below)
Returns
string with a message indicating the nature of the issue. If no issue is detected the return string is empty.

number refers to the following ordered list of checks - always starting from the top. Fast checks 1: value type is floating point 2: has FOG volume class type 3: background value is zero

Slower checks 4: all the values are finite, i.e not NaN or infinite 5: inactive values are zero 6: active values are in the range [0,1]

std::string checkLevelSet ( const GridType &  grid,
size_t  number = 9 
)

Perform checks on a grid to see if it is a valid symmetric, narrow-band level set.

Parameters
gridGrid to be checked
numberNumber of the checks to be performed (see below)
Returns
string with a message indicating the nature of the issue. If no issue is detected the return string is empty.

number refers to the following ordered list of checks - always starting from the top. Fast checks 1: value type is floating point 2: has level set class type 3: has uniform scale 4: background value is positive and n*dx

Slower checks 5: no active tiles 6: all the values are finite, i.e not NaN or infinite 7: active values in range between +-background 8: abs of inactive values = background, i.e. assuming a symmetric narrow band!

Relatively slow check (however multithreaded) 9: norm gradient is close to one, i.e. satisfied the Eikonal equation.

GridType::Ptr clip ( const GridType &  grid,
const BBoxd bbox,
bool  keepInterior = true 
)

Clip the given grid against a world-space bounding box and return a new grid containing the result.

Parameters
gridthe grid to be clipped
bboxa world-space bounding box
keepInteriorif true, discard voxels that lie outside the bounding box; if false, discard voxels that lie inside the bounding box
Warning
Clipping a level set will likely produce a grid that is no longer a valid level set.
GridType::Ptr clip ( const GridType &  grid,
const math::NonlinearFrustumMap frustum,
bool  keepInterior = true 
)

Clip the given grid against a frustum and return a new grid containing the result.

Parameters
gridthe grid to be clipped
frustuma frustum map
keepInteriorif true, discard voxels that lie outside the frustum; if false, discard voxels that lie inside the frustum
Warning
Clipping a level set will likely produce a grid that is no longer a valid level set.
GridType::Ptr openvdb::v9_0::tools::clip ( const GridType &  grid,
const Grid< MaskTreeType > &  mask,
bool  keepInterior = true 
)

Clip a grid against the active voxels of another grid and return a new grid containing the result.

Parameters
gridthe grid to be clipped
maska grid whose active voxels form a boolean clipping mask
keepInteriorif true, discard voxels that do not intersect the mask; if false, discard voxels that intersect the mask

The mask grid need not have the same transform as the source grid. Also, if the mask grid is a level set, consider using tools::sdfInteriorMask to construct a new mask comprising the interior (rather than the narrow band) of the level set.

Warning
Clipping a level set will likely produce a grid that is no longer a valid level set.
void openvdb::v9_0::tools::compActiveLeafVoxels ( TreeT &  srcTree,
TreeT &  dstTree,
OpT  op = composite::CopyOp<TreeT>() 
)

Composite the active values in leaf nodes, i.e. active voxels, of a source tree into a destination tree.

Parameters
srcTreesource tree from which active voxels are composited.
dstTreedestination tree into which active voxels are composited.
opa functor of the form void op(T& dst, const T& src), where T is the ValueType of the tree, that composites a source value into a destination value. By default it copies the value from src to dst.

All active voxels in the source tree will be active in the destination tree, and their value is determined by a use-defined functor (OpT op) that operates on the source and destination values. The only exception is when the tree type is MaskTree, in which case no functor is needed since by defintion a MaskTree has no values (only topology).

Warning
This function only operated on leaf node values, i.e. tile values are ignored.
void compDiv ( GridOrTreeT &  a,
GridOrTreeT &  b 
)

Given grids A and B, compute a / b per voxel (using sparse traversal). Store the result in the A grid and leave the B grid empty.

void compMax ( GridOrTreeT &  a,
GridOrTreeT &  b 
)

Given grids A and B, compute max(a, b) per voxel (using sparse traversal). Store the result in the A grid and leave the B grid empty.

void compMin ( GridOrTreeT &  a,
GridOrTreeT &  b 
)

Given grids A and B, compute min(a, b) per voxel (using sparse traversal). Store the result in the A grid and leave the B grid empty.

void compMul ( GridOrTreeT &  a,
GridOrTreeT &  b 
)

Given grids A and B, compute a * b per voxel (using sparse traversal). Store the result in the A grid and leave the B grid empty.

void compositeToDense ( Dense< typename TreeT::ValueType, LayoutZYX > &  dense,
const TreeT &  source,
const TreeT &  alpha,
const typename TreeT::ValueType  beta,
const typename TreeT::ValueType  strength,
bool  threaded = true 
)
inline

Composite data from a sparse tree into a dense array of the same value type.

Parameters
denseDense grid to be altered by the operation
sourceSparse data to composite into dense
alphaSparse Alpha mask used in compositing operations.
betaConstant multiplier on src
strengthConstant multiplier on alpha
threadedEnable threading for this operation.
void compReplace ( GridOrTreeT &  a,
const GridOrTreeT &  b 
)

Copy the active voxels of B into A.

void compSum ( GridOrTreeT &  a,
GridOrTreeT &  b 
)

Given grids A and B, compute a + b per voxel (using sparse traversal). Store the result in the A grid and leave the B grid empty.

Vec3GridT::Ptr computePotentialFlow ( const typename VectorToScalarGrid< Vec3GridT >::Type &  potential,
const Vec3GridT &  neumann,
const typename Vec3GridT::ValueType  backgroundVelocity = zeroVal<typename Vec3GridT::TreeType::ValueType>() 
)

Compute a vector Flow Field comprising the gradient of the potential with Neumann boundary conditions applied.

Parameters
potentialscalar potential, typically computed from computeScalarPotential()
neumannthe topology of this grid defines where the solid boundaries are and grid values give the Neumann boundaries that should be applied there
backgroundVelocitya background velocity value
VectorToScalarGrid< Vec3GridT >::Ptr computeScalarPotential ( const MaskT &  domain,
const Vec3GridT &  neumann,
math::pcg::State state,
InterrupterT *  interrupter = nullptr 
)

Compute the Potential on the domain using the Neumann boundary conditions on solid boundaries.

Parameters
domaina mask to represent the domain in which to perform the solve
neumannthe topology of this grid defines where the solid boundaries are and grid values give the Neumann boundaries that should be applied there
statethe solver parameters for computing the solution
interrupterpointer to an optional interrupter adhering to the util::NullInterrupter interface

On input, the State object should specify convergence criteria (minimum error and maximum number of iterations); on output, it gives the actual termination conditions.

void copyFromDense ( const DenseT &  dense,
GridOrTreeT &  sparse,
const typename GridOrTreeT::ValueType &  tolerance,
bool  serial = false 
)

Populate a sparse grid with the values of all of the voxels of a dense grid.

Parameters
densethe dense grid from which to copy values
sparsean OpenVDB grid or tree into which to copy values
tolerancevalues in the dense grid that are within this tolerance of the sparse grid's background value become inactive background voxels or tiles in the sparse grid
serialif false, process voxels in parallel
void copyToDense ( const GridOrTreeT &  sparse,
DenseT &  dense,
bool  serial = false 
)

Populate a dense grid with the values of voxels from a sparse grid, where the sparse grid intersects the dense grid.

Parameters
sparsean OpenVDB grid or tree from which to copy values
densethe dense grid into which to copy values
serialif false, process voxels in parallel
Index64 countActiveLeafVoxels ( const TreeT &  tree,
bool  threaded = true 
)

Return the total number of active voxels stored in leaf nodes.

Index64 countActiveLeafVoxels ( const TreeT &  tree,
const CoordBBox &  bbox,
bool  threaded = true 
)

Return the total number of active voxels stored in leaf nodes that intersects a bounding box.

Index64 countActiveTiles ( const TreeT &  tree,
bool  threaded = true 
)

Return the total number of active tiles in the tree.

Index64 countActiveValues ( const TreeT &  tree,
const CoordBBox &  bbox 
)

Returns the number of active values that intersects a bounding box intersects, i.e. the count includes both active voxels and virtual voxels in active tiles.

Warning
For repeated calls to this method consider instead creating an instance of FindActiveValues and then repeatedly call count(). This assumes the tree to be constant between calls but is slightly faster.
Parameters
treeconst tree to be tested for active values.
bboxindex bounding box which is intersected against the active values.
Index64 countActiveVoxels ( const TreeT &  tree,
bool  threaded = true 
)

Return the total number of active voxels in the tree.

Index64 countActiveVoxels ( const TreeT &  tree,
const CoordBBox &  bbox,
bool  threaded = true 
)

Return the total number of active voxels in the tree that intersects a bounding box.

Index64 countInactiveLeafVoxels ( const TreeT &  tree,
bool  threaded = true 
)

Return the total number of inactive voxels stored in leaf nodes.

Index64 countInactiveVoxels ( const TreeT &  tree,
bool  threaded = true 
)

Return the total number of inactive voxels in the tree.

ScalarToVectorConverter< GridType >::Type::Ptr cpt ( const GridType &  grid,
bool  threaded,
InterruptT *  interrupt 
)

Compute the Closest-Point Transform (CPT) from a distance field.

Returns
a new vector-valued grid with the same numerical precision as the input grid (for example, if the input grid is a DoubleGrid, the output grid will be a Vec3DGrid)

When a mask grid is specified, the solution is calculated only in the intersection of the mask active topology and the input active topology independent of the transforms associated with either grid.

ScalarToVectorConverter< GridType >::Type::Ptr cpt ( const GridType &  grid,
const MaskT &  mask,
bool  threaded,
InterruptT *  interrupt 
)
ScalarToVectorConverter<GridType>::Type::Ptr openvdb::v9_0::tools::cpt ( const GridType &  grid,
bool  threaded = true 
)
ScalarToVectorConverter<GridType>::Type::Ptr openvdb::v9_0::tools::cpt ( const GridType &  grid,
const MaskT &  mask,
bool  threaded = true 
)
GridType::Ptr createLevelSetBox ( const math::BBox< VecType > &  bbox,
const openvdb::math::Transform &  xform,
typename VecType::ValueType  halfWidth = LEVEL_SET_HALF_WIDTH 
)

Return a grid of type GridType containing a narrow-band level set representation of a box.

Parameters
bboxa bounding box in world units
xformworld-to-index-space transform
halfWidthhalf the width of the narrow band, in voxel units
GridType::Ptr openvdb::v9_0::tools::createLevelSetCube ( float  scale = 1.0f,
const Vec3f center = Vec3f(0.0f),
float  voxelSize = 0.1f,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH),
InterruptT *  interrupt = nullptr 
)

Return a grid of type GridType containing a narrow-band level set representation of a cube.

Parameters
scalescale of the platonic solid in world units
centercenter of the platonic solid in world units
voxelSizevoxel size in world units
halfWidthhalf the width of the narrow band, in voxel units
interrupta pointer adhering to the util::NullInterrupter interface
Note
GridType::ValueType must be a floating-point scalar.
GridType::Ptr openvdb::v9_0::tools::createLevelSetCube ( float  scale = 1.0f,
const Vec3f center = Vec3f(0.0f),
float  voxelSize = 0.1f,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH) 
)

Return a grid of type GridType containing a narrow-band level set representation of a cube.

Parameters
scalescale of the platonic solid in world units
centercenter of the platonic solid in world units
voxelSizevoxel size in world units
halfWidthhalf the width of the narrow band, in voxel units
Note
GridType::ValueType must be a floating-point scalar.
GridType::Ptr openvdb::v9_0::tools::createLevelSetDodecahedron ( float  scale = 1.0f,
const Vec3f center = Vec3f(0.0f),
float  voxelSize = 0.1f,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH),
InterruptT *  interrupt = nullptr 
)

Return a grid of type GridType containing a narrow-band level set representation of a dodecahedron.

Parameters
scalescale of the platonic solid in world units
centercenter of the platonic solid in world units
voxelSizevoxel size in world units
halfWidthhalf the width of the narrow band, in voxel units
interrupta pointer adhering to the util::NullInterrupter interface
Note
GridType::ValueType must be a floating-point scalar.
GridType::Ptr openvdb::v9_0::tools::createLevelSetDodecahedron ( float  scale = 1.0f,
const Vec3f center = Vec3f(0.0f),
float  voxelSize = 0.1f,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH) 
)

Return a grid of type GridType containing a narrow-band level set representation of a dodecahedron.

Parameters
scalescale of the platonic solid in world units
centercenter of the platonic solid in world units
voxelSizevoxel size in world units
halfWidthhalf the width of the narrow band, in voxel units
Note
GridType::ValueType must be a floating-point scalar.
GridType::Ptr openvdb::v9_0::tools::createLevelSetIcosahedron ( float  scale = 1.0f,
const Vec3f center = Vec3f(0.0f),
float  voxelSize = 0.1f,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH),
InterruptT *  interrupt = nullptr 
)

Return a grid of type GridType containing a narrow-band level set representation of an icosahedron.

Parameters
scalescale of the platonic solid in world units
centercenter of the platonic solid in world units
voxelSizevoxel size in world units
halfWidthhalf the width of the narrow band, in voxel units
interrupta pointer adhering to the util::NullInterrupter interface
Note
GridType::ValueType must be a floating-point scalar.
GridType::Ptr openvdb::v9_0::tools::createLevelSetIcosahedron ( float  scale = 1.0f,
const Vec3f center = Vec3f(0.0f),
float  voxelSize = 0.1f,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH) 
)

Return a grid of type GridType containing a narrow-band level set representation of an icosahedron.

Parameters
scalescale of the platonic solid in world units
centercenter of the platonic solid in world units
voxelSizevoxel size in world units
halfWidthhalf the width of the narrow band, in voxel units
Note
GridType::ValueType must be a floating-point scalar.
GridType::Ptr openvdb::v9_0::tools::createLevelSetOctahedron ( float  scale = 1.0f,
const Vec3f center = Vec3f(0.0f),
float  voxelSize = 0.1f,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH),
InterruptT *  interrupt = nullptr 
)

Return a grid of type GridType containing a narrow-band level set representation of an octahedron.

Parameters
scalescale of the platonic solid in world units
centercenter of the platonic solid in world units
voxelSizevoxel size in world units
halfWidthhalf the width of the narrow band, in voxel units
interrupta pointer adhering to the util::NullInterrupter interface
Note
GridType::ValueType must be a floating-point scalar.
GridType::Ptr openvdb::v9_0::tools::createLevelSetOctahedron ( float  scale = 1.0f,
const Vec3f center = Vec3f(0.0f),
float  voxelSize = 0.1f,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH) 
)

Return a grid of type GridType containing a narrow-band level set representation of an octahedron.

Parameters
scalescale of the platonic solid in world units
centercenter of the platonic solid in world units
voxelSizevoxel size in world units
halfWidthhalf the width of the narrow band, in voxel units
Note
GridType::ValueType must be a floating-point scalar.
GridType::Ptr createLevelSetPlatonic ( int  faceCount,
float  scale = 1.0f,
const Vec3f center = Vec3f(0.0f),
float  voxelSize = 0.1f,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH),
InterruptT *  interrupt = nullptr 
)

Return a grid of type GridType containing a narrow-band level set representation of a platonic solid.

Parameters
faceCountnumber of faces of the platonic solid, i.e. 4, 6, 8, 12 or 20
scalescale of the platonic solid in world units
centercenter of the platonic solid in world units
voxelSizevoxel size in world units
halfWidthhalf the width of the narrow band, in voxel units
interrupta pointer adhering to the util::NullInterrupter interface

Faces: TETRAHEDRON=4, CUBE=6, OCTAHEDRON=8, DODECAHEDRON=12, ICOSAHEDRON=20

Note
GridType::ValueType must be a floating-point scalar.
GridType::Ptr openvdb::v9_0::tools::createLevelSetPlatonic ( int  faceCount,
float  scale = 1.0f,
const Vec3f center = Vec3f(0.0f),
float  voxelSize = 0.1f,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH) 
)

Return a grid of type GridType containing a narrow-band level set representation of a platonic solid.

Parameters
faceCountnumber of faces of the platonic solid, i.e. 4, 6, 8, 12 or 20
scalescale of the platonic solid in world units
centercenter of the platonic solid in world units
voxelSizevoxel size in world units
halfWidthhalf the width of the narrow band, in voxel units

Faces: TETRAHEDRON=4, CUBE=6, OCTAHEDRON=8, DODECAHEDRON=12, ICOSAHEDRON=20

Note
GridType::ValueType must be a floating-point scalar.
GridType::Ptr createLevelSetSphere ( float  radius,
const openvdb::Vec3f center,
float  voxelSize,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH),
InterruptT *  interrupt = nullptr,
bool  threaded = true 
)

Return a grid of type GridType containing a narrow-band level set representation of a sphere.

Parameters
radiusradius of the sphere in world units
centercenter of the sphere in world units
voxelSizevoxel size in world units
halfWidthhalf the width of the narrow band, in voxel units
interrupta pointer adhering to the util::NullInterrupter interface
threadedif true multi-threading is enabled (true by default)
Note
GridType::ValueType must be a floating-point scalar.
The leapfrog algorithm employed in this method is best suited for a single large sphere. For multiple small spheres consider using the faster algorithm in ParticlesToLevelSet.h
GridType::Ptr openvdb::v9_0::tools::createLevelSetSphere ( float  radius,
const openvdb::Vec3f center,
float  voxelSize,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH),
bool  threaded = true 
)

Return a grid of type GridType containing a narrow-band level set representation of a sphere.

Parameters
radiusradius of the sphere in world units
centercenter of the sphere in world units
voxelSizevoxel size in world units
halfWidthhalf the width of the narrow band, in voxel units
threadedif true multi-threading is enabled (true by default)
Note
GridType::ValueType must be a floating-point scalar.
The leapfrog algorithm employed in this method is best suited for a single large sphere. For multiple small spheres consider using the faster algorithm in ParticlesToLevelSet.h
GridType::Ptr openvdb::v9_0::tools::createLevelSetTetrahedron ( float  scale = 1.0f,
const Vec3f center = Vec3f(0.0f),
float  voxelSize = 0.1f,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH),
InterruptT *  interrupt = nullptr 
)

Return a grid of type GridType containing a narrow-band level set representation of a tetrahedron.

Parameters
scalescale of the platonic solid in world units
centercenter of the platonic solid in world units
voxelSizevoxel size in world units
halfWidthhalf the width of the narrow band, in voxel units
interrupta pointer adhering to the util::NullInterrupter interface
Note
GridType::ValueType must be a floating-point scalar.
GridType::Ptr openvdb::v9_0::tools::createLevelSetTetrahedron ( float  scale = 1.0f,
const Vec3f center = Vec3f(0.0f),
float  voxelSize = 0.1f,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH) 
)

Return a grid of type GridType containing a narrow-band level set representation of a tetrahedron.

Parameters
scalescale of the platonic solid in world units
centercenter of the platonic solid in world units
voxelSizevoxel size in world units
halfWidthhalf the width of the narrow band, in voxel units
Note
GridType::ValueType must be a floating-point scalar.
GridT::Ptr createPointIndexGrid ( const PointArrayT &  points,
double  voxelSize 
)
inline

Partition points into a point index grid to accelerate range and nearest-neighbor searches.

Parameters
pointsworld-space point array conforming to the PointArray interface
voxelSizevoxel size in world units
GridT::Ptr createPointIndexGrid ( const PointArrayT &  points,
const math::Transform xform 
)
inline

Partition points into a point index grid to accelerate range and nearest-neighbor searches.

Parameters
pointsworld-space point array conforming to the PointArray interface
xformworld-to-index-space transform
MaskGrid::Ptr openvdb::v9_0::tools::createPointMask ( const PointListT &  points,
const math::Transform xform 
)
inline

Return a MaskGrid where each binary voxel value is on if the voxel contains one (or more) points (i.e. the 3D position of a point is closer to this voxel than any other voxels).

Parameters
pointspoints that active the voxels in the returned grid.
xformtransform from world space to voxels in grid space.
MaskT::Ptr createPotentialFlowMask ( const GridT &  grid,
int  dilation = 5 
)

Construct a mask for the Potential Flow domain.

For a level set, this represents a rebuilt exterior narrow band. For any other grid it is a new region that surrounds the active voxels.

Parameters
gridsource grid to use for computing the mask
dilationdilation in voxels of the source grid to form the new potential flow mask
GridT::template ValueConverter< Vec3T >::Type::Ptr createPotentialFlowNeumannVelocities ( const GridT &  collider,
const MaskT &  domain,
const typename GridT::template ValueConverter< Vec3T >::Type::ConstPtr  boundaryVelocity,
const Vec3T &  backgroundVelocity 
)

Create a Potential Flow velocities grid for the Neumann boundary.

Parameters
collidera level set that represents the boundary
domaina mask to represent the potential flow domain
boundaryVelocityan optional grid pointer to stores the velocities of the boundary
backgroundVelocitya background velocity value

Typically this method involves supplying a velocity grid for the collider boundary, however it can also be used for a global wind field around the collider by supplying an empty boundary Velocity and a non-zero background velocity.

void csgDifference ( GridOrTreeT &  a,
GridOrTreeT &  b,
bool  prune = true 
)

Given two level set grids, replace the A grid with the difference A / B.

Exceptions
ValueErrorif the background value of either grid is not greater than zero.
Note
This operation always leaves the B grid empty.
GridOrTreeT::Ptr csgDifferenceCopy ( const GridOrTreeT &  a,
const GridOrTreeT &  b 
)

Threaded CSG difference operation that produces a new grid or tree from immutable inputs.

Returns
The CSG difference of the and level set inputs.
void csgIntersection ( GridOrTreeT &  a,
GridOrTreeT &  b,
bool  prune = true 
)

Given two level set grids, replace the A grid with the intersection of A and B.

Exceptions
ValueErrorif the background value of either grid is not greater than zero.
Note
This operation always leaves the B grid empty.
GridOrTreeT::Ptr csgIntersectionCopy ( const GridOrTreeT &  a,
const GridOrTreeT &  b 
)

Threaded CSG intersection operation that produces a new grid or tree from immutable inputs.

Returns
The CSG intersection of the and level set inputs.
void csgUnion ( GridOrTreeT &  a,
GridOrTreeT &  b,
bool  prune = true 
)

Given two level set grids, replace the A grid with the union of A and B.

Exceptions
ValueErrorif the background value of either grid is not greater than zero.
Note
This operation always leaves the B grid empty.
GridOrTreeT::Ptr csgUnionCopy ( const GridOrTreeT &  a,
const GridOrTreeT &  b 
)

Threaded CSG union operation that produces a new grid or tree from immutable inputs.

Returns
The CSG union of the and level set inputs.
GridType::Ptr curl ( const GridType &  grid,
bool  threaded,
InterruptT *  interrupt 
)

Compute the curl of the given vector-valued grid.

Returns
a new vector-valued grid

When a mask grid is specified, the solution is calculated only in the intersection of the mask active topology and the input active topology independent of the transforms associated with either grid.

GridType::Ptr curl ( const GridType &  grid,
const MaskT &  mask,
bool  threaded,
InterruptT *  interrupt 
)
GridType::Ptr openvdb::v9_0::tools::curl ( const GridType &  grid,
bool  threaded = true 
)
GridType::Ptr openvdb::v9_0::tools::curl ( const GridType &  grid,
const MaskT &  mask,
bool  threaded = true 
)
void deactivate ( GridOrTree &  gridOrTree,
const typename GridOrTree::ValueType &  value,
const typename GridOrTree::ValueType &  tolerance = zeroVal<typename GridOrTree::ValueType>(),
const bool  threaded = true 
)

Mark as inactive any active tiles or voxels in the given grid or tree whose values are equal to value (optionally to within the given tolerance).

void dilateActiveValues ( TreeOrLeafManagerT &  tree,
const int  iterations = 1,
const NearestNeighbors  nn = NN_FACE,
const TilePolicy  mode = PRESERVE_TILES,
const bool  threaded = true 
)

Topologically dilate all active values (i.e. both voxels and tiles) in a tree using one of three nearest neighbor connectivity patterns.

If the input is not a MaskTree OR if tiles are being preserved, this algorithm will copy the input tree topology onto a MaskTree, performs the dilation on the mask and copies the resulting topology back. This algorithm guarantees topology preservation (non-pruned leaf nodes will persists) EXCEPT for direct MaskTree dilation. MaskTree dilation is optimised for performance and may replace existing leaf nodes i.e. any held leaf node pointers may become invalid. See the Morphology class for more granular control.

Note
This method is fully multi-threaded and support active tiles, however only the PRESERVE_TILES policy ensures a pruned topology. The values of any voxels are unchanged.
Parameters
treetree or leaf manager to be dilated. The leaf manager will be synchronized with the result.
iterationsnumber of iterations to apply the dilation
nnconnectivity pattern of the dilation: either face-adjacent (6 nearest neighbors), face- and edge-adjacent (18 nearest neighbors) or face-, edge- and vertex-adjacent (26 nearest neighbors).
modeDefined the policy for handling active tiles (see above for details)
threadedWhether to multi-thread execution
GridT::Ptr dilateSdf ( const GridT &  sdfGrid,
int  dilation,
NearestNeighbors  nn = NN_FACE,
int  nIter = 1,
FastSweepingDomain  mode = FastSweepingDomain::SWEEP_ALL 
)

Dilates the narrow band of an existing signed distance field by a specified number of voxels (like adding "onion-rings").

Note
This operation is not to be confused with morphological dilation of a level set, which is implemented in LevelSetFilter::offset, and involves actual interface tracking of the narrow band.
Returns
A shared pointer to the dilated signed distance field.
Parameters
sdfGridInput signed distance field to be dilated.
dilationNumer of voxels that the narrow band of the input SDF will be dilated.
nnStencil-pattern used for dilation
nIterNumber of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps.
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.

Topology will change as a result of this dilation. E.g. if sdfGrid has a width of 3 and dilation = 6 then the grid returned by this method is a narrow band signed distance field with a total width of 9 units.

void openvdb::v9_0::tools::dilateVoxels ( TreeType &  tree,
int  iterations = 1,
NearestNeighbors  nn = NN_FACE 
)
inline

Topologically dilate all leaf-level active voxels in a tree using one of three nearest neighbor connectivity patterns.

Warning
This method is NOT multi-threaded and ignores active tiles!
Parameters
treetree to be dilated
iterationsnumber of iterations to apply the dilation
nnconnectivity pattern of the dilation: either face-adjacent (6 nearest neighbors), face- and edge-adjacent (18 nearest neighbors) or face-, edge- and vertex-adjacent (26 nearest neighbors).
Note
The values of any voxels are unchanged.
Deprecated:
"Switch to tools::dilateActiveValues. Use tools::IGNORE_TILES to maintain same (but perhaps unintended) behaviour"
void openvdb::v9_0::tools::dilateVoxels ( tree::LeafManager< TreeType > &  manager,
int  iterations = 1,
NearestNeighbors  nn = NN_FACE 
)
inline

Topologically dilate all leaf-level active voxels in a tree using one of three nearest neighbor connectivity patterns.

Warning
This method is NOT multi-threaded and ignores active tiles!
Parameters
managerLeafManager containing the tree to be dilated. On exit it is updated to include all the leaf nodes of the dilated tree.
iterationsnumber of iterations to apply the dilation
nnconnectivity pattern of the dilation: either face-adjacent (6 nearest neighbors), face- and edge-adjacent (18 nearest neighbors) or face-, edge- and vertex-adjacent (26 nearest neighbors).
Note
The values of any voxels are unchanged.
Deprecated:
"Switch to tools::dilateActiveValues. Use tools::IGNORE_TILES to maintain same (but perhaps unintended) behaviour"
VectorToScalarConverter< GridType >::Type::Ptr divergence ( const GridType &  grid,
bool  threaded,
InterruptT *  interrupt 
)

Compute the divergence of the given vector-valued grid.

Returns
a new scalar-valued grid with the same numerical precision as the input grid (for example, if the input grid is a Vec3DGrid, the output grid will be a DoubleGrid)

When a mask grid is specified, the solution is calculated only in the intersection of the mask active topology and the input active topology independent of the transforms associated with either grid.

VectorToScalarConverter< GridType >::Type::Ptr divergence ( const GridType &  grid,
const MaskT &  mask,
bool  threaded,
InterruptT *  interrupt 
)
VectorToScalarConverter<GridType>::Type::Ptr openvdb::v9_0::tools::divergence ( const GridType &  grid,
bool  threaded = true 
)
VectorToScalarConverter<GridType>::Type::Ptr openvdb::v9_0::tools::divergence ( const GridType &  grid,
const MaskT &  mask,
bool  threaded = true 
)
void openvdb::v9_0::tools::doResampleToMatch ( const GridType &  inGrid,
GridType &  outGrid,
Interrupter &  interrupter 
)

The normal entry points for resampling are the resampleToMatch() functions, which correctly handle level set grids under scaling and shearing. doResampleToMatch() is mainly for internal use but is typically faster for level sets, and correct provided that no scaling or shearing is needed.

Warning
Do not use this function to scale or shear a level set grid.
void erodeActiveValues ( TreeOrLeafManagerT &  tree,
const int  iterations = 1,
const NearestNeighbors  nn = NN_FACE,
const TilePolicy  mode = PRESERVE_TILES,
const bool  threaded = true 
)

Topologically erode all active values (i.e. both voxels and tiles) in a tree using one of three nearest neighbor connectivity patterns.

If tiles are being preserve, this algorithm will copy the input tree topology onto a MaskTree, performs the erosion on the mask and intersects the resulting topology back. This algorithm guarantees topology preservation (non-pruned leaf nodes will persists). See the Morphology class for more granular control.

Note
This method is fully multi-threaded and support active tiles, however only the PRESERVE_TILES policy ensures a pruned topology. The values of any voxels are unchanged. Erosion by NN_FACE neighbors is usually faster than other neighbor schemes. NN_FACE_EDGE and NN_FACE_EDGE_VERTEX operate at comparable dilation speeds.
Parameters
treetree or leaf manager to be eroded. The leaf manager will be synchronized with the result.
iterationsnumber of iterations to apply the erosion
nnconnectivity pattern of the erosion: either face-adjacent (6 nearest neighbors), face- and edge-adjacent (18 nearest neighbors) or face-, edge- and vertex-adjacent (26 nearest neighbors).
modeDefined the policy for handling active tiles (see above for details)
threadedWhether to multi-thread execution
void openvdb::v9_0::tools::erodeVoxels ( TreeType &  tree,
int  iterations = 1,
NearestNeighbors  nn = NN_FACE 
)
inline

Topologically erode all leaf-level active voxels in the given tree.

That is, shrink the set of active voxels by iterations voxels in the +x, -x, +y, -y, +z and -z directions, but don't change the values of any voxels, only their active states.

Deprecated:
"Switch to tools::erodeActiveValues. Use tools::IGNORE_TILES to maintain same (but perhaps unintended) behaviour"
void openvdb::v9_0::tools::erodeVoxels ( tree::LeafManager< TreeType > &  manager,
int  iterations = 1,
NearestNeighbors  nn = NN_FACE 
)
inline
Deprecated:
"Switch to tools::erodeActiveValues. Use tools::IGNORE_TILES to maintain same (but perhaps unintended) behaviour"
void extractActiveVoxelSegmentMasks ( const GridOrTreeType &  volume,
std::vector< typename GridOrTreeType::template ValueConverter< bool >::Type::Ptr > &  masks 
)

Return a mask for each connected component of the given grid's active voxels.

Parameters
volumeInput grid or tree
masksOutput set of disjoint active topology masks sorted in descending order based on the active voxel count.
GridOrTreeType::template ValueConverter< bool >::Type::Ptr extractEnclosedRegion ( const GridOrTreeType &  volume,
typename GridOrTreeType::ValueType  isovalue = lsutilGridZero<GridOrTreeType>(),
const typename TreeAdapter< GridOrTreeType >::TreeType::template ValueConverter< bool >::Type *  fillMask = nullptr 
)

Extracts the interior regions of a signed distance field and topologically enclosed (watertight) regions of value greater than the isovalue (cavities) that can arise as the result of CSG union operations between different shapes where at least one of the shapes has a concavity that is capped.

For example the enclosed region of a capped bottle would include the walls and the interior cavity.

Returns
A shared pointer to either a boolean grid or tree with the same tree configuration and potentially transform as the input volume and whose active and true values correspond to the interior and enclosed regions in the input signed distance field.
Parameters
volumeSigned distance field / level set volume.
isovalueThreshold below which values are considered part of the interior region.
fillMaskOptional boolean tree, when provided enclosed cavity regions that are not completely filled by this mask are ignored.

For instance if the fill mask does not completely fill the bottle in the previous example only the walls and cap are returned and the interior cavity will be ignored.

GridOrTreeType::template ValueConverter< bool >::Type::Ptr extractIsosurfaceMask ( const GridOrTreeType &  volume,
typename GridOrTreeType::ValueType  isovalue 
)

Return a mask of the voxels that intersect the implicit surface with the given isovalue.

Parameters
volumeSigned distance field / level set volume.
isovalueThe crossing point that is considered the surface.
OpType::ResultTreeType::Ptr extractSparseTree ( const DenseType &  dense,
const OpType &  functor,
const typename OpType::ResultValueType &  background,
bool  threaded = true 
)

Selectively extract and transform data from a dense grid, producing a sparse tree with leaf nodes only (e.g. create a tree from the square of values greater than a cutoff.)

Parameters
denseA dense grid that acts as a data source
functorA functor that selects and transforms data for output
backgroundThe background value of the resulting sparse grid
threadedOption to use threaded or serial code path
Returns
Ptr to tree with the valuetype and configuration defined by typedefs in the functor.
Note
To achieve optimal sparsity consider calling the prune() method on the result.
To simply copy the all the data from a Dense grid to a OpenVDB Grid, use tools::copyFromDense() for better performance.

The type of the sparse tree is determined by the specified OtpType functor by means of the typedef OptType::ResultTreeType

The OptType function is responsible for the the transformation of dense grid data to sparse grid data on a per-voxel basis.

Only leaf nodes with active values will be added to the sparse grid.

The OpType must struct that defines a the minimal form

struct ExampleOp
{
using ResultTreeType = DesiredTreeType;
template<typename IndexOrCoord>
void OpType::operator() (const DenseValueType a, const IndexOrCoord& ijk,
ResultTreeType::LeafNodeType* leaf);
};

For example, to generate a <ValueType, 5, 4, 3> tree with valuesOn at locations greater than a given maskvalue

template<typename ValueType>
class Rule
{
public:
// Standard tree type (e.g. MaskTree or FloatTree in openvdb.h)
using ResultTreeType = typename openvdb::tree::Tree4<ValueType, 5, 4, 3>::Type;
using ResultLeafNodeType = typename ResultTreeType::LeafNodeType;
using ResultValueType = typename ResultTreeType::ValueType;
using DenseValueType = float;
using Index = openvdb::Coord::ValueType;
Rule(const DenseValueType& value): mMaskValue(value){};
template<typename IndexOrCoord>
void operator()(const DenseValueType& a, const IndexOrCoord& offset,
ResultLeafNodeType* leaf) const
{
if (a > mMaskValue) {
leaf->setValueOn(offset, a);
}
}
private:
const DenseValueType mMaskValue;
};
DSConverter< DenseType, MaskTreeType >::Type::Ptr extractSparseTreeWithMask ( const DenseType &  dense,
const MaskTreeType &  mask,
const typename DenseType::ValueType &  background,
bool  threaded = true 
)

Copy data from the intersection of a sparse tree and a dense input grid. The resulting tree has the same configuration as the sparse tree, but holds the data type specified by the dense input.

Parameters
denseA dense grid that acts as a data source
maskThe active voxels and tiles intersected with dense define iteration mask
backgroundThe background value of the resulting sparse grid
threadedOption to use threaded or serial code path
Returns
Ptr to tree with the same configuration as mask but of value type defined by dense.
math::Extrema extrema ( const IterT &  iter,
bool  threaded = true 
)
inline

Iterate over a scalar grid and compute extrema (min/max) of the values of the voxels that are visited, or iterate over a vector-valued grid and compute extrema of the magnitudes of the vectors.

Parameters
iteran iterator over the values of a grid or its tree (Grid::ValueOnCIter, Tree::ValueOffIter, etc.)
threadedif true, iterate over the grid in parallel
math::Extrema extrema ( const IterT &  iter,
const ValueOp &  op,
bool  threaded 
)
inline

Iterate over a grid and compute extrema (min/max) of the values produced by applying the given functor at each voxel that is visited.

Parameters
iteran iterator over the values of a grid or its tree (Grid::ValueOnCIter, Tree::ValueOffIter, etc.)
opa functor of the form void op(const IterT&, math::Stats&), where IterT is the type of iter, that inserts zero or more floating-point values into the provided math::Stats object
threadedif true, iterate over the grid in parallel
Note
When threaded is true, each thread gets its own copy of the functor.
Example:
Compute statistics of just the active and positive-valued voxels of a scalar, floating-point grid.
struct Local {
static inline
void addIfPositive(const FloatGrid::ValueOnCIter& iter, math::Extrema& ex)
{
const float f = *iter;
if (f > 0.0) {
if (iter.isVoxelValue()) ex.add(f);
else ex.add(f, iter.getVoxelCount());
}
}
};
FloatGrid grid = ...;
math::Extrema stats =
tools::extrema(grid.cbeginValueOn(), Local::addIfPositive, /*threaded=*/true);
void fillWithSpheres ( const GridT &  grid,
std::vector< openvdb::Vec4s > &  spheres,
const Vec2i &  sphereCount = Vec2i(1, 50),
bool  overlapping = false,
float  minRadius = 1.0,
float  maxRadius = std::numeric_limits<float>::max(),
float  isovalue = 0.0,
int  instanceCount = 10000,
InterrupterT *  interrupter = nullptr 
)

Fill a closed level set or fog volume with adaptively-sized spheres.

Parameters
grida scalar grid that defines the surface to be filled with spheres
spheresan output array of 4-tuples representing the fitted spheres
The first three components of each tuple specify the sphere center, and the fourth specifies the radius. The spheres are ordered by radius, from largest to smallest.
sphereCountlower and upper bounds on the number of spheres to be generated
The actual number will be somewhere within the bounds.
overlappingtoggle to allow spheres to overlap/intersect
minRadiusthe smallest allowable sphere size, in voxel units
maxRadiusthe largest allowable sphere size, in voxel units
isovaluethe voxel value that determines the surface of the volume
The default value of zero works for signed distance fields, while fog volumes require a larger positive value (0.5 is a good initial guess).
instanceCountthe number of interior points to consider for the sphere placement
Increasing this count increases the chances of finding optimal sphere sizes.
interrupterpointer to an object adhering to the util::NullInterrupter interface
Note
The minimum sphere count takes precedence over the minimum radius.
Vec3d openvdb::v9_0::tools::findFeaturePoint ( const std::vector< Vec3d > &  points,
const std::vector< Vec3d > &  normals 
)
inline

Given a set of tangent elements, points with corresponding normals, this method returns the intersection point of all tangent elements.

Note
Used to extract surfaces with sharp edges and corners from volume data, see the following paper for details: "Feature Sensitive Surface Extraction from Volume Data, Kobbelt et al. 2001".
FogGridT::template ValueConverter< ExtValueT >::Type::Ptr fogToExt ( const FogGridT &  fogGrid,
const ExtOpT &  op,
const ExtValueT &  background,
typename FogGridT::ValueType  isoValue,
int  nIter = 1,
FastSweepingDomain  mode = FastSweepingDomain::SWEEP_ALL,
const typename FogGridT::template ValueConverter< ExtValueT >::Type::ConstPtr  extGrid = nullptr 
)

Computes the extension of a field (scalar, vector, or int are supported), defined by the specified functor, off an iso-surface from an input FOG volume.

Returns
A shared pointer to the extension field defined from the active values in the input fog volume.
Parameters
fogGridScalar (floating-point) volume from which an iso-surface can be defined.
opFunctor with signature [](const Vec3R &xyz)->ExtValueT that defines the Dirichlet boundary condition, on the iso-surface, of the field to be extended.
backgroundBackground value of return grid with the extension field.
isoValueA value which defines a smooth iso-surface that intersects active voxels in fogGrid.
nIterNumber of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps.
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 fog 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.
Note
Strictly speaking a fog volume is normalized to the range [0,1] but this method accepts a scalar volume with an arbritary range, as long as the it includes the isoValue.

Topology of output grid is identical to that of the input grid, except active tiles in the input grid will be converted to active voxels in the output grid!

Warning
If isoValue does not intersect any active values in fogGrid then the returned grid has all its active values set to background.
GridT::Ptr fogToSdf ( const GridT &  fogGrid,
typename GridT::ValueType  isoValue,
int  nIter = 1 
)

Converts a scalar fog volume into a signed distance function. Active input voxels with scalar values above the given isoValue will have NEGATIVE distance values on output, i.e. they are assumed to be INSIDE the iso-surface.

Returns
A shared pointer to a signed-distance field defined on the active values of the input fog volume.
Parameters
fogGridScalar (floating-point) volume from which an iso-surface can be defined.
isoValueA value which defines a smooth iso-surface that intersects active voxels in fogGrid.
nIterNumber of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps.
Note
Strictly speaking a fog volume is normalized to the range [0,1] but this method accepts a scalar volume with an arbritary range, as long as the it includes the isoValue.

Topology of output grid is identical to that of the input grid, except active tiles in the input grid will be converted to active voxels in the output grid!

Warning
If isoValue does not intersect any active values in fogGrid then the returned grid has all its active values set to plus or minus infinity, depending on if the input values are larger or smaller than isoValue.
std::pair< typename FogGridT::Ptr, typename FogGridT::template ValueConverter< ExtValueT >::Type::Ptr > fogToSdfAndExt ( const FogGridT &  fogGrid,
const ExtOpT &  op,
const ExtValueT &  background,
typename FogGridT::ValueType  isoValue,
int  nIter = 1,
FastSweepingDomain  mode = FastSweepingDomain::SWEEP_ALL,
const typename FogGridT::template ValueConverter< ExtValueT >::Type::ConstPtr  extGrid = nullptr 
)

Computes the signed distance field and the extension of a field (scalar, vector, or int are supported), defined by the specified functor, off an iso-surface from an input FOG volume.

Returns
An pair of two shared pointers to respectively the SDF and extension field
Parameters
fogGridScalar (floating-point) volume from which an iso-surface can be defined.
opFunctor with signature [](const Vec3R &xyz)->ExtValueT that defines the Dirichlet boundary condition, on the iso-surface, of the field to be extended.
backgroundBackground value of return grid with the extension field.
isoValueA value which defines a smooth iso-surface that intersects active voxels in fogGrid.
nIterNumber of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps.
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 fog 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.
Note
Strictly speaking a fog volume is normalized to the range [0,1] but this method accepts a scalar volume with an arbritary range, as long as the it includes the isoValue.

Topology of output grids are identical to that of the input grid, except active tiles in the input grid will be converted to active voxels in the output grids!

Warning
If isoValue does not intersect any active values in fogGrid then a pair of the following grids is returned: The first is a signed distance grid with its active values set to plus or minus infinity depending of whether its input values are above or below isoValue. The second grid, which represents the extension field, has all its active values set to background.
void foreach ( const IterT &  iter,
XformOp &  op,
bool  threaded = true,
bool  shareOp = true 
)
inline

Iterate over a grid and at each step call op(iter).

Parameters
iteran iterator over a grid or its tree (Grid::ValueOnCIter, Tree::NodeIter, etc.)
opa functor of the form void op(const IterT&), where IterT is the type of iter
threadedif true, transform multiple values of the grid in parallel
shareOpif true and threaded is true, all threads use the same functor; otherwise, each thread gets its own copy of the original functor
Example:
Multiply all values (both set and unset) of a scalar, floating-point grid by two.
struct Local {
static inline void op(const FloatGrid::ValueAllIter& iter) {
iter.setValue(*iter * 2);
}
};
FloatGrid grid = ...;
tools::foreach(grid.beginValueAll(), Local::op);
Example:
Rotate all active vectors of a vector grid by 45 degrees about the y axis.
namespace {
struct MatMul {
MatMul(const math::Mat3s& mat): M(mat) {}
inline void operator()(const VectorGrid::ValueOnIter& iter) const {
iter.setValue(M.transform(*iter));
}
};
}
{
VectorGrid grid = ...;
tools::foreach(grid.beginValueOn(),
MatMul(math::rotation<math::Mat3s>(math::Y, M_PI_4)));
}
Note
For more complex operations that require finer control over threading, consider using tbb::parallel_for() or tbb::parallel_reduce() in conjunction with a tree::IteratorRange that wraps a grid or tree iterator.
void foreach ( const IterT &  iter,
const XformOp &  op,
bool  threaded = true,
bool  shareOp = true 
)
inline
GridT::ConstPtr getValidPointIndexGrid ( const PointArrayT &  points,
const typename GridT::ConstPtr &  grid 
)
inline

Repartition the points if needed, otherwise return the input grid.

GridT::Ptr getValidPointIndexGrid ( const PointArrayT &  points,
const typename GridT::Ptr &  grid 
)
inline

Repartition the points if needed, otherwise return the input grid.

ScalarToVectorConverter< GridType >::Type::Ptr gradient ( const GridType &  grid,
bool  threaded,
InterruptT *  interrupt 
)

Compute the gradient of the given scalar grid.

Returns
a new vector-valued grid with the same numerical precision as the input grid (for example, if the input grid is a DoubleGrid, the output grid will be a Vec3DGrid)

When a mask grid is specified, the solution is calculated only in the intersection of the mask active topology and the input active topology independent of the transforms associated with either grid.

ScalarToVectorConverter< GridType >::Type::Ptr gradient ( const GridType &  grid,
const MaskT &  mask,
bool  threaded,
InterruptT *  interrupt 
)
ScalarToVectorConverter<GridType>::Type::Ptr openvdb::v9_0::tools::gradient ( const GridType &  grid,
bool  threaded = true 
)
ScalarToVectorConverter<GridType>::Type::Ptr openvdb::v9_0::tools::gradient ( const GridType &  grid,
const MaskT &  mask,
bool  threaded = true 
)
math::Histogram histogram ( const IterT &  iter,
double  minVal,
double  maxVal,
size_t  numBins = 10,
bool  threaded = true 
)
inline

Iterate over a scalar grid and compute a histogram of the values of the voxels that are visited, or iterate over a vector-valued grid and compute a histogram of the magnitudes of the vectors.

Parameters
iteran iterator over the values of a grid or its tree (Grid::ValueOnCIter, Tree::ValueOffIter, etc.)
minValthe smallest value that can be added to the histogram
maxValthe largest value that can be added to the histogram
numBinsthe number of histogram bins
threadedif true, iterate over the grid in parallel
GridType::template ValueConverter< bool >::Type::Ptr interiorMask ( const GridType &  grid,
const double  isovalue = 0.0 
)

Given an input grid of any type, return a new, boolean grid whose active voxel topology matches the input grid's or, if the input grid is a level set, matches the input grid's interior.

Parameters
gridthe grid from which to construct a mask
isovaluefor a level set grid, the isovalue that defines the grid's interior
See also
tools::sdfInteriorMask()
bool isValidPartition ( const PointArrayT &  points,
const GridT &  grid 
)
inline

Return true if the given point index grid represents a valid partitioning of the given point array.

Parameters
pointsworld-space point array conforming to the PointArray interface
gridpoint index grid to validate
GridType::Ptr laplacian ( const GridType &  grid,
bool  threaded,
InterruptT *  interrupt 
)

Compute the Laplacian of the given scalar grid.

Returns
a new scalar grid

When a mask grid is specified, the solution is calculated only in the intersection of the mask active topology and the input active topology independent of the transforms associated with either grid.

GridType::Ptr laplacian ( const GridType &  grid,
const MaskT &  mask,
bool  threaded,
InterruptT *  interrupt 
)
GridType::Ptr openvdb::v9_0::tools::laplacian ( const GridType &  grid,
bool  threaded = true 
)
GridType::Ptr openvdb::v9_0::tools::laplacian ( const GridType &  grid,
const MaskT &  mask,
bool  threaded = true 
)
Real openvdb::v9_0::tools::levelSetArea ( const GridType &  grid,
bool  useWorldSpace = true 
)

Return the surface area of a narrow-band level set.

Parameters
grida scalar, floating-point grid with one or more disjoint, closed level set surfaces
useWorldSpaceif true the area is computed in world space units, else in voxel units.
Exceptions
TypeErrorif grid is not scalar or not floating-point or not a level set or empty.
Real openvdb::v9_0::tools::levelSetArea ( const GridT &  grid,
bool  useWorldUnits 
)
int openvdb::v9_0::tools::levelSetEulerCharacteristic ( const GridType &  grid)

Return the Euler Characteristics of a narrow-band level set surface (possibly disconnected).

Parameters
grida scalar, floating-point grid with one or more disjoint, closed level set surfaces
Exceptions
TypeErrorif grid is not scalar or not floating-point or not a level set or empty.
int openvdb::v9_0::tools::levelSetEulerCharacteristic ( const GridT &  grid)
int openvdb::v9_0::tools::levelSetGenus ( const GridType &  grid)

Return the genus of a narrow-band level set surface.

Parameters
grida scalar, floating-point grid with one or more disjoint, closed level set surfaces
Warning
The genus is only well defined for a single connected surface
Exceptions
TypeErrorif grid is not scalar or not floating-point or not a level set or empty.
int openvdb::v9_0::tools::levelSetGenus ( const GridT &  grid)
GridType::Ptr levelSetRebuild ( const GridType &  grid,
float  isovalue = 0,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH),
const math::Transform xform = nullptr 
)

Return a new grid of type GridType that contains a narrow-band level set representation of an isosurface of a given grid.

Parameters
grida scalar, floating-point grid with one or more disjoint, closed isosurfaces at the given isovalue
isovaluethe isovalue that defines the implicit surface (defaults to zero, which is typical if the input grid is already a level set or a SDF).
halfWidthhalf the width of the narrow band, in voxel units (defaults to 3 voxels, which is required for some level set operations)
xformoptional transform for the output grid (if not provided, the transform of the input grid will be matched)
Exceptions
TypeErrorif grid is not scalar or not floating-point
Note
If the input grid contains overlapping isosurfaces, interior edges will be lost.
GridType::Ptr levelSetRebuild ( const GridType &  grid,
float  isovalue,
float  exBandWidth,
float  inBandWidth,
const math::Transform xform = nullptr 
)

Return a new grid of type GridType that contains a narrow-band level set representation of an isosurface of a given grid.

Parameters
grida scalar, floating-point grid with one or more disjoint, closed isosurfaces at the given isovalue
isovaluethe isovalue that defines the implicit surface
exBandWidththe exterior narrow-band width in voxel units
inBandWidththe interior narrow-band width in voxel units
xformoptional transform for the output grid (if not provided, the transform of the input grid will be matched)
Exceptions
TypeErrorif grid is not scalar or not floating-point
Note
If the input grid contains overlapping isosurfaces, interior edges will be lost.
GridType::Ptr levelSetRebuild ( const GridType &  grid,
float  isovalue,
float  exBandWidth,
float  inBandWidth,
const math::Transform xform = nullptr,
InterruptT *  interrupter = nullptr 
)

Return a new grid of type GridType that contains a narrow-band level set representation of an isosurface of a given grid.

Parameters
grida scalar, floating-point grid with one or more disjoint, closed isosurfaces at the given isovalue
isovaluethe isovalue that defines the implicit surface
exBandWidththe exterior narrow-band width in voxel units
inBandWidththe interior narrow-band width in voxel units
xformoptional transform for the output grid (if not provided, the transform of the input grid will be matched)
interrupteroptional interrupter object
Exceptions
TypeErrorif grid is not scalar or not floating-point
Note
If the input grid contains overlapping isosurfaces, interior edges will be lost.
Real openvdb::v9_0::tools::levelSetVolume ( const GridType &  grid,
bool  useWorldSpace = true 
)

Return the volume of a narrow-band level set surface.

Parameters
grida scalar, floating-point grid with one or more disjoint, closed level set surfaces
useWorldSpaceif true the volume is computed in world space units, else in voxel units.
Exceptions
TypeErrorif grid is not scalar or not floating-point or not a level set or empty.
Real openvdb::v9_0::tools::levelSetVolume ( const GridT &  grid,
bool  useWorldUnits 
)
VectorToScalarConverter< GridType >::Type::Ptr magnitude ( const GridType &  grid,
bool  threaded,
InterruptT *  interrupt 
)

Compute the magnitudes of the vectors of the given vector-valued grid.

Returns
a new scalar-valued grid with the same numerical precision as the input grid (for example, if the input grid is a Vec3DGrid, the output grid will be a DoubleGrid)

When a mask grid is specified, the solution is calculated only in the intersection of the mask active topology and the input active topology independent of the transforms associated with either grid.

VectorToScalarConverter< GridType >::Type::Ptr magnitude ( const GridType &  grid,
const MaskT &  mask,
bool  threaded,
InterruptT *  interrupt 
)
VectorToScalarConverter<GridType>::Type::Ptr openvdb::v9_0::tools::magnitude ( const GridType &  grid,
bool  threaded = true 
)
VectorToScalarConverter<GridType>::Type::Ptr openvdb::v9_0::tools::magnitude ( const GridType &  grid,
const MaskT &  mask,
bool  threaded = true 
)
void openvdb::v9_0::tools::maskPoints ( const PointListT &  points,
GridT &  grid 
)
inline

Makes every voxel of the grid active if it contains a point.

Parameters
pointspoints that active the voxels of grid
gridon out its voxels with points are active
GridT::Ptr maskSdf ( const GridT &  sdfGrid,
const Grid< MaskTreeT > &  mask,
bool  ignoreActiveTiles = false,
int  nIter = 1 
)

Fills mask by extending an existing signed distance field into the active values of this input ree of arbitrary value type.

Returns
A shared pointer to the masked signed distance field.
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.
nIterNumber of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps.

Topology of the output SDF is determined by the union of the active voxels (or optionally values) in sdfGrid and mask.

GridType::Ptr meanCurvature ( const GridType &  grid,
bool  threaded,
InterruptT *  interrupt 
)

Compute the mean curvature of the given grid.

Returns
a new grid

When a mask grid is specified, the solution is calculated only in the intersection of the mask active topology and the input active topology independent of the transforms associated with either grid.

GridType::Ptr meanCurvature ( const GridType &  grid,
const MaskT &  mask,
bool  threaded,
InterruptT *  interrupt 
)
GridType::Ptr openvdb::v9_0::tools::meanCurvature ( const GridType &  grid,
bool  threaded = true 
)
GridType::Ptr openvdb::v9_0::tools::meanCurvature ( const GridType &  grid,
const MaskT &  mask,
bool  threaded = true 
)
Index64 memUsage ( const TreeT &  tree,
bool  threaded = true 
)

Return the total amount of memory in bytes occupied by this tree.

GridType::Ptr meshToLevelSet ( const openvdb::math::Transform &  xform,
const std::vector< Vec3s > &  points,
const std::vector< Vec3I > &  triangles,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH) 
)

Convert a triangle mesh to a level set volume.

Returns
a grid of type GridType containing a narrow-band level set representation of the input mesh.
Exceptions
TypeErrorif GridType is not scalar or not floating-point
Note
Requires a closed surface but not necessarily a manifold surface. Supports surfaces with self intersections and degenerate faces and is independent of mesh surface normals.
Parameters
xformtransform for the output grid
pointslist of world space point positions
trianglestriangle index list
halfWidthhalf the width of the narrow band, in voxel units
GridType::Ptr meshToLevelSet ( Interrupter &  interrupter,
const openvdb::math::Transform &  xform,
const std::vector< Vec3s > &  points,
const std::vector< Vec3I > &  triangles,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH) 
)

Adds support for a interrupter callback used to cancel the conversion.

GridType::Ptr meshToLevelSet ( const openvdb::math::Transform &  xform,
const std::vector< Vec3s > &  points,
const std::vector< Vec4I > &  quads,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH) 
)

Convert a quad mesh to a level set volume.

Returns
a grid of type GridType containing a narrow-band level set representation of the input mesh.
Exceptions
TypeErrorif GridType is not scalar or not floating-point
Note
Requires a closed surface but not necessarily a manifold surface. Supports surfaces with self intersections and degenerate faces and is independent of mesh surface normals.
Parameters
xformtransform for the output grid
pointslist of world space point positions
quadsquad index list
halfWidthhalf the width of the narrow band, in voxel units
GridType::Ptr meshToLevelSet ( Interrupter &  interrupter,
const openvdb::math::Transform &  xform,
const std::vector< Vec3s > &  points,
const std::vector< Vec4I > &  quads,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH) 
)

Adds support for a interrupter callback used to cancel the conversion.

GridType::Ptr meshToLevelSet ( const openvdb::math::Transform &  xform,
const std::vector< Vec3s > &  points,
const std::vector< Vec3I > &  triangles,
const std::vector< Vec4I > &  quads,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH) 
)

Convert a triangle and quad mesh to a level set volume.

Returns
a grid of type GridType containing a narrow-band level set representation of the input mesh.
Exceptions
TypeErrorif GridType is not scalar or not floating-point
Note
Requires a closed surface but not necessarily a manifold surface. Supports surfaces with self intersections and degenerate faces and is independent of mesh surface normals.
Parameters
xformtransform for the output grid
pointslist of world space point positions
trianglestriangle index list
quadsquad index list
halfWidthhalf the width of the narrow band, in voxel units
GridType::Ptr meshToLevelSet ( Interrupter &  interrupter,
const openvdb::math::Transform &  xform,
const std::vector< Vec3s > &  points,
const std::vector< Vec3I > &  triangles,
const std::vector< Vec4I > &  quads,
float  halfWidth = float(LEVEL_SET_HALF_WIDTH) 
)

Adds support for a interrupter callback used to cancel the conversion.

GridType::Ptr meshToSignedDistanceField ( const openvdb::math::Transform &  xform,
const std::vector< Vec3s > &  points,
const std::vector< Vec3I > &  triangles,
const std::vector< Vec4I > &  quads,
float  exBandWidth,
float  inBandWidth 
)

Convert a triangle and quad mesh to a signed distance field with an asymmetrical narrow band.

Returns
a grid of type GridType containing a narrow-band signed distance field representation of the input mesh.
Exceptions
TypeErrorif GridType is not scalar or not floating-point
Note
Requires a closed surface but not necessarily a manifold surface. Supports surfaces with self intersections and degenerate faces and is independent of mesh surface normals.
Parameters
xformtransform for the output grid
pointslist of world space point positions
trianglestriangle index list
quadsquad index list
exBandWidththe exterior narrow-band width in voxel units
inBandWidththe interior narrow-band width in voxel units
GridType::Ptr meshToSignedDistanceField ( Interrupter &  interrupter,
const openvdb::math::Transform &  xform,
const std::vector< Vec3s > &  points,
const std::vector< Vec3I > &  triangles,
const std::vector< Vec4I > &  quads,
float  exBandWidth,
float  inBandWidth 
)

Adds support for a interrupter callback used to cancel the conversion.

GridType::Ptr meshToUnsignedDistanceField ( const openvdb::math::Transform &  xform,
const std::vector< Vec3s > &  points,
const std::vector< Vec3I > &  triangles,
const std::vector< Vec4I > &  quads,
float  bandWidth 
)

Convert a triangle and quad mesh to an unsigned distance field.

Returns
a grid of type GridType containing a narrow-band unsigned distance field representation of the input mesh.
Exceptions
TypeErrorif GridType is not scalar or not floating-point
Note
Does not requires a closed surface.
Parameters
xformtransform for the output grid
pointslist of world space point positions
trianglestriangle index list
quadsquad index list
bandWidththe width of the narrow band, in voxel units
GridType::Ptr meshToUnsignedDistanceField ( Interrupter &  interrupter,
const openvdb::math::Transform &  xform,
const std::vector< Vec3s > &  points,
const std::vector< Vec3I > &  triangles,
const std::vector< Vec4I > &  quads,
float  bandWidth 
)

Adds support for a interrupter callback used to cancel the conversion.

GridType::Ptr meshToVolume ( const MeshDataAdapter mesh,
const math::Transform transform,
float  exteriorBandWidth = 3.0f,
float  interiorBandWidth = 3.0f,
int  flags = 0,
typename GridType::template ValueConverter< Int32 >::Type *  polygonIndexGrid = nullptr 
)
GridType::Ptr meshToVolume ( Interrupter &  interrupter,
const MeshDataAdapter mesh,
const math::Transform transform,
float  exteriorBandWidth = 3.0f,
float  interiorBandWidth = 3.0f,
int  flags = 0,
typename GridType::template ValueConverter< Int32 >::Type *  polygonIndexGrid = nullptr 
)

Convert polygonal meshes that consist of quads and/or triangles into signed or unsigned distance field volumes.

Parameters
interruptera callback to interrupt the conversion process that conforms to the util::NullInterrupter interface
meshmesh data access class that conforms to the MeshDataAdapter interface
transformworld-to-index-space transform
exteriorBandWidthexterior narrow band width in voxel units
interiorBandWidthinterior narrow band width in voxel units (set this value to std::numeric_limits<float>::max() to fill interior regions with distance values)
flagsoptional conversion flags defined in MeshToVolumeFlags
polygonIndexGridoptional grid output that will contain the closest-polygon index for each voxel in the active narrow band region
bool noActiveValues ( const TreeT &  tree,
const CoordBBox &  bbox 
)

Returns true if the bounding box intersects none of the active values in a tree, i.e. neither active voxels or active tiles.

Warning
For repeated calls to this method consider instead creating an instance of FindActiveValues and then repeatedly call noActiveValues(). This assumes the tree to be constant between calls but is slightly faster.
Parameters
treeconst tree to be tested for active values.
bboxindex bounding box which is intersected against the active values.
GridType::Ptr normalize ( const GridType &  grid,
bool  threaded,
InterruptT *  interrupt 
)

Normalize the vectors of the given vector-valued grid.

Returns
a new vector-valued grid

When a mask grid is specified, the solution is calculated only in the intersection of the mask active topology and the input active topology independent of the transforms associated with either grid.

GridType::Ptr normalize ( const GridType &  grid,
const MaskT &  mask,
bool  threaded,
InterruptT *  interrupt 
)
GridType::Ptr openvdb::v9_0::tools::normalize ( const GridType &  grid,
bool  threaded = true 
)
GridType::Ptr openvdb::v9_0::tools::normalize ( const GridType &  grid,
const MaskT &  mask,
bool  threaded = true 
)
std::ostream& openvdb::v9_0::tools::operator<< ( std::ostream &  ostr,
const MeshToVoxelEdgeData::EdgeData rhs 
)
inline
math::Extrema opExtrema ( const IterT &  iter,
const OperatorT &  op = OperatorT(),
bool  threaded = true 
)
inline

Same as opStatistics except it returns a math::Extrema vs a math::Stats.

math::Stats opStatistics ( const IterT &  iter,
const OperatorT &  op = OperatorT(),
bool  threaded = true 
)
inline

Iterate over a grid and compute statistics (mean, variance, etc.) of the values produced by applying a given operator (see math/Operators.h) at each voxel that is visited.

Parameters
iteran iterator over the values of a grid or its tree (Grid::ValueOnCIter, Tree::ValueOffIter, etc.)
opan operator object with a method of the form double result(Accessor&, const Coord&)
threadedif true, iterate over the grid in parallel
Note
World-space operators, whose result() methods are of the form double result(const Map&, Accessor&, const Coord&), must be wrapped in a math::MapAdapter.
Vector-valued operators like math::Gradient must be wrapped in an adapter such as math::OpMagnitude.
Example:
Compute statistics of the magnitude of the gradient at the active voxels of a scalar, floating-point grid. (Note the use of the math::MapAdapter and math::OpMagnitude adapters.)
FloatGrid grid = ...;
// Assume that we know that the grid has a uniform scale map.
using MapType = math::UniformScaleMap;
// Specify a world-space gradient operator that uses first-order differencing.
using GradientOp = math::Gradient<MapType, math::FD_1ST>;
// Wrap the operator with an adapter that computes the magnitude of the gradient.
using MagnitudeOp = math::OpMagnitude<GradientOp, MapType>;
// Wrap the operator with an adapter that associates a map with it.
using CompoundOp = math::MapAdapter<MapType, GradientOp, double>;
if (MapType::Ptr map = grid.constTransform().constMap<MapType>()) {
math::Stats stats = tools::opStatistics(grid.cbeginValueOn(), CompoundOp(*map));
}
Example:
Compute statistics of the divergence at the active voxels of a vector-valued grid.
Vec3SGrid grid = ...;
// Assume that we know that the grid has a uniform scale map.
using MapType = math::UniformScaleMap;
// Specify a world-space divergence operator that uses first-order differencing.
using DivergenceOp = math::Divergence<MapType, math::FD_1ST>;
// Wrap the operator with an adapter that associates a map with it.
using CompoundOp = math::MapAdapter<MapType, DivergenceOp, double>;
if (MapType::Ptr map = grid.constTransform().constMap<MapType>()) {
math::Stats stats = tools::opStatistics(grid.cbeginValueOn(), CompoundOp(*map));
}
Example:
As above, but computing the divergence in index space.
Vec3SGrid grid = ...;
// Specify an index-space divergence operator that uses first-order differencing.
using DivergenceOp = math::ISDivergence<math::FD_1ST>;
math::Stats stats = tools::opStatistics(grid.cbeginValueOn(), DivergenceOp());
void particlesToMask ( const ParticleListT &  plist,
GridT &  grid,
InterrupterT *  interrupt = nullptr 
)
inline

Activate a boolean grid wherever it intersects the spheres described by the given particle positions and radii.

For more control over the output, including attribute transfer, use the ParticlesToLevelSet class directly.

void particlesToMask ( const ParticleListT &  plist,
GridT &  grid,
Real  radius,
InterrupterT *  interrupt = nullptr 
)
inline

Activate a boolean grid wherever it intersects the fixed-size spheres described by the given particle positions and the specified radius.

For more control over the output, including attribute transfer, use the ParticlesToLevelSet class directly.

void particlesToSdf ( const ParticleListT &  plist,
GridT &  grid,
InterrupterT *  interrupt = nullptr 
)
inline

Populate a scalar, floating-point grid with CSG-unioned level set spheres described by the given particle positions and radii.

For more control over the output, including attribute transfer, use the ParticlesToLevelSet class directly.

void particlesToSdf ( const ParticleListT &  plist,
GridT &  grid,
Real  radius,
InterrupterT *  interrupt = nullptr 
)
inline

Populate a scalar, floating-point grid with fixed-size, CSG-unioned level set spheres described by the given particle positions and the specified radius.

For more control over the output, including attribute transfer, use the ParticlesToLevelSet class directly.

void particleTrailsToMask ( const ParticleListT &  plist,
GridT &  grid,
Real  delta = 1,
InterrupterT *  interrupt = nullptr 
)
inline

Activate a boolean grid wherever it intersects trails of spheres with decreasing radius, where the starting position and radius and the direction of each trail is given by particle attributes.

For more control over the output, including attribute transfer, use the ParticlesToLevelSet class directly.

Note
The delta parameter controls the distance between spheres in a trail. Be careful not to use too small a value.
void particleTrailsToSdf ( const ParticleListT &  plist,
GridT &  grid,
Real  delta = 1,
InterrupterT *  interrupt = nullptr 
)
inline

Populate a scalar, floating-point grid with CSG-unioned trails of level set spheres with decreasing radius, where the starting position and radius and the direction of each trail is given by particle attributes.

For more control over the output, including attribute transfer, use the ParticlesToLevelSet class directly.

Note
The delta parameter controls the distance between spheres in a trail. Be careful not to use too small a value.
void prune ( TreeT &  tree,
typename TreeT::ValueType  tolerance = zeroVal<typename TreeT::ValueType>(),
bool  threaded = true,
size_t  grainSize = 1 
)

Reduce the memory footprint of a tree by replacing with tiles any nodes whose values are all the same (optionally to within a tolerance) and have the same active state.

Note
For trees with non-boolean values a child node with (approximately) constant values are replaced with a tile value corresponding to the median of the values in said child node.
Parameters
treethe tree to be pruned
tolerancetolerance within which values are considered to be equal
threadedenable or disable threading (threading is enabled by default)
grainSizeused to control the threading granularity (default is 1)
void pruneInactive ( TreeT &  tree,
bool  threaded = true,
size_t  grainSize = 1 
)

Reduce the memory footprint of a tree by replacing with background tiles any nodes whose values are all inactive.

Parameters
treethe tree to be pruned
threadedenable or disable threading (threading is enabled by default)
grainSizeused to control the threading granularity (default is 1)
void pruneInactiveWithValue ( TreeT &  tree,
const typename TreeT::ValueType &  value,
bool  threaded = true,
size_t  grainSize = 1 
)

Reduce the memory footprint of a tree by replacing any nodes whose values are all inactive with tiles of the given value.

Parameters
treethe tree to be pruned
valuevalue assigned to inactive tiles created during pruning
threadedenable or disable threading (threading is enabled by default)
grainSizeused to control the threading granularity (default is 1)
void pruneLevelSet ( TreeT &  tree,
bool  threaded = true,
size_t  grainSize = 1 
)

Reduce the memory footprint of a tree by replacing nodes whose values are all inactive with inactive tiles having a value equal to the first value encountered in the (inactive) child.

This method is faster than tolerance-based prune and useful for narrow-band level set applications where inactive values are limited to either an inside or an outside value.

Parameters
treethe tree to be pruned
threadedenable or disable threading (threading is enabled by default)
grainSizeused to control the threading granularity (default is 1)
Exceptions
ValueErrorif the background of the tree is negative (as defined by math::isNegative)
void pruneLevelSet ( TreeT &  tree,
const typename TreeT::ValueType &  outsideWidth,
const typename TreeT::ValueType &  insideWidth,
bool  threaded = true,
size_t  grainSize = 1 
)

Reduce the memory footprint of a tree by replacing nodes whose voxel values are all inactive with inactive tiles having the value -| insideWidth | if the voxel values are negative and | outsideWidth | otherwise.

This method is faster than tolerance-based prune and useful for narrow-band level set applications where inactive values are limited to either an inside or an outside value.

Parameters
treethe tree to be pruned
outsideWidththe width of the outside of the narrow band
insideWidththe width of the inside of the narrow band
threadedenable or disable threading (threading is enabled by default)
grainSizeused to control the threading granularity (default is 1)
Exceptions
ValueErrorif outsideWidth is negative or insideWidth is not negative (as defined by math::isNegative).
void pruneTiles ( TreeT &  tree,
typename TreeT::ValueType  tolerance = zeroVal<typename TreeT::ValueType>(),
bool  threaded = true,
size_t  grainSize = 1 
)

Reduce the memory footprint of a tree by replacing with tiles any non-leaf nodes whose values are all the same (optionally to within a tolerance) and have the same active state.

Parameters
treethe tree to be pruned
tolerancetolerance within which values are considered to be equal
threadedenable or disable threading (threading is enabled by default)
grainSizeused to control the threading granularity (default is 1)
void rayTrace ( const GridT &  grid,
const BaseShader shader,
BaseCamera camera,
size_t  pixelSamples = 1,
unsigned int  seed = 0,
bool  threaded = true 
)

Ray-trace a volume.

void rayTrace ( const GridT &  ,
const IntersectorT &  inter,
const BaseShader shader,
BaseCamera camera,
size_t  pixelSamples = 1,
unsigned int  seed = 0,
bool  threaded = true 
)

Ray-trace a volume using a given ray intersector.

void resampleToMatch ( const GridType &  inGrid,
GridType &  outGrid,
Interrupter &  interrupter 
)

Resample an input grid into an output grid of the same type such that, after resampling, the input and output grids coincide (apart from sampling artifacts), but the output grid's transform is unchanged.

Specifically, this function resamples the input grid into the output grid's index space, using a sampling kernel like PointSampler, BoxSampler, or QuadraticSampler.

Parameters
inGridthe grid to be resampled
outGridthe grid into which to write the resampled voxel data
interrupteran object adhering to the util::NullInterrupter interface
Example:
// Create an input grid with the default identity transform
// and populate it with a level-set sphere.
FloatGrid::ConstPtr src = tools::makeSphere(...);
// Create an output grid and give it a uniform-scale transform.
const float voxelSize = 0.5;
dest->setTransform(math::Transform::createLinearTransform(voxelSize));
// Resample the input grid into the output grid, reproducing
// the level-set sphere at a smaller voxel size.
MyInterrupter interrupter = ...;
tools::resampleToMatch<tools::QuadraticSampler>(*src, *dest, interrupter);
void resampleToMatch ( const GridType &  inGrid,
GridType &  outGrid 
)

Resample an input grid into an output grid of the same type such that, after resampling, the input and output grids coincide (apart from sampling artifacts), but the output grid's transform is unchanged.

Specifically, this function resamples the input grid into the output grid's index space, using a sampling kernel like PointSampler, BoxSampler, or QuadraticSampler.

Parameters
inGridthe grid to be resampled
outGridthe grid into which to write the resampled voxel data
Example:
// Create an input grid with the default identity transform
// and populate it with a level-set sphere.
FloatGrid::ConstPtr src = tools::makeSphere(...);
// Create an output grid and give it a uniform-scale transform.
const float voxelSize = 0.5;
dest->setTransform(math::Transform::createLinearTransform(voxelSize));
// Resample the input grid into the output grid, reproducing
// the level-set sphere at a smaller voxel size.
tools::resampleToMatch<tools::QuadraticSampler>(*src, *dest);
GridOrTreeType::template ValueConverter< bool >::Type::Ptr sdfInteriorMask ( const GridOrTreeType &  volume,
typename GridOrTreeType::ValueType  isovalue = lsutilGridZero<GridOrTreeType>() 
)

Threaded method to construct a boolean mask that represents interior regions in a signed distance field.

Returns
A shared pointer to either a boolean grid or tree with the same tree configuration and potentially transform as the input volume and whose active and true values correspond to the interior of the input signed distance field.
Parameters
volumeSigned distance field / level set volume.
isovalueThreshold below which values are considered part of the interior region.
SdfGridT::template ValueConverter<ExtValueT>::Type::Ptr openvdb::v9_0::tools::sdfToExt ( const SdfGridT &  sdfGrid,
const ExtOpT &  op,
const ExtValueT &  background,
typename SdfGridT::ValueType  isoValue = 0,
int  nIter = 1,
FastSweepingDomain  mode = FastSweepingDomain::SWEEP_ALL,
const typename SdfGridT::template ValueConverter< ExtValueT >::Type::ConstPtr  extGrid = nullptr 
)

Computes the extension of a field (scalar, vector, or int are supported), defined by the specified functor, off an iso-surface from an input SDF volume.

Returns
A shared pointer to the extension field defined on the active values in the input signed distance field.
Parameters
sdfGridAn approximate signed distance field to the specified iso-surface.
opFunctor with signature [](const Vec3R &xyz)->ExtValueT that defines the Dirichlet boundary condition, on the iso-surface, of the field to be extended.
backgroundBackground value of return grid with the extension field.
isoValueA value which defines a smooth iso-surface that intersects active voxels in sdfGrid.
nIterNumber of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps.
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 level set values that are greater than a given isovalue. SWEEP_LESS_THAN_ISOVALUE will update all voxels corresponding to level set 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.
Note
The only difference between this method and fogToExt, defined above, is the convention of the sign of the signed distance field.

Topology of output grid is identical to that of the input grid, except active tiles in the input grid will be converted to active voxels in the output grid!

Warning
If isoValue does not intersect any active values in sdfGrid then the returned grid has all its active values set to background.
SdfGridT::template ValueConverter<ExtValueT>::Type::Ptr openvdb::v9_0::tools::sdfToExt ( const SdfGridT &  sdfGrid,
const OpT &  op,
const ExtValueT &  background,
typename SdfGridT::ValueType  isoValue,
int  nIter,
FastSweepingDomain  mode,
const typename SdfGridT::template ValueConverter< ExtValueT >::Type::ConstPtr  extGrid 
)
void openvdb::v9_0::tools::sdfToFogVolume ( GridType &  grid,
typename GridType::ValueType  cutoffDistance = lsutilGridMax< GridType >() 
)

Threaded method to convert a sparse level set/SDF into a sparse fog volume.

For a level set, the active and negative-valued interior half of the narrow band becomes a linear ramp from 0 to 1; the inactive interior becomes active with a constant value of 1; and the exterior, including the background and the active exterior half of the narrow band, becomes inactive with a constant value of 0. The interior, though active, remains sparse.

For a generic SDF, a specified cutoff distance determines the width of the ramp, but otherwise the result is the same as for a level set.

Parameters
gridlevel set/SDF grid to transform
cutoffDistanceoptional world space cutoff distance for the ramp (automatically clamped if greater than the interior narrow band width)
OPENVDB_DOCS_INTERNAL void openvdb::v9_0::tools::sdfToFogVolume ( GridType &  grid,
typename GridType::ValueType  cutoffDistance = lsutilGridMax< GridType >() 
)

Threaded method to convert a sparse level set/SDF into a sparse fog volume.

For a level set, the active and negative-valued interior half of the narrow band becomes a linear ramp from 0 to 1; the inactive interior becomes active with a constant value of 1; and the exterior, including the background and the active exterior half of the narrow band, becomes inactive with a constant value of 0. The interior, though active, remains sparse.

For a generic SDF, a specified cutoff distance determines the width of the ramp, but otherwise the result is the same as for a level set.

Parameters
gridlevel set/SDF grid to transform
cutoffDistanceoptional world space cutoff distance for the ramp (automatically clamped if greater than the interior narrow band width)
GridT::Ptr sdfToSdf ( const GridT &  sdfGrid,
typename GridT::ValueType  isoValue = 0,
int  nIter = 1 
)

Given an existing approximate SDF it solves the Eikonal equation for all its active voxels. Active input voxels with a signed distance value above the given isoValue will have POSITIVE distance values on output, i.e. they are assumed to be OUTSIDE the iso-surface.

Returns
A shared pointer to a signed-distance field defined on the active values of the input sdf volume.
Parameters
sdfGridAn approximate signed distance field to the specified iso-surface.
isoValueA value which defines a smooth iso-surface that intersects active voxels in sdfGrid.
nIterNumber of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps.
Note
The only difference between this method and fogToSdf, defined above, is the convention of the sign of the output distance field.

Topology of output grid is identical to that of the input grid, except active tiles in the input grid will be converted to active voxels in the output grid!

Warning
If isoValue does not intersect any active values in sdfGrid then the returned grid has all its active values set to plus or minus infinity, depending on if the input values are larger or smaller than isoValue.
std::pair< typename SdfGridT::Ptr, typename SdfGridT::template ValueConverter< ExtValueT >::Type::Ptr > sdfToSdfAndExt ( const SdfGridT &  sdfGrid,
const ExtOpT &  op,
const ExtValueT &  background,
typename SdfGridT::ValueType  isoValue = 0,
int  nIter = 1,
FastSweepingDomain  mode = FastSweepingDomain::SWEEP_ALL,
const typename SdfGridT::template ValueConverter< ExtValueT >::Type::ConstPtr  extGrid = nullptr 
)

Computes the signed distance field and the extension of a field (scalar, vector, or int are supported), defined by the specified functor, off an iso-surface from an input SDF volume.

Returns
A pair of two shared pointers to respectively the SDF and extension field
Parameters
sdfGridScalar (floating-point) volume from which an iso-surface can be defined.
opFunctor with signature [](const Vec3R &xyz)->ExtValueT that defines the Dirichlet boundary condition, on the iso-surface, of the field to be extended.
backgroundBackground value of return grid with the extension field.
isoValueA value which defines a smooth iso-surface that intersects active voxels in sdfGrid.
nIterNumber of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps.
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 level set values that are greater than a given isovalue. SWEEP_LESS_THAN_ISOVALUE will update all voxels corresponding to level set 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.
Note
Strictly speaking a fog volume is normalized to the range [0,1] but this method accepts a scalar volume with an arbritary range, as long as the it includes the isoValue.

Topology of output grids are identical to that of the input grid, except active tiles in the input grid will be converted to active voxels in the output grids!

Warning
If isoValue does not intersect any active values in sdfGrid then a pair of the following grids is returned: The first is a signed distance grid with its active values set to plus or minus infinity depending of whether its input values are above or below isoValue. The second grid, which represents the extension field, has all its active values set to background.
void segmentActiveVoxels ( const GridOrTreeType &  volume,
std::vector< typename GridOrTreeType::Ptr > &  segments 
)

Separates disjoint active topology components into distinct grids or trees.

Supports volumes with active tiles.

Parameters
volumeInput grid or tree
segmentsOutput set of disjoint active topology components sorted in descending order based on the active voxel count.
void segmentSDF ( const GridOrTreeType &  volume,
std::vector< typename GridOrTreeType::Ptr > &  segments 
)

Separates disjoint SDF surfaces into distinct grids or trees.

Supports asymmetric interior / exterior narrowband widths and SDF volumes with dense interior regions.

Parameters
volumeInput signed distance field / level set volume
segmentsOutput set of disjoint SDF surfaces found in volume sorted in descending order based on the surface intersecting voxel count.
void setValueOnMax ( TreeT &  tree,
const Coord &  xyz,
const typename TreeT::ValueType &  value 
)

Set the value of the voxel at the given coordinates in tree to the maximum of its current value and value, and mark the voxel as active.

This is typically significantly faster than calling getValue() followed by setValueOn().

Note
TreeT can be either a Tree or a ValueAccessor.
void setValueOnMin ( TreeT &  tree,
const Coord &  xyz,
const typename TreeT::ValueType &  value 
)

Set the value of the voxel at the given coordinates in tree to the minimum of its current value and value, and mark the voxel as active.

This is typically significantly faster than calling getValue() followed by setValueOn().

Note
TreeT can be either a Tree or a ValueAccessor.
void setValueOnMult ( TreeT &  tree,
const Coord &  xyz,
const typename TreeT::ValueType &  value 
)

Set the value of the voxel at the given coordinates in tree to the product of its current value and value, and mark the voxel as active.

This is typically significantly faster than calling getValue() followed by setValueOn().

Note
TreeT can be either a Tree or a ValueAccessor.
void setValueOnSum ( TreeT &  tree,
const Coord &  xyz,
const typename TreeT::ValueType &  value 
)

Set the value of the voxel at the given coordinates in tree to the sum of its current value and value, and mark the voxel as active.

This is typically significantly faster than calling getValue() followed by setValueOn().

Note
TreeT can be either a Tree or a ValueAccessor.
void signedFloodFill ( TreeOrLeafManagerT &  tree,
bool  threaded = true,
size_t  grainSize = 1,
Index  minLevel = 0 
)

Set the values of all inactive voxels and tiles of a narrow-band level set from the signs of the active voxels, setting outside values to +background and inside values to -background.

Warning
This method should only be used on closed, symmetric narrow-band level sets.
Note
If a LeafManager is used the cached leaf nodes are reused, resulting in slightly better overall performance.
Parameters
treeTree or LeafManager that will be flood filled.
threadedenable or disable threading (threading is enabled by default)
grainSizeused to control the threading granularity (default is 1)
minLevelSpecify the lowest tree level to process (leafnode level = 0)
Exceptions
TypeErrorif the ValueType of tree is not floating-point.
void signedFloodFillWithValues ( TreeOrLeafManagerT &  tree,
const typename TreeOrLeafManagerT::ValueType &  outsideWidth,
const typename TreeOrLeafManagerT::ValueType &  insideWidth,
bool  threaded = true,
size_t  grainSize = 1,
Index  minLevel = 0 
)

Set the values of all inactive voxels and tiles of a narrow-band level set from the signs of the active voxels, setting exterior values to outsideWidth and interior values to insideWidth. Set the background value of this tree to outsideWidth.

Warning
This method should only be used on closed, narrow-band level sets.
Note
If a LeafManager is used the cached leaf nodes are reused resulting in slightly better overall performance.
Parameters
treeTree or LeafManager that will be flood filled
outsideWidththe width of the outside of the narrow band
insideWidththe width of the inside of the narrow band
threadedenable or disable threading (threading is enabled by default)
grainSizeused to control the threading granularity (default is 1)
minLevelSpecify the lowest tree level to process (leafnode level = 0)
Exceptions
TypeErrorif the ValueType of tree is not floating-point.
math::Stats statistics ( const IterT &  iter,
bool  threaded = true 
)
inline

Iterate over a scalar grid and compute statistics (mean, variance, etc.) of the values of the voxels that are visited, or iterate over a vector-valued grid and compute statistics of the magnitudes of the vectors.

Parameters
iteran iterator over the values of a grid or its tree (Grid::ValueOnCIter, Tree::ValueOffIter, etc.)
threadedif true, iterate over the grid in parallel
math::Stats statistics ( const IterT &  iter,
const ValueOp &  op,
bool  threaded 
)
inline

Iterate over a grid and compute statistics (mean, variance, etc.) of the values produced by applying the given functor at each voxel that is visited.

Parameters
iteran iterator over the values of a grid or its tree (Grid::ValueOnCIter, Tree::ValueOffIter, etc.)
opa functor of the form void op(const IterT&, math::Stats&), where IterT is the type of iter, that inserts zero or more floating-point values into the provided math::Stats object
threadedif true, iterate over the grid in parallel
Note
When threaded is true, each thread gets its own copy of the functor.
Example:
Compute statistics of just the active and positive-valued voxels of a scalar, floating-point grid.
struct Local {
static inline
void addIfPositive(const FloatGrid::ValueOnCIter& iter, math::Stats& stats)
{
const float f = *iter;
if (f > 0.0) {
if (iter.isVoxelValue()) stats.add(f);
else stats.add(f, iter.getVoxelCount());
}
}
};
FloatGrid grid = ...;
math::Stats stats =
tools::statistics(grid.cbeginValueOn(), Local::addIfPositive, /*threaded=*/true);
GridT::template ValueConverter< float >::Type::Ptr topologyToLevelSet ( const GridT &  grid,
int  halfWidth = 3,
int  closingSteps = 1,
int  dilation = 0,
int  smoothingSteps = 0 
)

Compute the narrow-band signed distance to the interface between active and inactive voxels in the input grid.

Returns
A shared pointer to a new sdf / level set grid of type float
Parameters
gridInput grid of arbitrary type whose active voxels are used in constructing the level set.
halfWidthHalf the width of the narrow band in voxel units.
closingStepsNumber of morphological closing steps used to fill gaps in the active voxel region.
dilationNumber of voxels to expand the active voxel region.
smoothingStepsNumber of smoothing interations.
GridT::template ValueConverter< float >::Type::Ptr topologyToLevelSet ( const GridT &  grid,
int  halfWidth = 3,
int  closingSteps = 1,
int  dilation = 0,
int  smoothingSteps = 0,
InterrupterT *  interrupt = nullptr 
)

Compute the narrow-band signed distance to the interface between active and inactive voxels in the input grid.

Returns
A shared pointer to a new sdf / level set grid of type float
Parameters
gridInput grid of arbitrary type whose active voxels are used in constructing the level set.
halfWidthHalf the width of the narrow band in voxel units.
closingStepsNumber of morphological closing steps used to fill gaps in the active voxel region.
dilationNumber of voxels to expand the active voxel region.
smoothingStepsNumber of smoothing interations.
interruptOptional object adhering to the util::NullInterrupter interface.
void traceExteriorBoundaries ( FloatTreeT &  tree)

Traces the exterior voxel boundary of closed objects in the input volume tree. Exterior voxels are marked with a negative sign, voxels with a value below 0.75 are left unchanged and act as the boundary layer.

Note
Does not propagate sign information into tile regions.
void openvdb::v9_0::tools::transformDense ( Dense< ValueT, openvdb::tools::LayoutZYX > &  dense,
const openvdb::CoordBBox &  bbox,
const OpType &  op,
bool  parallel = true 
)

Apply a point-wise functor to the intersection of a dense grid and a given bounding box

Parameters
denseA dense grid to be transformed
bboxIndex space bounding box, define region where the transformation is applied
opA functor that acts on the dense grid value type
parallelUsed to select multithreaded or single threaded Minimally, the op class has to support a operator() method,
// Square values in a grid
struct Op
{
ValueT operator()(const ValueT& in) const
{
// do work
ValueT result = in * in;
return result;
}
};
NB: only Dense grids with memory layout zxy are supported
void openvdb::v9_0::tools::transformDense ( Dense< ValueT, openvdb::tools::LayoutZYX > &  dense,
const openvdb::CoordBBox &  bbox,
const PointwiseOpT &  functor,
bool  parallel 
)

Apply a point-wise functor to the intersection of a dense grid and a given bounding box.

void transformValues ( const InIterT &  inIter,
OutGridT &  outGrid,
XformOp &  op,
bool  threaded = true,
bool  shareOp = true,
MergePolicy  merge = MERGE_ACTIVE_STATES 
)
inline

Iterate over a grid and at each step call op(iter, accessor) to populate (via the accessor) the given output grid, whose ValueType need not be the same as the input grid's.

Parameters
inItera non-const or (preferably) const iterator over an input grid or its tree (Grid::ValueOnCIter, Tree::NodeIter, etc.)
outGridan empty grid to be populated
opa functor of the form void op(const InIterT&, OutGridT::ValueAccessor&), where InIterT is the type of inIter
threadedif true, transform multiple values of the input grid in parallel
shareOpif true and threaded is true, all threads use the same functor; otherwise, each thread gets its own copy of the original functor
mergehow to merge intermediate results from multiple threads (see Types.h)
Example:
Populate a scalar floating-point grid with the lengths of the vectors from all active voxels of a vector-valued input grid.
struct Local {
static void op(
FloatGrid::ValueAccessor& accessor)
{
if (iter.isVoxelValue()) { // set a single voxel
accessor.setValue(iter.getCoord(), iter->length());
} else { // fill an entire tile
CoordBBox bbox;
iter.getBoundingBox(bbox);
accessor.getTree()->fill(bbox, iter->length());
}
}
};
Vec3fGrid inGrid = ...;
FloatGrid outGrid;
tools::transformValues(inGrid.cbeginValueOn(), outGrid, Local::op);
Note
For more complex operations that require finer control over threading, consider using tbb::parallel_for() or tbb::parallel_reduce() in conjunction with a tree::IteratorRange that wraps a grid or tree iterator.
void transformValues ( const InIterT &  inIter,
OutGridT &  outGrid,
const XformOp &  op,
bool  threaded = true,
bool  shareOp = true,
MergePolicy  merge = MERGE_ACTIVE_STATES 
)
inline
void transformVectors ( GridType &  grid,
const Mat4d &  mat 
)

Apply an affine transform to the voxel values of a vector-valued grid in accordance with the grid's vector type (covariant, contravariant, etc.).

Exceptions
TypeErrorif the grid is not vector-valued
bool uniqueInactiveValues ( const GridType &  grid,
std::vector< typename GridType::ValueType > &  values,
size_t  numValues 
)

Threaded method to find unique inactive values.

Parameters
gridA VDB volume.
valuesList of unique inactive values, returned by this method.
numValuesNumber of values to look for.
Returns
false if the grid has more than numValues inactive values.
size_t visitNodesDepthFirst ( TreeT &  tree,
OpT &  op,
size_t  idx = 0 
)

Visit all nodes in the tree depth-first and apply a user-supplied functor to each node.

Parameters
treetree to be visited.
opuser-supplied functor, see examples for interface details.
idxoptional offset to start sequential node indexing from a non-zero index.
Warning
This method is single-threaded. Use the NodeManager or DynamicNodeManager for much greater threaded performance.
Example:
Functor to offset all the active values of a tree.
struct OffsetOp
{
OffsetOp(float v): mOffset(v) { }
template<typename NodeT>
void operator()(NodeT& node, size_t) const
{
for (auto iter = node.beginValueOn(); iter; ++iter) {
iter.setValue(iter.getValue() + mOffset);
}
}
private:
const float mOffset;
};
// usage:
OffsetOp op(3.0f);
// Functor to offset all the active values of a tree. Note
// this implementation also illustrates how different
// computation can be applied to the different node types.
template<typename TreeT>
struct OffsetByLevelOp
{
using ValueT = typename TreeT::ValueType;
using RootT = typename TreeT::RootNodeType;
using LeafT = typename TreeT::LeafNodeType;
OffsetByLevelOp(const ValueT& v) : mOffset(v) {}
// Processes the root node.
void operator()(RootT& root, size_t) const
{
for (auto iter = root.beginValueOn(); iter; ++iter) {
iter.setValue(iter.getValue() + mOffset);
}
}
// Processes the leaf nodes.
void operator()(LeafT& leaf, size_t) const
{
for (auto iter = leaf.beginValueOn(); iter; ++iter) {
iter.setValue(iter.getValue() + mOffset);
}
}
// Processes the internal nodes.
template<typename NodeT>
void operator()(NodeT& node, size_t) const
{
for (auto iter = node.beginValueOn(); iter; ++iter) {
iter.setValue(iter.getValue() + mOffset);
}
}
private:
const ValueT mOffset;
};
// usage:
OffsetByLevelOp<FloatTree> op(3.0f);
Here is an example when migrating from using the deprecated Tree::visit()
method. The main difference between the Tree::visit() method and this new method is that the Tree::visit() method expected an object that can visit tiles, values and nodes. In contrast, the visitNodesDepthFirst() method visits only nodes and expects you to provide iteration over tiles and voxels.
Tree::visit() operator methods:
template <typename IterT>
bool operator()(IterT &iter)
{
typename IterT::NonConstValueType value;
typename IterT::ChildNodeType *child = iter.probeChild(value);
if (child)
{
// If it is a leaf, process it now
if (child->getLevel() == 0)
{
processNode(*child);
return true;
}
// Otherwise, we want to keep digging down
return false;
}
// No child, this is a constant node!
if (iter.isValueOn())
{
b.min() = iter.getCoord();
b.max() = b.min().offsetBy(IterT::ChildNodeType::DIM);
processNodeBlock(b);
}
// No need to dig further as there is no child.
return true;
}
bool operator()(typename GridType::TreeType::LeafNodeType::ChildAllIter &)
{ return true; }
bool operator()(typename GridType::TreeType::LeafNodeType::ChildAllCIter &)
{ return true; }
tools::visitNodesDepthFirst() operator methods:
using LeafT = typename GridType::TreeType::LeafNodeType;
template <typename NodeT>
void operator()(const NodeT &node, size_t)
{
// iterate over active tiles
for (auto iter = node.beginValueOn(); iter; ++iter)
{
b.min() = iter.getCoord();
b.max() = b.min().offsetBy(NodeT::ChildNodeType::DIM);
processNodeBlock(b);
}
}
void operator()(const LeafT &leaf, size_t)
{
processNode(leaf);
}
void volumeToMesh ( const GridType &  grid,
std::vector< Vec3s > &  points,
std::vector< Vec4I > &  quads,
double  isovalue = 0.0 
)

Uniformly mesh any scalar grid that has a continuous isosurface.

Parameters
grida scalar grid to mesh
pointsoutput list of world space points
quadsoutput quad index list
isovaluedetermines which isosurface to mesh
Exceptions
TypeErrorif grid does not have a scalar value type
void volumeToMesh ( const GridType &  grid,
std::vector< Vec3s > &  points,
std::vector< Vec3I > &  triangles,
std::vector< Vec4I > &  quads,
double  isovalue = 0.0,
double  adaptivity = 0.0,
bool  relaxDisorientedTriangles = true 
)

Adaptively mesh any scalar grid that has a continuous isosurface.

Parameters
grida scalar grid to mesh
pointsoutput list of world space points
trianglesoutput triangle index list
quadsoutput quad index list
isovaluedetermines which isosurface to mesh
adaptivitysurface adaptivity threshold [0 to 1]
relaxDisorientedTrianglestoggle relaxing disoriented triangles during adaptive meshing.
Exceptions
TypeErrorif grid does not have a scalar value type