Loading...
Searching...
No Matches
MeshToVolume.h File Reference

Convert polygonal meshes that consist of quads and/or triangles into signed or unsigned distance field volumes. More...

`#include <openvdb/Platform.h>`
`#include <openvdb/Types.h>`
`#include <openvdb/math/FiniteDifference.h>`
`#include <openvdb/math/Proximity.h>`
`#include <openvdb/util/NullInterrupter.h>`
`#include <openvdb/util/Util.h>`
`#include <openvdb/thread/Threading.h>`
`#include <openvdb/openvdb.h>`
`#include "ChangeBackground.h"`
`#include "Prune.h"`
`#include "SignedFloodFill.h"`
`#include <tbb/blocked_range.h>`
`#include <tbb/enumerable_thread_specific.h>`
`#include <tbb/parallel_for.h>`
`#include <tbb/parallel_reduce.h>`
`#include <tbb/partitioner.h>`
`#include <tbb/task_group.h>`
`#include <tbb/task_arena.h>`
`#include <algorithm>`
`#include <cmath>`
`#include <deque>`
`#include <limits>`
`#include <memory>`
`#include <sstream>`
`#include <type_traits>`
`#include <vector>`

Go to the source code of this file.

## Classes

struct | QuadAndTriangleDataAdapter< PointType, PolygonType >
| Contiguous quad and triangle data adapter class. More...
class | MeshToVoxelEdgeData
| Extracts and stores voxel edge intersection data from a mesh. More...
struct | MeshToVoxelEdgeData::EdgeData
| Internal edge data type. More...
class | MeshToVoxelEdgeData::GenEdgeData

## Namespaces

namespace | openvdb
namespace | openvdb::v11_0
namespace | openvdb::v11_0::tools

## Enumerations

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...

## Functions

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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
std::ostream & | operator<< (std::ostream &ostr, const MeshToVoxelEdgeData::EdgeData &rhs)
MeshToVoxelEdgeData::EdgeData | Abs (const MeshToVoxelEdgeData::EdgeData &x)

## Detailed Description

Convert polygonal meshes that consist of quads and/or triangles into signed or unsigned distance field volumes.

Note
  The signed distance field conversion requires a closed surface but not necessarily a manifold surface. Supports surfaces with self intersections and degenerate faces and is independent of mesh surface normals / polygon orientation.

Author
  Mihai Alden