8#ifndef OPENVDB_TOOLS_MASK_HAS_BEEN_INCLUDED
9#define OPENVDB_TOOLS_MASK_HAS_BEEN_INCLUDED
28template<
typename Gr
idType>
29typename GridType::template ValueConverter<bool>::Type::Ptr
30interiorMask(
const GridType& grid,
const double isovalue = 0.0);
37namespace mask_internal {
38template<
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;
45template<
typename Gr
idType>
46inline typename std::enable_if<std::is_floating_point<typename GridType::ValueType>::value,
47 typename mask_internal::Traits<GridType>::BoolGridPtrType>::type
48doLevelSetInteriorMask(
const GridType& grid,
const double isovalue)
50 using GridValueT =
typename GridType::ValueType;
51 using MaskGridPtrT =
typename mask_internal::Traits<GridType>::BoolGridPtrType;
54 if (grid.getGridClass() == GRID_LEVEL_SET) {
55 return tools::sdfInteriorMask(grid,
static_cast<GridValueT
>(isovalue));
57 return MaskGridPtrT{};
61template<
typename Gr
idType>
62inline typename std::enable_if<!std::is_floating_point<typename GridType::ValueType>::value,
63 typename mask_internal::Traits<GridType>::BoolGridPtrType>::type
64doLevelSetInteriorMask(
const GridType&,
const double )
66 using MaskGridPtrT =
typename mask_internal::Traits<GridType>::BoolGridPtrType;
67 return MaskGridPtrT{};
70template<
typename Gr
idType>
71inline typename std::enable_if<mask_internal::Traits<GridType>::isBool,
72 typename mask_internal::Traits<GridType>::BoolGridPtrType>::type
73doInteriorMask(
const GridType& grid,
const double )
76 return grid.deepCopy();
79template<
typename Gr
idType>
80inline typename std::enable_if<!(mask_internal::Traits<GridType>::isBool),
81 typename mask_internal::Traits<GridType>::BoolGridPtrType>::type
82doInteriorMask(
const GridType& grid,
const double isovalue)
84 using MaskGridT =
typename mask_internal::Traits<GridType>::BoolGridType;
87 if (
auto maskGridPtr = doLevelSetInteriorMask(grid, isovalue)) {
92 auto maskGridPtr = MaskGridT::create(
false);
93 maskGridPtr->setTransform(grid.transform().copy());
94 maskGridPtr->topologyUnion(grid);
103template<
typename Gr
idType>
104typename GridType::template ValueConverter<bool>::Type::Ptr
107 return mask_internal::doInteriorMask(grid, isovalue);
116#ifdef OPENVDB_USE_EXPLICIT_INSTANTIATION
118#ifdef OPENVDB_INSTANTIATE_MASK
122#define _FUNCTION(TreeT) \
123 Grid<TreeT>::ValueConverter<bool>::Type::Ptr interiorMask(const Grid<TreeT>&, const double)
Miscellaneous utility methods that operate primarily or exclusively on level set grids.
Definition: Exceptions.h:13
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h.in:121
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h.in:212
#define OPENVDB_VOLUME_TREE_INSTANTIATE(Function)
Definition: version.h.in:160