OpenVDB  5.2.0
Classes | Enumerations | Functions | Variables
openvdb::v5_2::tools::volume_to_mesh_internal Namespace Reference

Classes

struct  AdaptiveLeafNodePointCount
 
struct  AdaptivePrimBuilder
 
struct  ComputeAuxiliaryData
 
struct  ComputePoints
 
struct  ComputePolygons
 
struct  CopyArray
 
struct  FillArray
 
struct  FlagAndCountQuadsToSubdivide
 
struct  IdentifyIntersectingVoxels
 
struct  LeafNodePointCount
 
struct  LeafNodeVoxelOffsets
 
struct  MapPoints
 
struct  MaskBorderVoxels
 
struct  MaskDisorientedTrianglePoints
 
struct  MaskIntersectingVoxels
 
struct  MaskSeamLineVoxels
 
struct  MaskSurface
 
struct  MaskTileBorders
 
struct  MergeVoxelRegions
 
class  PointListCopy
 
struct  ReviseSeamLineFlags
 
struct  SeamLineWeights
 
struct  SetSeamLineFlags
 
struct  SubdivideQuads
 
struct  SyncMaskValues
 
struct  TransferSeamLineFlags
 
struct  UniformPrimBuilder
 
struct  VoxelEdgeAccessor
 Utility method to marks all voxels that share an edge. More...
 

Enumerations

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 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 (ijk) 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...
 

Enumeration Type Documentation

anonymous enum

Bit-flags used to classify cells.

Enumerator
SIGNS 
EDGES 
INSIDE 
XEDGE 
YEDGE 
ZEDGE 
SEAM 
anonymous enum

Utility methods for point quantization.

Enumerator
MASK_FIRST_10_BITS 
MASK_DIRTY_BIT 
MASK_INVALID_BIT 

Function Documentation

void openvdb::v5_2::tools::volume_to_mesh_internal::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 
)
inline
void openvdb::v5_2::tools::volume_to_mesh_internal::collectCornerValues ( const LeafT &  leaf,
const Index  offset,
std::vector< double > &  values 
)
inline

Extracts the eight corner values for leaf inclusive cells.

void openvdb::v5_2::tools::volume_to_mesh_internal::collectCornerValues ( const AccessorT &  acc,
const Coord &  ijk,
std::vector< double > &  values 
)
inline

Extracts the eight corner values for a cell starting at the given (ijk) coordinate.

void openvdb::v5_2::tools::volume_to_mesh_internal::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 
)
inline
void openvdb::v5_2::tools::volume_to_mesh_internal::computeCellPoints ( std::vector< Vec3d > &  points,
const std::vector< double > &  values,
unsigned char  signs,
double  iso 
)
inline

Computes the average cell points defined by the sign configuration signs and the given corner values values.

void openvdb::v5_2::tools::volume_to_mesh_internal::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 
)
inline

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.

int openvdb::v5_2::tools::volume_to_mesh_internal::computeMaskedPoint ( Vec3d &  avg,
const std::vector< double > &  values,
unsigned char  signs,
unsigned char  signsMask,
unsigned char  edgeGroup,
double  iso 
)
inline

Computes the average cell point for a given edge group, ignoring edge samples present in the signsMask configuration.

Vec3d openvdb::v5_2::tools::volume_to_mesh_internal::computePoint ( const std::vector< double > &  values,
unsigned char  signs,
unsigned char  edgeGroup,
double  iso 
)
inline

Computes the average cell point for a given edge group.

uint8_t openvdb::v5_2::tools::volume_to_mesh_internal::computeSignFlags ( const math::Tuple< 8, ValueType > &  values,
const ValueType  iso 
)
inline
Vec3d openvdb::v5_2::tools::volume_to_mesh_internal::computeWeightedPoint ( const Vec3d &  p,
const std::vector< double > &  values,
unsigned char  signs,
unsigned char  edgeGroup,
double  iso 
)
inline

Computes the average cell point for a given edge group, by computing convex weights based on the distance from the sample point p.

