35 #ifndef OPENVDB_TOOLS_MASK_HAS_BEEN_INCLUDED 36 #define OPENVDB_TOOLS_MASK_HAS_BEEN_INCLUDED 38 #include <openvdb/Grid.h> 40 #include <type_traits> 54 template<
typename Gr
idType>
55 inline typename GridType::template ValueConverter<bool>::Type::Ptr
56 interiorMask(
const GridType& grid,
const double isovalue = 0.0);
62 namespace mask_internal {
65 template<
typename Gr
idType>
67 static const bool isBool = std::is_same<typename GridType::ValueType, bool>::value;
68 using BoolGridType =
typename GridType::template ValueConverter<bool>::Type;
69 using BoolGridPtrType =
typename BoolGridType::Ptr;
74 template<
typename Gr
idType>
75 inline typename std::enable_if<std::is_floating_point<typename GridType::ValueType>::value,
76 typename mask_internal::Traits<GridType>::BoolGridPtrType>::type
77 doLevelSetInteriorMask(
const GridType& grid,
const double isovalue)
79 using GridValueT =
typename GridType::ValueType;
80 using MaskGridPtrT =
typename mask_internal::Traits<GridType>::BoolGridPtrType;
86 return MaskGridPtrT{};
92 template<
typename Gr
idType>
93 inline typename std::enable_if<!std::is_floating_point<typename GridType::ValueType>::value,
94 typename mask_internal::Traits<GridType>::BoolGridPtrType>::type
95 doLevelSetInteriorMask(
const GridType&,
const double )
97 using MaskGridPtrT =
typename mask_internal::Traits<GridType>::BoolGridPtrType;
98 return MaskGridPtrT{};
103 template<
typename Gr
idType>
104 inline typename std::enable_if<mask_internal::Traits<GridType>::isBool,
105 typename mask_internal::Traits<GridType>::BoolGridPtrType>::type
106 doInteriorMask(
const GridType& grid,
const double )
109 return grid.deepCopy();
114 template<
typename Gr
idType>
115 inline typename std::enable_if<!(mask_internal::Traits<GridType>::isBool),
116 typename mask_internal::Traits<GridType>::BoolGridPtrType>::type
117 doInteriorMask(
const GridType& grid,
const double isovalue)
119 using MaskGridT =
typename mask_internal::Traits<GridType>::BoolGridType;
122 if (
auto maskGridPtr = doLevelSetInteriorMask(grid, isovalue)) {
127 auto maskGridPtr = MaskGridT::create(
false);
128 maskGridPtr->setTransform(grid.transform().copy());
129 maskGridPtr->topologyUnion(grid);
136 template<
typename Gr
idType>
137 inline typename GridType::template ValueConverter<bool>::Type::Ptr
140 return mask_internal::doInteriorMask(grid, isovalue);
150 #endif // OPENVDB_TOOLS_MASK_HAS_BEEN_INCLUDED
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h:136
Definition: Exceptions.h:40
Miscellaneous utility methods that operate primarily or exclusively on level set grids.
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h:188