8 #ifndef OPENVDB_TOOLS_MASK_HAS_BEEN_INCLUDED
9 #define OPENVDB_TOOLS_MASK_HAS_BEEN_INCLUDED
13 #include <type_traits>
27 template<
typename Gr
idType>
28 inline typename GridType::template ValueConverter<bool>::Type::Ptr
29 interiorMask(
const GridType& grid,
const double isovalue = 0.0);
35 namespace mask_internal {
38 template<
typename Gr
idType>
40 static const bool isBool = std::is_same<typename GridType::ValueType, bool>::value;
41 using BoolGridType =
typename GridType::template ValueConverter<bool>::Type;
42 using BoolGridPtrType =
typename BoolGridType::Ptr;
47 template<
typename Gr
idType>
48 inline typename std::enable_if<std::is_floating_point<typename GridType::ValueType>::value,
49 typename mask_internal::Traits<GridType>::BoolGridPtrType>::type
50 doLevelSetInteriorMask(
const GridType& grid,
const double isovalue)
52 using GridValueT =
typename GridType::ValueType;
53 using MaskGridPtrT =
typename mask_internal::Traits<GridType>::BoolGridPtrType;
59 return MaskGridPtrT{};
65 template<
typename Gr
idType>
66 inline typename std::enable_if<!std::is_floating_point<typename GridType::ValueType>::value,
67 typename mask_internal::Traits<GridType>::BoolGridPtrType>::type
68 doLevelSetInteriorMask(
const GridType&,
const double )
70 using MaskGridPtrT =
typename mask_internal::Traits<GridType>::BoolGridPtrType;
71 return MaskGridPtrT{};
76 template<
typename Gr
idType>
77 inline typename std::enable_if<mask_internal::Traits<GridType>::isBool,
78 typename mask_internal::Traits<GridType>::BoolGridPtrType>::type
79 doInteriorMask(
const GridType& grid,
const double )
82 return grid.deepCopy();
87 template<
typename Gr
idType>
88 inline typename std::enable_if<!(mask_internal::Traits<GridType>::isBool),
89 typename mask_internal::Traits<GridType>::BoolGridPtrType>::type
90 doInteriorMask(
const GridType& grid,
const double isovalue)
92 using MaskGridT =
typename mask_internal::Traits<GridType>::BoolGridType;
95 if (
auto maskGridPtr = doLevelSetInteriorMask(grid, isovalue)) {
100 auto maskGridPtr = MaskGridT::create(
false);
101 maskGridPtr->setTransform(grid.transform().copy());
102 maskGridPtr->topologyUnion(grid);
109 template<
typename Gr
idType>
110 inline typename GridType::template ValueConverter<bool>::Type::Ptr
113 return mask_internal::doInteriorMask(grid, isovalue);
Miscellaneous utility methods that operate primarily or exclusively on level set grids.
@ GRID_LEVEL_SET
Definition: openvdb/Types.h:333
Definition: openvdb/Exceptions.h:13
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h.in:116
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h.in:178