OpenVDB: VolumeToMesh.h File Reference

OpenVDB 7.0.0

Classes | Namespaces | Enumerations | Functions | Variables
VolumeToMesh.h File Reference

Extract polygonal surfaces from scalar volumes. More...

`#include <openvdb/Platform.h>`
`#include <openvdb/math/Operators.h>`
`#include <openvdb/tree/ValueAccessor.h>`
`#include <openvdb/util/Util.h>`
`#include <tbb/blocked_range.h>`
`#include <tbb/parallel_for.h>`
`#include <tbb/parallel_reduce.h>`
`#include <tbb/task_scheduler_init.h>`
`#include <cmath>`
`#include <map>`
`#include <memory>`
`#include <set>`
`#include <type_traits>`
`#include <vector>`

Go to the source code of this file.

## Classes
class | PolygonPool
| Collection of quads and triangles. More...
struct | VolumeToMesh
| Mesh any scalar grid that has a continuous isosurface. More...
struct | FillArray< ValueType >
struct | ComputePoints< InputTreeType >
struct | SeamLineWeights< InputTreeType >
struct | SetSeamLineFlags< TreeType >
struct | TransferSeamLineFlags< BoolTreeType, SignDataType >
struct | MaskSeamLineVoxels< TreeType >
struct | MergeVoxelRegions< InputGridType >
struct | UniformPrimBuilder
struct | AdaptivePrimBuilder
struct | MaskTileBorders< InputTreeType >
class | PointListCopy
struct | LeafNodeVoxelOffsets
struct | VoxelEdgeAccessor< AccessorT, _AXIS >
| Utility method to marks all voxels that share an edge. More...
struct | IdentifyIntersectingVoxels< InputTreeType >
struct | MaskIntersectingVoxels< InputTreeType >
struct | MaskBorderVoxels< BoolTreeType >
struct | SyncMaskValues< BoolTreeType >
struct | MaskSurface< BoolTreeType >
struct | ComputeAuxiliaryData< InputTreeType >
struct | LeafNodePointCount< LeafNodeLog2Dim >
struct | AdaptiveLeafNodePointCount< PointIndexLeafNode >
struct | MapPoints< PointIndexLeafNode >
struct | ComputePolygons< TreeType, PrimBuilder >
struct | CopyArray< T >
struct | FlagAndCountQuadsToSubdivide
struct | SubdivideQuads
struct | ReviseSeamLineFlags
struct | MaskDisorientedTrianglePoints< InputTreeType >

## Namespaces
| openvdb
| openvdb::v7_0
| openvdb::v7_0::tools
| openvdb::v7_0::tools::volume_to_mesh_internal

## Typedefs
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 | { POLYFLAG_EXTERIOR = 0x1, POLYFLAG_FRACTURE_SEAM = 0x2, POLYFLAG_SUBDIVIDED = 0x4 }
| Polygon flags, used for reference based meshing. More...
enum | { SIGNS = 0xFF, EDGES = 0xE00, INSIDE = 0x100, XEDGE = 0x200, YEDGE = 0x400, ZEDGE = 0x800, SEAM = 0x1000 }
| Bit-flags used to classify cells. More...

