OpenVDB: openvdb::v3_2_0::tools::volume_to_mesh_internal Namespace Reference

OpenVDB 3.2.0

Classes | Enumerations | Functions | Variables
openvdb::v3_2_0::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 | UniquePtr
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 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

anonymous enum

Bit-flags used to classify cells.

Enumerator
SIGNS |
EDGES |
INSIDE |
XEDGE |
YEDGE |
ZEDGE |
SEAM |

## ◆ anonymous enum

anonymous enum

Utility methods for point quantization.

Enumerator
MASK_FIRST_10_BITS |
MASK_DIRTY_BIT |
MASK_INVALID_BIT |

## Function Documentation

## ◆ applySurfaceMask()

void openvdb::v3_2_0::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

## ◆ collectCornerValues() [1/2]

void openvdb::v3_2_0::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.

## ◆ collectCornerValues() [2/2]

void openvdb::v3_2_0::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 coordinate.

## ◆ computeAuxiliaryData()

void openvdb::v3_2_0::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

## ◆ computeCellPoints() [1/2]

void openvdb::v3_2_0::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`.

## ◆ computeCellPoints() [2/2]

void openvdb::v3_2_0::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.

## ◆ computeMaskedPoint()

int openvdb::v3_2_0::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.

## ◆ computePoint()

Vec3d openvdb::v3_2_0::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.

## ◆ computeSignFlags()

uint8_t openvdb::v3_2_0::tools::volume_to_mesh_internal::computeSignFlags | ( | const math::Tuple< 8, ValueType > & | values,
|  | const ValueType | iso
| ) |  |
| inline

## ◆ computeWeightedPoint()

Vec3d openvdb::v3_2_0::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`.

## ◆ constructPolygons()

void openvdb::v3_2_0::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

## ◆ correctCellSigns()

void openvdb::v3_2_0::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.

## ◆ evalCellSigns() [1/2]

uint8_t openvdb::v3_2_0::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.

## ◆ evalCellSigns() [2/2]

uint8_t openvdb::v3_2_0::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`.

## ◆ evalExtrenalVoxelEdges()

void openvdb::v3_2_0::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.

## ◆ evalExtrenalVoxelEdgesInv()

void openvdb::v3_2_0::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.

## ◆ evalInternalVoxelEdges()

void openvdb::v3_2_0::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.

## ◆ evalZeroCrossing()

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

linear interpolation.

## ◆ fillArray()

void openvdb::v3_2_0::tools::volume_to_mesh_internal::fillArray | ( | ValueType * | array,
|  | const ValueType & | val,
|  | const size_t | length
| ) |  |
| inline

## ◆ getCellVertexValues() [1/2]

void openvdb::v3_2_0::tools::volume_to_mesh_internal::getCellVertexValues | ( | const AccessorT & | accessor,
|  | Coord | ijk,
|  | math::Tuple< 8, typename AccessorT::ValueType > & | values
| ) |  |
| inline

## ◆ getCellVertexValues() [2/2]

void openvdb::v3_2_0::tools::volume_to_mesh_internal::getCellVertexValues | ( | const LeafT & | leaf,
|  | const Index | offset,
|  | math::Tuple< 8, typename LeafT::ValueType > & | values
| ) |  |
| inline

## ◆ identifySurfaceIntersectingVoxels()

void openvdb::v3_2_0::tools::volume_to_mesh_internal::identifySurfaceIntersectingVoxels | ( | typename InputTreeType::template ValueConverter< bool >::Type & | intersectionTree,
|  | const InputTreeType & | inputTree,
|  | typename InputTreeType::ValueType | isovalue
| ) |  |
| inline

## ◆ isBoolValue()

bool openvdb::v3_2_0::tools::volume_to_mesh_internal::isBoolValue | ( |  | ) |
| inline

## ◆ isBoolValue< bool >()

bool openvdb::v3_2_0::tools::volume_to_mesh_internal::isBoolValue< bool > | ( |  | ) |
| inline

## ◆ isInsideValue()

bool openvdb::v3_2_0::tools::volume_to_mesh_internal::isInsideValue | ( | T | value,
|  | T | isovalue
| ) |  |
| inline

## ◆ isInsideValue< bool >()

bool openvdb::v3_2_0::tools::volume_to_mesh_internal::isInsideValue< bool > | ( | bool | value,
|  | bool |
| ) |  |
| inline

## ◆ isMergable()

bool openvdb::v3_2_0::tools::volume_to_mesh_internal::isMergable | ( | LeafType & | leaf,
|  | const Coord & | start,
|  | int | dim,
|  | typename LeafType::ValueType::value_type | adaptivity
| ) |  |
| inline

## ◆ isNonManifold()

bool openvdb::v3_2_0::tools::volume_to_mesh_internal::isNonManifold | ( | const AccessorT & | accessor,
|  | const Coord & | ijk,
|  | typename AccessorT::ValueType | isovalue,
|  | const int | dim
| ) |  |
| inline

## ◆ isPlanarQuad()

bool openvdb::v3_2_0::tools::volume_to_mesh_internal::isPlanarQuad | ( | const Vec3d & | p0,
|  | const Vec3d & | p1,
|  | const Vec3d & | p2,
|  | const Vec3d & | p3,
|  | double | epsilon = `0.001`
| ) |  |
| inline

## ◆ markSeamLineData()

void openvdb::v3_2_0::tools::volume_to_mesh_internal::markSeamLineData | ( | SignDataTreeType & | signFlagsTree,
|  | const SignDataTreeType & | refSignFlagsTree
| ) |  |
| inline

## ◆ maskActiveTileBorders()

void openvdb::v3_2_0::tools::volume_to_mesh_internal::maskActiveTileBorders | ( | const InputTreeType & | inputTree,
|  | typename InputTreeType::ValueType | iso,
|  | typename InputTreeType::template ValueConverter< bool >::Type & | mask
| ) |  |
| inline

## ◆ matchEdgeGroup()

int openvdb::v3_2_0::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.

## ◆ mergeVoxels()

void openvdb::v3_2_0::tools::volume_to_mesh_internal::mergeVoxels | ( | LeafType & | leaf,
|  | const Coord & | start,
|  | int | dim,
|  | int | regionId
| ) |  |
| inline

## ◆ packPoint()

uint32_t openvdb::v3_2_0::tools::volume_to_mesh_internal::packPoint | ( | const Vec3d & | v | ) |
| inline

Utility methods for point quantization.

## ◆ relaxDisorientedTriangles()

void openvdb::v3_2_0::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

## ◆ reviseSeamLineFlags()

void openvdb::v3_2_0::tools::volume_to_mesh_internal::reviseSeamLineFlags | ( | PolygonPoolList & | polygonPoolList,
|  | size_t | polygonPoolListSize,
|  | std::vector< uint8_t > & | pointFlags
| ) |  |
| inline

## ◆ subdivideNonplanarSeamLineQuads()

void openvdb::v3_2_0::tools::volume_to_mesh_internal::subdivideNonplanarSeamLineQuads | ( | PolygonPoolList & | polygonPoolList,
|  | size_t | polygonPoolListSize,
|  | PointList & | pointList,
|  | size_t & | pointListSize,
|  | std::vector< uint8_t > & | pointFlags
| ) |  |
| inline

## ◆ unpackPoint()

Vec3d openvdb::v3_2_0::tools::volume_to_mesh_internal::unpackPoint | ( | uint32_t | data | ) |
| inline

Utility methods for point quantization.

## Variable Documentation

## ◆ sAdaptable

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.

## ◆ sAmbiguousFace

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.

## ◆ sEdgeGroupTable

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.