void openvdb::v5_2::tools::volume_to_mesh_internal::constructPolygons ( bool  invertSurfaceOrientation,
Int16  flags,
Int16  refFlags,
const Vec3i &  offsets,
const Coord &  ijk,
const SignAccT &  signAcc,
const IdxAccT &  idxAcc,
PrimBuilder &  mesher 
)
inline
void openvdb::v5_2::tools::volume_to_mesh_internal::correctCellSigns ( uint8_t &  signs,
uint8_t  face,
const AccessorT &  acc,
Coord  ijk,
typename AccessorT::ValueType  iso 
)
inline

Used to correct topological ambiguities related to two adjacent cells that share an ambiguous face.

uint8_t openvdb::v5_2::tools::volume_to_mesh_internal::evalCellSigns ( const AccessorT &  accessor,
const Coord &  ijk,
typename AccessorT::ValueType  iso 
)
inline

General method that computes the cell-sign configuration at the given ijk coordinate.

uint8_t openvdb::v5_2::tools::volume_to_mesh_internal::evalCellSigns ( const LeafT &  leaf,
const Index  offset,
typename LeafT::ValueType  iso 
)
inline

Leaf node optimized method that computes the cell-sign configuration at the given local offset.

void openvdb::v5_2::tools::volume_to_mesh_internal::evalExtrenalVoxelEdges ( VoxelEdgeAcc &  edgeAcc,
TreeAcc &  acc,
const LeafNode &  lhsNode,
const LeafNodeVoxelOffsets voxels,
const typename LeafNode::ValueType  iso 
)

Utility method to check for sign changes along the x + 1, y + 1 or z + 1 directions. The direction is determined by the edgeAcc parameter. All voxels that reside in the specified leafnode face: back, top or right are evaluated.

void openvdb::v5_2::tools::volume_to_mesh_internal::evalExtrenalVoxelEdgesInv ( VoxelEdgeAcc &  edgeAcc,
TreeAcc &  acc,
const LeafNode &  leafnode,
const LeafNodeVoxelOffsets voxels,
const typename LeafNode::ValueType  iso 
)

Utility method to check for sign changes along the x - 1, y - 1 or z - 1 directions. The direction is determined by the edgeAcc parameter. All voxels that reside in the specified leafnode face: front, bottom or left are evaluated.

void openvdb::v5_2::tools::volume_to_mesh_internal::evalInternalVoxelEdges ( VoxelEdgeAcc &  edgeAcc,
const LeafNode &  leafnode,
const LeafNodeVoxelOffsets voxels,
const typename LeafNode::ValueType  iso 
)

Utility method to check for sign changes along the x + 1, y + 1 or z + 1 directions. The direction is determined by the edgeAcc parameter. Only voxels that have internal neighbours are evaluated.

double openvdb::v5_2::tools::volume_to_mesh_internal::evalZeroCrossing ( double  v0,
double  v1,
double  iso 
)
inline

linear interpolation.

