|
OpenVDB
4.0.2
|
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 <boost/integer_traits.hpp>#include <boost/scoped_array.hpp>#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.
Namespaces | |
| openvdb | |
| openvdb::v4_0_2 | |
| openvdb::v4_0_2::tools | |
| openvdb::v4_0_2::tools::volume_to_mesh_internal | |
Typedefs | |
| using | PointList = boost::scoped_array< openvdb::Vec3s > |
| Point and primitive list types. More... | |
| using | PolygonPoolList = boost::scoped_array< 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 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... | |
Extract polygonal surfaces from scalar volumes.
1.8.13