## Functions
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 ValueType >
void | fillArray (ValueType *array, const ValueType &val, const size_t length)
bool | isPlanarQuad (const Vec3d &p0, const Vec3d &p1, const Vec3d &p2, const Vec3d &p3, double epsilon=0.001)
template<typename T >
bool | isBoolValue ()
template<>
bool | isBoolValue< bool > ()
template<typename T >
bool | isInsideValue (T value, T isovalue)
template<>
bool | isInsideValue< bool > (bool value, bool)
template<typename AccessorT >
void | getCellVertexValues (const AccessorT &accessor, Coord ijk, math::Tuple< 8, typename AccessorT::ValueType > &values)
template<typename LeafT >
void | getCellVertexValues (const LeafT &leaf, const Index offset, math::Tuple< 8, typename LeafT::ValueType > &values)
template<typename ValueType >
uint8_t | computeSignFlags (const math::Tuple< 8, ValueType > &values, const ValueType iso)
template<typename AccessorT >
uint8_t | evalCellSigns (const AccessorT &accessor, const Coord &ijk, typename AccessorT::ValueType iso)
| General method that computes the cell-sign configuration at the given `ijk` coordinate. More...
template<typename LeafT >
uint8_t | evalCellSigns (const LeafT &leaf, const Index offset, typename LeafT::ValueType iso)
| Leaf node optimized method that computes the cell-sign configuration at the given local `offset`. More...
template<class AccessorT >
void | correctCellSigns (uint8_t &signs, uint8_t face, const AccessorT &acc, Coord ijk, typename AccessorT::ValueType iso)
| Used to correct topological ambiguities related to two adjacent cells that share an ambiguous face. More...
template<class AccessorT >
bool | isNonManifold (const AccessorT &accessor, const Coord &ijk, typename AccessorT::ValueType isovalue, const int dim)
template<class LeafType >
void | mergeVoxels (LeafType &leaf, const Coord &start, int dim, int regionId)
template<class LeafType >
bool | isMergable (LeafType &leaf, const Coord &start, int dim, typename LeafType::ValueType::value_type adaptivity)
double | evalZeroCrossing (double v0, double v1, double iso)
| linear interpolation. More...
template<typename LeafT >
void | collectCornerValues (const LeafT &leaf, const Index offset, std::vector< double > &values)
| Extracts the eight corner values for leaf inclusive cells. More...
template<typename AccessorT >
void | collectCornerValues (const AccessorT &acc, const Coord &ijk, std::vector< double > &values)
| Extracts the eight corner values for a cell starting at the given (i,&nbspj,&nbspk) coordinate. More...
Vec3d | computePoint (const std::vector< double > &values, unsigned char signs, unsigned char edgeGroup, double iso)
| Computes the average cell point for a given edge group. More...
int | computeMaskedPoint (Vec3d &avg, const std::vector< double > &values, unsigned char signs, unsigned char signsMask, unsigned char edgeGroup, double iso)
| Computes the average cell point for a given edge group, ignoring edge samples present in the `signsMask` configuration. More...
Vec3d | computeWeightedPoint (const Vec3d &p, const std::vector< double > &values, unsigned char signs, unsigned char edgeGroup, double iso)
| Computes the average cell point for a given edge group, by computing convex weights based on the distance from the sample point `p`. More...
void | computeCellPoints (std::vector< Vec3d > &points, const std::vector< double > &values, unsigned char signs, double iso)
| Computes the average cell points defined by the sign configuration `signs` and the given corner values `values`. More...
int | matchEdgeGroup (unsigned char groupId, unsigned char lhsSigns, unsigned char rhsSigns)
| Given a sign configuration `lhsSigns` and an edge group `groupId`, finds the corresponding edge group in a different sign configuration `rhsSigns`. Returns -1 if no match is found. More...
void | computeCellPoints (std::vector< Vec3d > &points, std::vector< bool > &weightedPointMask, const std::vector< double > &lhsValues, const std::vector< double > &rhsValues, unsigned char lhsSigns, unsigned char rhsSigns, double iso, size_t pointIdx, const uint32_t *seamPointArray)
| Computes the average cell points defined by the sign configuration `signs` and the given corner values `values`. Combines data from two different level sets to eliminate seam lines when meshing fractured segments. More...
template<typename SignDataTreeType >
void | markSeamLineData (SignDataTreeType &signFlagsTree, const SignDataTreeType &refSignFlagsTree)
template<typename SignAccT , typename IdxAccT , typename PrimBuilder >
void | constructPolygons (bool invertSurfaceOrientation, Int16 flags, Int16 refFlags, const Vec3i &offsets, const Coord &ijk, const SignAccT &signAcc, const IdxAccT &idxAcc, PrimBuilder &mesher)
template<typename InputTreeType >
void | maskActiveTileBorders (const InputTreeType &inputTree, typename InputTreeType::ValueType iso, typename InputTreeType::template ValueConverter< bool >::Type &mask)
template<typename VoxelEdgeAcc , typename LeafNode >
void | evalInternalVoxelEdges (VoxelEdgeAcc &edgeAcc, const LeafNode &leafnode, const LeafNodeVoxelOffsets &voxels, const typename LeafNode::ValueType iso)
template<typename LeafNode , typename TreeAcc , typename VoxelEdgeAcc >
void | evalExtrenalVoxelEdges (VoxelEdgeAcc &edgeAcc, TreeAcc &acc, const LeafNode &lhsNode, const LeafNodeVoxelOffsets &voxels, const typename LeafNode::ValueType iso)
template<typename LeafNode , typename TreeAcc , typename VoxelEdgeAcc >
void | evalExtrenalVoxelEdgesInv (VoxelEdgeAcc &edgeAcc, TreeAcc &acc, const LeafNode &leafnode, const LeafNodeVoxelOffsets &voxels, const typename LeafNode::ValueType iso)
template<typename InputTreeType >
void | identifySurfaceIntersectingVoxels (typename InputTreeType::template ValueConverter< bool >::Type &intersectionTree, const InputTreeType &inputTree, typename InputTreeType::ValueType isovalue)
template<typename InputGridType >
void | applySurfaceMask (typename InputGridType::TreeType::template ValueConverter< bool >::Type &intersectionTree, typename InputGridType::TreeType::template ValueConverter< bool >::Type &borderTree, const InputGridType &inputGrid, const GridBase::ConstPtr &maskGrid, bool invertMask, typename InputGridType::ValueType isovalue)
template<typename InputTreeType >
void | computeAuxiliaryData (typename InputTreeType::template ValueConverter< Int16 >::Type &signFlagsTree, typename InputTreeType::template ValueConverter< Index32 >::Type &pointIndexTree, const typename InputTreeType::template ValueConverter< bool >::Type &intersectionTree, const InputTreeType &inputTree, typename InputTreeType::ValueType isovalue)
void | subdivideNonplanarSeamLineQuads (PolygonPoolList &polygonPoolList, size_t polygonPoolListSize, PointList &pointList, size_t &pointListSize, std::vector< uint8_t > &pointFlags)
void | reviseSeamLineFlags (PolygonPoolList &polygonPoolList, size_t polygonPoolListSize, std::vector< uint8_t > &pointFlags)
template<typename InputTree >
void | relaxDisorientedTriangles (bool invertSurfaceOrientation, const InputTree &inputTree, const math::Transform &transform, PolygonPoolList &polygonPoolList, size_t polygonPoolListSize, PointList &pointList, const size_t pointListSize)

## Variables
const bool | sAdaptable [256]
| Used to quickly determine if a given cell is adaptable. More...
const unsigned char | sAmbiguousFace [256]
| Contains the ambiguous face index for certain cell configuration. More...
const unsigned char | sEdgeGroupTable [256][13]
| Lookup table for different cell sign configurations. The first entry specifies the total number of points that need to be generated inside a cell and the remaining 12 entries indicate different edge groups. More...
enum | { MASK_FIRST_10_BITS = 0x000003FF, MASK_DIRTY_BIT = 0x80000000, MASK_INVALID_BIT = 0x40000000 }
| Utility methods for point quantization. More...
uint32_t | packPoint (const Vec3d &v)
| Utility methods for point quantization. More...
Vec3d | unpackPoint (uint32_t data)
| Utility methods for point quantization. More...

## Detailed Description

Extract polygonal surfaces from scalar volumes.

Author
  Mihai Alden