OpenVDB
12.0.0
|
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 | OutTreeT = typename Adapter::TreeType |
using | Processor = typename valxform::SharedOpTransformer< InIterT, OutTreeT, const XformOp > |
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 | InteriorTestStrategy { EVAL_EVERY_VOXEL = 0, EVAL_EVERY_TILE = 1 } |
Different staregies how to determine sign of an SDF when using interior test. 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, bool pruneCancelledTiles=false) |
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, bool pruneCancelledTiles=false) |
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, bool pruneCancelledTiles=false) |
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 TreeT > | |
Index64 | memUsageIfLoaded (const TreeT &tree, bool threaded=true) |
Return the deserialized memory usage of this tree. This is not necessarily equal to the current memory usage (returned by tools::memUsage) if delay-loading is enabled. See File::open. More... | |
template<typename TreeT > | |
math::MinMax< typename TreeT::ValueType > | minMax (const TreeT &tree, bool threaded=true) |
Return the minimum and maximum active values in 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 ¢er=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 ¢er=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 ¢er=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 ¢er=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 ¢er=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 ¢er=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 ¢er=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 ¢er=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 ¢er=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 ¢er=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 ¢er=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 ¢er=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 ¢er, 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 ¢er, 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 , typename InteriorTest = std::nullptr_t> | |
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, InteriorTest interiorTest=nullptr, InteriorTestStrategy interiorTestStrat=EVAL_EVERY_VOXEL) |
template<typename GridType , typename MeshDataAdapter , typename Interrupter , typename InteriorTest = std::nullptr_t> | |
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, InteriorTest interiorTest=nullptr, InteriorTestStrategy interiorTestStrategy=EVAL_EVERY_VOXEL) |
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... | |
template<typename T , Index Log2Dim, typename InteriorTest > | |
void | floodFillLeafNode (tree::LeafNode< T, Log2Dim > &leafNode, const InteriorTest &interiorTest) |
template<typename FloatTreeT , typename InteriorTest > | |
void | evaluateInteriorTest (FloatTreeT &tree, InteriorTest interiorTest, InteriorTestStrategy interiorTestStrategy) |
Sets the sign of voxel values of tree based on the interiorTest 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 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 > | |
OPENVDB_UBSAN_SUPPRESS ("undefined") void transformValues(const InIterT &inIter | |
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... | |
if (shared) | |
Processor | proc (inIter, Adapter::tree(outGrid), op, merge) |
proc | process (threaded) |
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... | |
Variables | |
OutGridT & | outGrid |
OutGridT XformOp & | op |
OutGridT XformOp bool | threaded = true |
OutGridT XformOp bool bool | shareOp = true |
OutGridT XformOp bool bool MergePolicy | merge = MERGE_ACTIVE_STATES) |
OutGridT XformOp bool bool | shared |
else | |
OutGridT const XformOp bool | bool |
using CsgIntersectionOp = CsgUnionOrIntersectionOp<TreeT, false> |
using CsgUnionOp = CsgUnionOrIntersectionOp<TreeT, true> |
typedef typename Adapter::TreeType OutTreeT |
using PointIndexGrid = Grid<PointIndexTree> |
Point index grid.
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.
using PointList = std::unique_ptr<openvdb::Vec3s[]> |
Point and primitive list types.
using PolygonPoolList = std::unique_ptr<PolygonPool[]> |
Point and primitive list types.
using Processor = typename valxform::SharedOpTransformer<InIterT, OutTreeT, const XformOp> |
using UInt32PointPartitioner = PointPartitioner<uint32_t, 3> |
anonymous enum |
enum DSCompositeOp |
|
strong |
enum InteriorTestStrategy |
Different staregies how to determine sign of an SDF when using interior test.
enum MemoryLayout |
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 |
enum MeshToVolumeFlags |
Mesh to volume conversion flags.
enum NearestNeighbors |
Voxel topology of nearest neighbors.
face adjacency (6 nearest neighbors, defined as all neighbor voxels connected along one of the primary axes)
face and edge adjacency (18 nearest neighbors, defined as all neighbor voxels connected along either one or two of the primary axes)
Enumerator | |
---|---|
NN_FACE | |
NN_FACE_EDGE | |
NN_FACE_EDGE_VERTEX |
enum TilePolicy |
Different policies when dilating trees with active 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.
For dilation and erosion, active tiles are voxelized (expanded), dilated or eroded and left in their voxelized state irrespective of their final state.
Enumerator | |
---|---|
IGNORE_TILES | |
EXPAND_TILES | |
PRESERVE_TILES |
|
inline |
|
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.
iter | an iterator over a grid or its tree (Grid::ValueOnCIter , Tree::NodeIter , etc.) |
op | a 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 |
threaded | if true, transform multiple values of the grid in parallel |
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.
tree | const tree to be tested for active tiles. |
bbox | index 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.
tree | const tree to be tested for active tiles. |
bbox | index 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.
tree | const tree to be tested for active values. |
bbox | index 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.
tree | const tree to be tested for active voxels. |
bbox | index 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.
tree | Tree (or LeafManager) that will have its background value changed |
outsideWidth | The width of the outside of the narrow band |
insideWidth | The width of the inside of the narrow band |
threaded | enable or disable threading (threading is enabled by default) |
grainSize | used to control the threading granularity (default is 32) |
ValueError | if 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.
tree | Tree (or LeafManager) that will have its background value changed |
background | the new background value |
threaded | enable or disable threading (threading is enabled by default) |
grainSize | used 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.
tree | Tree (or LeafManager) that will have its background value changed |
halfWidth | half of the width of the symmetric narrow band |
threaded | enable or disable threading (threading is enabled by default) |
grainSize | used to control the threading granularity (default is 32) |
ValueError | if 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.
grid | Grid to be checked |
number | Number of the checks to be performed (see below) |
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.
grid | Grid to be checked |
number | Number of the checks to be performed (see below) |
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.
Clip the given grid against a world-space bounding box and return a new grid containing the result.
grid | the grid to be clipped |
bbox | a world-space bounding box |
keepInterior | if true, discard voxels that lie outside the bounding box; if false, discard voxels that lie inside the bounding box |
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.
grid | the grid to be clipped |
frustum | a frustum map |
keepInterior | if true, discard voxels that lie outside the frustum; if false, discard voxels that lie inside the frustum |
GridType::Ptr openvdb::v12_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.
grid | the grid to be clipped |
mask | a grid whose active voxels form a boolean clipping mask |
keepInterior | if 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.
void openvdb::v12_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.
srcTree | source tree from which active voxels are composited. |
dstTree | destination tree into which active voxels are composited. |
op | a 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).
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.
|
inline |
Composite data from a sparse tree into a dense array of the same value type.
dense | Dense grid to be altered by the operation |
source | Sparse data to composite into dense |
alpha | Sparse Alpha mask used in compositing operations. |
beta | Constant multiplier on src |
strength | Constant multiplier on alpha |
threaded | Enable 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.
potential | scalar potential, typically computed from computeScalarPotential() |
neumann | the topology of this grid defines where the solid boundaries are and grid values give the Neumann boundaries that should be applied there |
backgroundVelocity | a 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.
domain | a mask to represent the domain in which to perform the solve |
neumann | the topology of this grid defines where the solid boundaries are and grid values give the Neumann boundaries that should be applied there |
state | the solver parameters for computing the solution |
interrupter | pointer 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.
dense | the dense grid from which to copy values |
sparse | an OpenVDB grid or tree into which to copy values |
tolerance | values 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 |
serial | if 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.
sparse | an OpenVDB grid or tree from which to copy values |
dense | the dense grid into which to copy values |
serial | if false, process voxels in parallel |
Return the total number of active voxels stored in leaf nodes.
Return the total number of active voxels stored in leaf nodes that intersects a bounding box.
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.
tree | const tree to be tested for active values. |
bbox | index bounding box which is intersected against the active values. |
Return the total number of active voxels in the tree.
Return the total number of active voxels in the tree that intersects a bounding box.
Return the total number of inactive voxels stored in leaf nodes.
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.
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::v12_0::tools::cpt | ( | const GridType & | grid, |
bool | threaded = true |
||
) |
ScalarToVectorConverter<GridType>::Type::Ptr openvdb::v12_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.
bbox | a bounding box in world units |
xform | world-to-index-space transform |
halfWidth | half the width of the narrow band, in voxel units |
GridType::Ptr openvdb::v12_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.
scale | scale of the platonic solid in world units |
center | center of the platonic solid in world units |
voxelSize | voxel size in world units |
halfWidth | half the width of the narrow band, in voxel units |
interrupt | a pointer adhering to the util::NullInterrupter interface |
GridType::ValueType
must be a floating-point scalar. GridType::Ptr openvdb::v12_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.
scale | scale of the platonic solid in world units |
center | center of the platonic solid in world units |
voxelSize | voxel size in world units |
halfWidth | half the width of the narrow band, in voxel units |
GridType::ValueType
must be a floating-point scalar. GridType::Ptr openvdb::v12_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.
scale | scale of the platonic solid in world units |
center | center of the platonic solid in world units |
voxelSize | voxel size in world units |
halfWidth | half the width of the narrow band, in voxel units |
interrupt | a pointer adhering to the util::NullInterrupter interface |
GridType::ValueType
must be a floating-point scalar. GridType::Ptr openvdb::v12_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.
scale | scale of the platonic solid in world units |
center | center of the platonic solid in world units |
voxelSize | voxel size in world units |
halfWidth | half the width of the narrow band, in voxel units |
GridType::ValueType
must be a floating-point scalar. GridType::Ptr openvdb::v12_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.
scale | scale of the platonic solid in world units |
center | center of the platonic solid in world units |
voxelSize | voxel size in world units |
halfWidth | half the width of the narrow band, in voxel units |
interrupt | a pointer adhering to the util::NullInterrupter interface |
GridType::ValueType
must be a floating-point scalar. GridType::Ptr openvdb::v12_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.
scale | scale of the platonic solid in world units |
center | center of the platonic solid in world units |
voxelSize | voxel size in world units |
halfWidth | half the width of the narrow band, in voxel units |
GridType::ValueType
must be a floating-point scalar. GridType::Ptr openvdb::v12_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.
scale | scale of the platonic solid in world units |
center | center of the platonic solid in world units |
voxelSize | voxel size in world units |
halfWidth | half the width of the narrow band, in voxel units |
interrupt | a pointer adhering to the util::NullInterrupter interface |
GridType::ValueType
must be a floating-point scalar. GridType::Ptr openvdb::v12_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.
scale | scale of the platonic solid in world units |
center | center of the platonic solid in world units |
voxelSize | voxel size in world units |
halfWidth | half the width of the narrow band, in voxel units |
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.
faceCount | number of faces of the platonic solid, i.e. 4, 6, 8, 12 or 20 |
scale | scale of the platonic solid in world units |
center | center of the platonic solid in world units |
voxelSize | voxel size in world units |
halfWidth | half the width of the narrow band, in voxel units |
interrupt | a pointer adhering to the util::NullInterrupter interface |
Faces: TETRAHEDRON=4, CUBE=6, OCTAHEDRON=8, DODECAHEDRON=12, ICOSAHEDRON=20
GridType::ValueType
must be a floating-point scalar. GridType::Ptr openvdb::v12_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.
faceCount | number of faces of the platonic solid, i.e. 4, 6, 8, 12 or 20 |
scale | scale of the platonic solid in world units |
center | center of the platonic solid in world units |
voxelSize | voxel size in world units |
halfWidth | half the width of the narrow band, in voxel units |
Faces: TETRAHEDRON=4, CUBE=6, OCTAHEDRON=8, DODECAHEDRON=12, ICOSAHEDRON=20
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.
radius | radius of the sphere in world units |
center | center of the sphere in world units |
voxelSize | voxel size in world units |
halfWidth | half the width of the narrow band, in voxel units |
interrupt | a pointer adhering to the util::NullInterrupter interface |
threaded | if true multi-threading is enabled (true by default) |
GridType::ValueType
must be a floating-point scalar. GridType::Ptr openvdb::v12_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.
radius | radius of the sphere in world units |
center | center of the sphere in world units |
voxelSize | voxel size in world units |
halfWidth | half the width of the narrow band, in voxel units |
threaded | if true multi-threading is enabled (true by default) |
GridType::ValueType
must be a floating-point scalar. GridType::Ptr openvdb::v12_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.
scale | scale of the platonic solid in world units |
center | center of the platonic solid in world units |
voxelSize | voxel size in world units |
halfWidth | half the width of the narrow band, in voxel units |
interrupt | a pointer adhering to the util::NullInterrupter interface |
GridType::ValueType
must be a floating-point scalar. GridType::Ptr openvdb::v12_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.
scale | scale of the platonic solid in world units |
center | center of the platonic solid in world units |
voxelSize | voxel size in world units |
halfWidth | half the width of the narrow band, in voxel units |
GridType::ValueType
must be a floating-point scalar.
|
inline |
Partition points into a point index grid to accelerate range and nearest-neighbor searches.
points | world-space point array conforming to the PointArray interface |
voxelSize | voxel size in world units |
|
inline |
Partition points into a point index grid to accelerate range and nearest-neighbor searches.
points | world-space point array conforming to the PointArray interface |
xform | world-to-index-space transform |
|
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).
points | points that active the voxels in the returned grid. |
xform | transform 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.
grid | source grid to use for computing the mask |
dilation | dilation 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.
collider | a level set that represents the boundary |
domain | a mask to represent the potential flow domain |
boundaryVelocity | an optional grid pointer to stores the velocities of the boundary |
backgroundVelocity | a 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 , |
||
bool | pruneCancelledTiles = false |
||
) |
Given two level set grids, replace the A grid with the difference A / B.
ValueError | if the background value of either grid is not greater than zero. |
GridOrTreeT::Ptr csgDifferenceCopy | ( | const GridOrTreeT & | a, |
const GridOrTreeT & | b | ||
) |
Threaded CSG difference operation that produces a new grid or tree from immutable inputs.
void csgIntersection | ( | GridOrTreeT & | a, |
GridOrTreeT & | b, | ||
bool | prune = true , |
||
bool | pruneCancelledTiles = false |
||
) |
Given two level set grids, replace the A grid with the intersection of A and B.
ValueError | if the background value of either grid is not greater than zero. |
GridOrTreeT::Ptr csgIntersectionCopy | ( | const GridOrTreeT & | a, |
const GridOrTreeT & | b | ||
) |
Threaded CSG intersection operation that produces a new grid or tree from immutable inputs.
void csgUnion | ( | GridOrTreeT & | a, |
GridOrTreeT & | b, | ||
bool | prune = true , |
||
bool | pruneCancelledTiles = false |
||
) |
Given two level set grids, replace the A grid with the union of A and B.
ValueError | if the background value of either grid is not greater than zero. |
GridOrTreeT::Ptr csgUnionCopy | ( | const GridOrTreeT & | a, |
const GridOrTreeT & | b | ||
) |
Threaded CSG union operation that produces a new grid or tree from immutable inputs.
GridType::Ptr curl | ( | const GridType & | grid, |
bool | threaded, | ||
InterruptT * | interrupt | ||
) |
Compute the curl of the given 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::v12_0::tools::curl | ( | const GridType & | grid, |
bool | threaded = true |
||
) |
GridType::Ptr openvdb::v12_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.
tree | tree or leaf manager to be dilated. The leaf manager will be synchronized with the result. |
iterations | number of iterations to apply the dilation |
nn | connectivity 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). |
mode | Defined the policy for handling active tiles (see above for details) |
threaded | Whether 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").
sdfGrid | Input signed distance field to be dilated. |
dilation | Numer of voxels that the narrow band of the input SDF will be dilated. |
nn | Stencil-pattern used for dilation |
nIter | Number of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps. |
mode | Determines the direction of the dilation. SWEEP_ALL will dilate in both sides of the signed distance function, SWEEP_GREATER_THAN_ISOVALUE will dilate in the positive side of the iso-surface, SWEEP_LESS_THAN_ISOVALUE will dilate in the negative side of the iso-surface. |
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.
VectorToScalarConverter< GridType >::Type::Ptr divergence | ( | const GridType & | grid, |
bool | threaded, | ||
InterruptT * | interrupt | ||
) |
Compute the divergence of the given 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.
VectorToScalarConverter< GridType >::Type::Ptr divergence | ( | const GridType & | grid, |
const MaskT & | mask, | ||
bool | threaded, | ||
InterruptT * | interrupt | ||
) |
VectorToScalarConverter<GridType>::Type::Ptr openvdb::v12_0::tools::divergence | ( | const GridType & | grid, |
bool | threaded = true |
||
) |
VectorToScalarConverter<GridType>::Type::Ptr openvdb::v12_0::tools::divergence | ( | const GridType & | grid, |
const MaskT & | mask, | ||
bool | threaded = true |
||
) |
void openvdb::v12_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.
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.
tree | tree or leaf manager to be eroded. The leaf manager will be synchronized with the result. |
iterations | number of iterations to apply the erosion |
nn | connectivity 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). |
mode | Defined the policy for handling active tiles (see above for details) |
threaded | Whether to multi-thread execution |
void openvdb::v12_0::tools::evaluateInteriorTest | ( | FloatTreeT & | tree, |
InteriorTest | interiorTest, | ||
InteriorTestStrategy | interiorTestStrategy | ||
) |
Sets the sign of voxel values of tree
based on the interiorTest
Inside is set to positive and outside to negative. This is in reverse to the usual level set convention, but meshToVolume
uses the opposite convention at certain point.
InteriorTest has to be a function Coord -> bool
which evaluates true inside of the mesh and false outside.
Furthermore, InteriorTest does not have to be thread-safe, but it has to be copy constructible and evaluating different coppy has to be thread-safe.
Example of a interior test
auto acc = tree->getAccessor();
auto test = [acc = grid.getConstAccessor()](const Cood& coord) -> bool { return acc->get(coord) <= 0 ? true : false; }
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.
volume | Input grid or tree |
masks | Output 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.
volume
and whose active and true
values correspond to the interior and enclosed regions in the input signed distance field.volume | Signed distance field / level set volume. |
isovalue | Threshold below which values are considered part of the interior region. |
fillMask | Optional 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.
volume | Signed distance field / level set volume. |
isovalue | The 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.)
dense | A dense grid that acts as a data source |
functor | A functor that selects and transforms data for output |
background | The background value of the resulting sparse grid |
threaded | Option to use threaded or serial code path |
Ptr
to tree with the valuetype and configuration defined by typedefs in the functor
. 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
For example, to generate a <ValueType, 5, 4, 3> tree with valuesOn at locations greater than a given maskvalue
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.
dense | A dense grid that acts as a data source |
mask | The active voxels and tiles intersected with dense define iteration mask |
background | The background value of the resulting sparse grid |
threaded | Option to use threaded or serial code path |
Ptr
to tree with the same configuration as mask
but of value type defined by dense
.
|
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.
iter | an iterator over the values of a grid or its tree (Grid::ValueOnCIter , Tree::ValueOffIter , etc.) |
threaded | if true, iterate over the grid in parallel |
|
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.
iter | an iterator over the values of a grid or its tree (Grid::ValueOnCIter , Tree::ValueOffIter , etc.) |
op | a 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 |
threaded | if true, iterate over the grid in parallel |
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.
grid | a scalar grid that defines the surface to be filled with spheres |
spheres | an 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. |
sphereCount | lower and upper bounds on the number of spheres to be generated The actual number will be somewhere within the bounds. |
overlapping | toggle to allow spheres to overlap/intersect |
minRadius | the smallest allowable sphere size, in voxel units |
maxRadius | the largest allowable sphere size, in voxel units |
isovalue | the 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). |
instanceCount | the number of interior points to consider for the sphere placement Increasing this count increases the chances of finding optimal sphere sizes. |
interrupter | pointer to an object adhering to the util::NullInterrupter interface |
|
inline |
Given a set of tangent elements, points
with corresponding normals
, this method returns the intersection point of all tangent elements.
void openvdb::v12_0::tools::floodFillLeafNode | ( | tree::LeafNode< T, Log2Dim > & | leafNode, |
const InteriorTest & | interiorTest | ||
) |
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.
fogGrid | Scalar (floating-point) volume from which an iso-surface can be defined. |
op | Functor with signature [](const Vec3R &xyz)->ExtValueT that defines the Dirichlet boundary condition, on the iso-surface, of the field to be extended. |
background | Background value of return grid with the extension field. |
isoValue | A value which defines a smooth iso-surface that intersects active voxels in fogGrid. |
nIter | Number of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps. |
mode | Determines the mode of updating the extension field. SWEEP_ALL will update all voxels of the extension field affected by the fast sweeping algorithm. SWEEP_GREATER_THAN_ISOVALUE will update all voxels corresponding to fog values that are greater than a given isovalue. SWEEP_LESS_THAN_ISOVALUE will update all voxels corresponding to fog values that are less than a given isovalue. If a mode other than SWEEP_ALL is chosen, a user needs to supply extGrid. |
extGrid | Optional parameter required to supply a default value for the extension field when SWEEP_GREATER_THAN_ISOVALUE or SWEEP_LESS_THAN_ISOVALUE mode is picked for mode. When SWEEP_GREATER_THAN_ISOVALUE is supplied as an argument for mode, the extension field voxel will default to the value of the extGrid in that position if it corresponds to a 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. |
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!
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.
fogGrid | Scalar (floating-point) volume from which an iso-surface can be defined. |
isoValue | A value which defines a smooth iso-surface that intersects active voxels in fogGrid. |
nIter | Number of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps. |
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!
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.
fogGrid | Scalar (floating-point) volume from which an iso-surface can be defined. |
op | Functor with signature [](const Vec3R &xyz)->ExtValueT that defines the Dirichlet boundary condition, on the iso-surface, of the field to be extended. |
background | Background value of return grid with the extension field. |
isoValue | A value which defines a smooth iso-surface that intersects active voxels in fogGrid. |
nIter | Number of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps. |
mode | Determines the mode of updating the extension field. SWEEP_ALL will update all voxels of the extension field affected by the fast sweeping algorithm. SWEEP_GREATER_THAN_ISOVALUE will update all voxels corresponding to fog values that are greater than a given isovalue. SWEEP_LESS_THAN_ISOVALUE will update all voxels corresponding to fog values that are less than a given isovalue. If a mode other than SWEEP_ALL is chosen, a user needs to supply extGrid. |
extGrid | Optional parameter required to supply a default value for the extension field when SWEEP_GREATER_THAN_ISOVALUE or SWEEP_LESS_THAN_ISOVALUE mode is picked for mode. When SWEEP_GREATER_THAN_ISOVALUE is supplied as an argument for mode, the extension field voxel will default to the value of the extGrid in that position if it corresponds to a 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. |
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!
Iterate over a grid and at each step call op(iter)
.
iter | an iterator over a grid or its tree (Grid::ValueOnCIter , Tree::NodeIter , etc.) |
op | a functor of the form void op(const IterT&) , where IterT is the type of iter |
threaded | if true, transform multiple values of the grid in parallel |
shareOp | if true and threaded is true, all threads use the same functor; otherwise, each thread gets its own copy of the original functor |
tbb::parallel_for()
or tbb::parallel_reduce()
in conjunction with a tree::IteratorRange that wraps a grid or tree iterator.
|
inline |
|
inline |
Repartition the points if needed, otherwise return the input 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.
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::v12_0::tools::gradient | ( | const GridType & | grid, |
bool | threaded = true |
||
) |
ScalarToVectorConverter<GridType>::Type::Ptr openvdb::v12_0::tools::gradient | ( | const GridType & | grid, |
const MaskT & | mask, | ||
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.
iter | an iterator over the values of a grid or its tree (Grid::ValueOnCIter , Tree::ValueOffIter , etc.) |
minVal | the smallest value that can be added to the histogram |
maxVal | the largest value that can be added to the histogram |
numBins | the number of histogram bins |
threaded | if true, iterate over the grid in parallel |
openvdb::v12_0::tools::if | ( | shared | ) |
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.
grid | the grid from which to construct a mask |
isovalue | for a level set grid, the isovalue that defines the grid's interior |
|
inline |
Return true
if the given point index grid represents a valid partitioning of the given point array.
points | world-space point array conforming to the PointArray interface |
grid | point index grid to validate |
GridType::Ptr laplacian | ( | const GridType & | grid, |
bool | threaded, | ||
InterruptT * | interrupt | ||
) |
Compute the Laplacian of the given 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::v12_0::tools::laplacian | ( | const GridType & | grid, |
bool | threaded = true |
||
) |
GridType::Ptr openvdb::v12_0::tools::laplacian | ( | const GridType & | grid, |
const MaskT & | mask, | ||
bool | threaded = true |
||
) |
Return the surface area of a narrow-band level set.
grid | a scalar, floating-point grid with one or more disjoint, closed level set surfaces |
useWorldSpace | if true the area is computed in world space units, else in voxel units. |
TypeError | if grid is not scalar or not floating-point or not a level set or empty. |
int openvdb::v12_0::tools::levelSetEulerCharacteristic | ( | const GridType & | grid | ) |
Return the Euler Characteristics of a narrow-band level set surface (possibly disconnected).
grid | a scalar, floating-point grid with one or more disjoint, closed level set surfaces |
TypeError | if grid is not scalar or not floating-point or not a level set or empty. |
int openvdb::v12_0::tools::levelSetEulerCharacteristic | ( | const GridT & | grid | ) |
int openvdb::v12_0::tools::levelSetGenus | ( | const GridType & | grid | ) |
Return the genus of a narrow-band level set surface.
grid | a scalar, floating-point grid with one or more disjoint, closed level set surfaces |
TypeError | if grid is not scalar or not floating-point or not a level set or empty. |
int openvdb::v12_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.
grid | a scalar, floating-point grid with one or more disjoint, closed isosurfaces at the given isovalue |
isovalue | the isovalue that defines the implicit surface (defaults to zero, which is typical if the input grid is already a level set or a SDF). |
halfWidth | half the width of the narrow band, in voxel units (defaults to 3 voxels, which is required for some level set operations) |
xform | optional transform for the output grid (if not provided, the transform of the input grid will be matched) |
TypeError | if grid is not scalar or not floating-point |
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.
grid | a scalar, floating-point grid with one or more disjoint, closed isosurfaces at the given isovalue |
isovalue | the isovalue that defines the implicit surface |
exBandWidth | the exterior narrow-band width in voxel units |
inBandWidth | the interior narrow-band width in voxel units |
xform | optional transform for the output grid (if not provided, the transform of the input grid will be matched) |
TypeError | if grid is not scalar or not floating-point |
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.
grid | a scalar, floating-point grid with one or more disjoint, closed isosurfaces at the given isovalue |
isovalue | the isovalue that defines the implicit surface |
exBandWidth | the exterior narrow-band width in voxel units |
inBandWidth | the interior narrow-band width in voxel units |
xform | optional transform for the output grid (if not provided, the transform of the input grid will be matched) |
interrupter | optional interrupter object |
TypeError | if grid is not scalar or not floating-point |
Return the volume of a narrow-band level set surface.
grid | a scalar, floating-point grid with one or more disjoint, closed level set surfaces |
useWorldSpace | if true the volume is computed in world space units, else in voxel units. |
TypeError | if grid is not scalar or not floating-point or not a level set or empty. |
VectorToScalarConverter< GridType >::Type::Ptr magnitude | ( | const GridType & | grid, |
bool | threaded, | ||
InterruptT * | interrupt | ||
) |
Compute the magnitudes of the vectors of the given 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.
VectorToScalarConverter< GridType >::Type::Ptr magnitude | ( | const GridType & | grid, |
const MaskT & | mask, | ||
bool | threaded, | ||
InterruptT * | interrupt | ||
) |
VectorToScalarConverter<GridType>::Type::Ptr openvdb::v12_0::tools::magnitude | ( | const GridType & | grid, |
bool | threaded = true |
||
) |
VectorToScalarConverter<GridType>::Type::Ptr openvdb::v12_0::tools::magnitude | ( | const GridType & | grid, |
const MaskT & | mask, | ||
bool | threaded = true |
||
) |
|
inline |
Makes every voxel of the grid
active if it contains a point.
points | points that active the voxels of grid |
grid | on 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.
sdfGrid | Input signed distance field to be extended into the mask. |
mask | Mask used to identify the topology of the output SDF. Note this mask is assume to overlap with the sdfGrid. |
ignoreActiveTiles | If false, active tiles in the mask are treated as active voxels. Else they are ignored. |
nIter | Number 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.
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::v12_0::tools::meanCurvature | ( | const GridType & | grid, |
bool | threaded = true |
||
) |
GridType::Ptr openvdb::v12_0::tools::meanCurvature | ( | const GridType & | grid, |
const MaskT & | mask, | ||
bool | threaded = true |
||
) |
Return the total amount of memory in bytes occupied by this tree.
This method returns the total in-core memory usage which can be different to the maximum possible memory usage for trees which have not been fully deserialized (via delay-loading). Thus, this is the current true memory consumption.
Return the deserialized memory usage of this tree. This is not necessarily equal to the current memory usage (returned by tools::memUsage) if delay-loading is enabled. See File::open.
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.
GridType
containing a narrow-band level set representation of the input mesh.TypeError | if GridType is not scalar or not floating-point |
xform | transform for the output grid |
points | list of world space point positions |
triangles | triangle index list |
halfWidth | half 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.
GridType
containing a narrow-band level set representation of the input mesh.TypeError | if GridType is not scalar or not floating-point |
xform | transform for the output grid |
points | list of world space point positions |
quads | quad index list |
halfWidth | half 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.
GridType
containing a narrow-band level set representation of the input mesh.TypeError | if GridType is not scalar or not floating-point |
xform | transform for the output grid |
points | list of world space point positions |
triangles | triangle index list |
quads | quad index list |
halfWidth | half 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.
GridType
containing a narrow-band signed distance field representation of the input mesh.TypeError | if GridType is not scalar or not floating-point |
xform | transform for the output grid |
points | list of world space point positions |
triangles | triangle index list |
quads | quad index list |
exBandWidth | the exterior narrow-band width in voxel units |
inBandWidth | the 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.
GridType
containing a narrow-band unsigned distance field representation of the input mesh.TypeError | if GridType is not scalar or not floating-point |
xform | transform for the output grid |
points | list of world space point positions |
triangles | triangle index list |
quads | quad index list |
bandWidth | the 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 , |
||
InteriorTest | interiorTest = nullptr , |
||
InteriorTestStrategy | interiorTestStrat = EVAL_EVERY_VOXEL |
||
) |
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 , |
||
InteriorTest | interiorTest = nullptr , |
||
InteriorTestStrategy | interiorTestStrategy = EVAL_EVERY_VOXEL |
||
) |
Convert polygonal meshes that consist of quads and/or triangles into signed or unsigned distance field volumes.
interrupter | a callback to interrupt the conversion process that conforms to the util::NullInterrupter interface |
mesh | mesh data access class that conforms to the MeshDataAdapter interface |
transform | world-to-index-space transform |
exteriorBandWidth | exterior narrow band width in voxel units |
interiorBandWidth | interior narrow band width in voxel units (set this value to std::numeric_limits<float>::max() to fill interior regions with distance values) |
flags | optional conversion flags defined in MeshToVolumeFlags |
polygonIndexGrid | optional grid output that will contain the closest-polygon index for each voxel in the active narrow band region |
interiorTest | function Coord -> Bool that evaluates to true inside of the mesh and false outside, for more see evaluatInteriorTest |
interiorTestStrat | determines how the interiorTest is used, see InteriorTestStrategy |
math::MinMax< typename TreeT::ValueType > minMax | ( | const TreeT & | tree, |
bool | threaded = true |
||
) |
Return the minimum and maximum active values in this tree.
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.
tree | const tree to be tested for active values. |
bbox | index 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.
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::v12_0::tools::normalize | ( | const GridType & | grid, |
bool | threaded = true |
||
) |
GridType::Ptr openvdb::v12_0::tools::normalize | ( | const GridType & | grid, |
const MaskT & | mask, | ||
bool | threaded = true |
||
) |
|
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.
inIter | a non-const or (preferably) const iterator over an input grid or its tree (Grid::ValueOnCIter , Tree::NodeIter , etc.) |
outGrid | an empty grid to be populated |
op | a functor of the form void op(const InIterT&, OutGridT::ValueAccessor&) , where InIterT is the type of inIter |
threaded | if true, transform multiple values of the input grid in parallel |
shareOp | if true and threaded is true, all threads use the same functor; otherwise, each thread gets its own copy of the original functor |
merge | how to merge intermediate results from multiple threads (see Types.h) |
tbb::parallel_for()
or tbb::parallel_reduce()
in conjunction with a tree::IteratorRange that wraps a grid or tree iterator.
|
inline |
|
inline |
Same as opStatistics except it returns a math::Extrema vs a math::Stats.
|
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.
iter | an iterator over the values of a grid or its tree (Grid::ValueOnCIter , Tree::ValueOffIter , etc.) |
op | an operator object with a method of the form double result(Accessor&, const Coord&) |
threaded | if true, iterate over the grid in parallel |
result()
methods are of the form double result(const Map&, Accessor&, const Coord&)
, must be wrapped in a math::MapAdapter.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
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.
tree | the tree to be pruned |
tolerance | tolerance within which values are considered to be equal |
threaded | enable or disable threading (threading is enabled by default) |
grainSize | used 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.
tree | the tree to be pruned |
threaded | enable or disable threading (threading is enabled by default) |
grainSize | used 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.
tree | the tree to be pruned |
value | value assigned to inactive tiles created during pruning |
threaded | enable or disable threading (threading is enabled by default) |
grainSize | used 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.
tree | the tree to be pruned |
threaded | enable or disable threading (threading is enabled by default) |
grainSize | used to control the threading granularity (default is 1) |
ValueError | if 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.
tree | the tree to be pruned |
outsideWidth | the width of the outside of the narrow band |
insideWidth | the width of the inside of the narrow band |
threaded | enable or disable threading (threading is enabled by default) |
grainSize | used to control the threading granularity (default is 1) |
ValueError | if 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.
tree | the tree to be pruned |
tolerance | tolerance within which values are considered to be equal |
threaded | enable or disable threading (threading is enabled by default) |
grainSize | used 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.
inGrid | the grid to be resampled |
outGrid | the grid into which to write the resampled voxel data |
interrupter | an object adhering to the util::NullInterrupter interface |
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.
inGrid | the grid to be resampled |
outGrid | the grid into which to write the resampled voxel data |
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.
volume
and whose active and true
values correspond to the interior of the input signed distance field.volume | Signed distance field / level set volume. |
isovalue | Threshold below which values are considered part of the interior region. |
SdfGridT::template ValueConverter<ExtValueT>::Type::Ptr openvdb::v12_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.
sdfGrid | An approximate signed distance field to the specified iso-surface. |
op | Functor with signature [](const Vec3R &xyz)->ExtValueT that defines the Dirichlet boundary condition, on the iso-surface, of the field to be extended. |
background | Background value of return grid with the extension field. |
isoValue | A value which defines a smooth iso-surface that intersects active voxels in sdfGrid. |
nIter | Number of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps. |
mode | Determines the mode of updating the extension field. SWEEP_ALL will update all voxels of the extension field affected by the fast sweeping algorithm. SWEEP_GREATER_THAN_ISOVALUE will update all voxels corresponding to 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. |
extGrid | Optional parameter required to supply a default value for the extension field when SWEEP_GREATER_THAN_ISOVALUE or SWEEP_LESS_THAN_ISOVALUE mode is picked for mode. When SWEEP_GREATER_THAN_ISOVALUE is supplied as an argument for mode, the extension field voxel will default to the value of the extGrid in that position if it corresponds to a level-set value that is less than the isovalue. Otherwise, the extension field voxel value will be computed by the Fast Sweeping algorithm. The opposite convention is implemented when SWEEP_LESS_THAN_ISOVALUE is supplied as an argument for mode. |
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!
SdfGridT::template ValueConverter<ExtValueT>::Type::Ptr openvdb::v12_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::v12_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.
grid | level set/SDF grid to transform |
cutoffDistance | optional world space cutoff distance for the ramp (automatically clamped if greater than the interior narrow band width) |
OPENVDB_DOCS_INTERNAL void openvdb::v12_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.
grid | level set/SDF grid to transform |
cutoffDistance | optional 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.
sdfGrid | An approximate signed distance field to the specified iso-surface. |
isoValue | A value which defines a smooth iso-surface that intersects active voxels in sdfGrid. |
nIter | Number of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps. |
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!
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.
sdfGrid | Scalar (floating-point) volume from which an iso-surface can be defined. |
op | Functor with signature [](const Vec3R &xyz)->ExtValueT that defines the Dirichlet boundary condition, on the iso-surface, of the field to be extended. |
background | Background value of return grid with the extension field. |
isoValue | A value which defines a smooth iso-surface that intersects active voxels in sdfGrid. |
nIter | Number of iterations of the fast sweeping algorithm. Each iteration performs 2^3 = 8 individual sweeps. |
mode | Determines the mode of updating the extension field. SWEEP_ALL will update all voxels of the extension field affected by the fast sweeping algorithm. SWEEP_GREATER_THAN_ISOVALUE will update all voxels corresponding to 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. |
extGrid | Optional parameter required to supply a default value for the extension field when SWEEP_GREATER_THAN_ISOVALUE or SWEEP_LESS_THAN_ISOVALUE mode is picked for mode. When SWEEP_GREATER_THAN_ISOVALUE is supplied as an argument for mode, the extension field voxel will default to the value of the extGrid in that position if it corresponds to a level-set value that is less than the isovalue. Otherwise, the extension field voxel value will be computed by the Fast Sweeping algorithm. The opposite convention is implemented when SWEEP_LESS_THAN_ISOVALUE is supplied as an argument for mode. |
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!
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.
volume | Input grid or tree |
segments | Output 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.
volume | Input signed distance field / level set volume |
segments | Output 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().
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().
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().
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().
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.
tree | Tree or LeafManager that will be flood filled. |
threaded | enable or disable threading (threading is enabled by default) |
grainSize | used to control the threading granularity (default is 1) |
minLevel | Specify the lowest tree level to process (leafnode level = 0) |
TypeError | if 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.
tree | Tree or LeafManager that will be flood filled |
outsideWidth | the width of the outside of the narrow band |
insideWidth | the width of the inside of the narrow band |
threaded | enable or disable threading (threading is enabled by default) |
grainSize | used to control the threading granularity (default is 1) |
minLevel | Specify the lowest tree level to process (leafnode level = 0) |
TypeError | if the ValueType of tree is not floating-point. |
|
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.
iter | an iterator over the values of a grid or its tree (Grid::ValueOnCIter , Tree::ValueOffIter , etc.) |
threaded | if true, iterate over the grid in parallel |
|
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.
iter | an iterator over the values of a grid or its tree (Grid::ValueOnCIter , Tree::ValueOffIter , etc.) |
op | a 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 |
threaded | if true, iterate over the grid in parallel |
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.
float
grid | Input grid of arbitrary type whose active voxels are used in constructing the level set. |
halfWidth | Half the width of the narrow band in voxel units. |
closingSteps | Number of morphological closing steps used to fill gaps in the active voxel region. |
dilation | Number of voxels to expand the active voxel region. |
smoothingSteps | Number 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.
float
grid | Input grid of arbitrary type whose active voxels are used in constructing the level set. |
halfWidth | Half the width of the narrow band in voxel units. |
closingSteps | Number of morphological closing steps used to fill gaps in the active voxel region. |
dilation | Number of voxels to expand the active voxel region. |
smoothingSteps | Number of smoothing interations. |
interrupt | Optional 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.
void openvdb::v12_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
dense | A dense grid to be transformed |
bbox | Index space bounding box, define region where the transformation is applied |
op | A functor that acts on the dense grid value type |
parallel | Used 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; } }; |
void openvdb::v12_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 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.).
TypeError | if 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.
grid | A VDB volume. |
values | List of unique inactive values, returned by this method. |
numValues | Number of values to look for. |
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.
tree | tree to be visited. |
op | user-supplied functor, see examples for interface details. |
idx | optional offset to start sequential node indexing from a non-zero index. |
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.
grid | a scalar grid to mesh |
points | output list of world space points |
quads | output quad index list |
isovalue | determines which isosurface to mesh |
TypeError | if 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.
When converting to polygons, the adaptivity threshold determines how closely the isosurface is matched by the resulting mesh. Higher thresholds will allow more variation in polygon size, using fewer polygons to express the surface. Triangles will only be created for areas of the mesh which hit the adaptivity threshold and can't be represented as quads.
grid | a scalar grid to mesh |
points | output list of world space points |
triangles | output triangle index list |
quads | output quad index list |
isovalue | determines which isosurface to mesh |
adaptivity | surface adaptivity threshold [0 to 1] |
relaxDisorientedTriangles | toggle relaxing disoriented triangles during adaptive meshing. |
TypeError | if grid does not have a scalar value type |
OutGridT const XformOp bool bool |
else |
OutGridT const XformOp bool MergePolicy merge = MERGE_ACTIVE_STATES) |
OutGridT const XformOp & op |
OutGridT & outGrid |
OutGridT const XformOp bool threaded = true |