31 #ifndef OPENVDB_UTIL_UTIL_HAS_BEEN_INCLUDED
32 #define OPENVDB_UTIL_UTIL_HAS_BEEN_INCLUDED
34 #include <openvdb/Types.h>
35 #include <openvdb/tree/Tree.h>
36 #include <openvdb/tools/ValueTransformer.h>
58 ijk[0] = int(std::floor(voxelCoord[0]));
59 ijk[1] = int(std::floor(voxelCoord[1]));
60 ijk[2] = int(std::floor(voxelCoord[2]));
70 template<
class TreeType1,
class TreeType2>
76 inline void operator()(
const typename TreeType1::LeafIter& lIter)
const
78 const Coord xyz = lIter->origin();
79 const typename TreeType2::LeafNodeType* leaf = mOtherTree->probeConstLeaf(xyz);
81 lIter->topologyIntersection(*leaf, zeroVal<typename TreeType1::ValueType>());
82 }
else if (!mOtherTree->isValueOn(xyz)) {
83 lIter->setValuesOff();
88 const TreeType2* mOtherTree;
94 template<
class TreeType1,
class TreeType2>
100 inline void operator()(
const typename TreeType1::LeafIter& lIter)
const
102 const Coord xyz = lIter->origin();
103 const typename TreeType2::LeafNodeType* leaf = mOtherTree->probeConstLeaf(xyz);
105 lIter->topologyDifference(*leaf, zeroVal<typename TreeType1::ValueType>());
106 }
else if (mOtherTree->isValueOn(xyz)) {
107 lIter->setValuesOff();
112 const TreeType2* mOtherTree;
121 template<
class TreeType1,
class TreeType2>
122 inline typename TreeType1::template ValueConverter<bool>::Type::Ptr
125 typedef typename TreeType1::template ValueConverter<bool>::Type BoolTreeType;
127 typename BoolTreeType::Ptr topologyTree(
new BoolTreeType(
133 topologyTree->pruneInactive();
141 template<
class TreeType1,
class TreeType2>
142 inline typename TreeType1::template ValueConverter<bool>::Type::Ptr
145 typedef typename TreeType1::template ValueConverter<bool>::Type BoolTreeType;
147 typename BoolTreeType::Ptr topologyTree(
new BoolTreeType(
153 topologyTree->pruneInactive();
161 #endif // OPENVDB_UTIL_UTIL_HAS_BEEN_INCLUDED
TreeType1::template ValueConverter< bool >::Type::Ptr leafTopologyIntersection(const TreeType1 &lhs, const TreeType2 &rhs, bool threaded=true)
Perform a boolean intersection between two leaf nodes' topology masks.
Definition: util/Util.h:123
OPENVDB_API const Index32 INVALID_IDX
void operator()(const typename TreeType1::LeafIter &lIter) const
Definition: util/Util.h:100
LeafTopologyDiffOp(const TreeType2 &tree)
Definition: util/Util.h:98
Coord nearestCoord(const Vec3d &voxelCoord)
Return voxelCoord rounded to the closest integer coordinates.
Definition: util/Util.h:55
LeafTopologyIntOp(const TreeType2 &tree)
Definition: util/Util.h:74
TreeType1::template ValueConverter< bool >::Type::Ptr leafTopologyDifference(const TreeType1 &lhs, const TreeType2 &rhs, bool threaded=true)
Perform a boolean difference between two leaf nodes' topology masks.
Definition: util/Util.h:143
#define OPENVDB_VERSION_NAME
Definition: version.h:45
Functor for use with tools::foreach() to compute the boolean difference between the value masks of co...
Definition: util/Util.h:95
uint32_t Index32
Definition: Types.h:54
Vec3< double > Vec3d
Definition: Vec3.h:605
void operator()(const typename TreeType1::LeafIter &lIter) const
Definition: util/Util.h:76
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h:67
OPENVDB_API const Coord COORD_OFFSETS[26]
coordinate offset table for neighboring voxels
Functor for use with tools::foreach() to compute the boolean intersection between the value masks of ...
Definition: util/Util.h:71