void openvdb::v5_2::tools::volume_to_mesh_internal::fillArray ( ValueType *  array,
const ValueType &  val,
const size_t  length 
)
inline
void openvdb::v5_2::tools::volume_to_mesh_internal::getCellVertexValues ( const AccessorT &  accessor,
Coord  ijk,
math::Tuple< 8, typename AccessorT::ValueType > &  values 
)
inline
void openvdb::v5_2::tools::volume_to_mesh_internal::getCellVertexValues ( const LeafT &  leaf,
const Index  offset,
math::Tuple< 8, typename LeafT::ValueType > &  values 
)
inline
void openvdb::v5_2::tools::volume_to_mesh_internal::identifySurfaceIntersectingVoxels ( typename InputTreeType::template ValueConverter< bool >::Type &  intersectionTree,
const InputTreeType &  inputTree,
typename InputTreeType::ValueType  isovalue 
)
inline
bool openvdb::v5_2::tools::volume_to_mesh_internal::isBoolValue ( )
inline
bool openvdb::v5_2::tools::volume_to_mesh_internal::isInsideValue ( value,
isovalue 
)
inline
bool openvdb::v5_2::tools::volume_to_mesh_internal::isInsideValue< bool > ( bool  value,
bool   
)
inline
bool openvdb::v5_2::tools::volume_to_mesh_internal::isMergable ( LeafType &  leaf,
const Coord &  start,
int  dim,
typename LeafType::ValueType::value_type  adaptivity 
)
inline
bool openvdb::v5_2::tools::volume_to_mesh_internal::isNonManifold ( const AccessorT &  accessor,
const Coord &  ijk,
typename AccessorT::ValueType  isovalue,
const int  dim 
)
inline
bool openvdb::v5_2::tools::volume_to_mesh_internal::isPlanarQuad ( const Vec3d &  p0,
const Vec3d &  p1,
const Vec3d &  p2,
const Vec3d &  p3,
double  epsilon = 0.001 
)
inline
void openvdb::v5_2::tools::volume_to_mesh_internal::markSeamLineData ( SignDataTreeType &  signFlagsTree,
const SignDataTreeType &  refSignFlagsTree 
)
inline
void openvdb::v5_2::tools::volume_to_mesh_internal::maskActiveTileBorders ( const InputTreeType &  inputTree,
typename InputTreeType::ValueType  iso,
typename InputTreeType::template ValueConverter< bool >::Type &  mask 
)
inline
int openvdb::v5_2::tools::volume_to_mesh_internal::matchEdgeGroup ( unsigned char  groupId,
unsigned char  lhsSigns,
unsigned char  rhsSigns 
)
inline

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.

void openvdb::v5_2::tools::volume_to_mesh_internal::mergeVoxels ( LeafType &  leaf,
const Coord &  start,
int  dim,
int  regionId 
)
inline
uint32_t openvdb::v5_2::tools::volume_to_mesh_internal::packPoint ( const Vec3d &  v)
inline

Utility methods for point quantization.

void openvdb::v5_2::tools::volume_to_mesh_internal::relaxDisorientedTriangles ( bool  invertSurfaceOrientation,
const InputTree &  inputTree,
const math::Transform transform,
PolygonPoolList polygonPoolList,
size_t  polygonPoolListSize,
PointList pointList,
const size_t  pointListSize 
)
inline
void openvdb::v5_2::tools::volume_to_mesh_internal::reviseSeamLineFlags ( PolygonPoolList polygonPoolList,
size_t  polygonPoolListSize,
std::vector< uint8_t > &  pointFlags 
)
inline
void openvdb::v5_2::tools::volume_to_mesh_internal::subdivideNonplanarSeamLineQuads ( PolygonPoolList polygonPoolList,
size_t  polygonPoolListSize,
PointList pointList,
size_t &  pointListSize,
std::vector< uint8_t > &  pointFlags 
)
inline
Vec3d openvdb::v5_2::tools::volume_to_mesh_internal::unpackPoint ( uint32_t  data)
inline

Utility methods for point quantization.

Variable Documentation

const bool sAdaptable[256]
Initial value:
= {
1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,1,0,1,0,1,0,1,
1,0,1,1,0,0,1,1,0,0,0,1,0,0,1,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,0,1,
1,0,0,0,1,0,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,0,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,0,1,0,0,0,0,1,1,0,1,1,1,0,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,1,0,0,0,1,
1,0,0,0,1,0,1,0,1,1,0,0,1,1,1,1,1,1,0,0,1,0,0,0,1,1,0,0,1,1,0,1,
1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,1,1}

Used to quickly determine if a given cell is adaptable.

const unsigned char sAmbiguousFace[256]
Initial value:
= {
0,0,0,0,0,5,0,0,0,0,5,0,0,0,0,0,0,0,1,0,0,5,1,0,4,0,0,0,4,0,0,0,
0,1,0,0,2,0,0,0,0,1,5,0,2,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,0,0,0,0,
0,0,2,2,0,5,0,0,3,3,0,0,0,0,0,0,6,6,0,0,6,0,0,0,0,0,0,0,0,0,0,0,
0,1,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,4,0,4,3,0,3,0,0,0,5,0,0,0,0,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,
6,0,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}

Contains the ambiguous face index for certain cell configuration.

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.