34 #ifndef OPENVDB_TOOLS_CPT_HAS_BEEN_INCLUDED
35 #define OPENVDB_TOOLS_CPT_HAS_BEEN_INCLUDED
37 #include <openvdb/Grid.h>
38 #include <openvdb/math/Operators.h>
39 #include <tbb/parallel_reduce.h>
54 template<
typename InGr
idType,
typename MapType, math::DScheme Scheme>
59 typedef typename InGridType::ValueType
Real;
61 typedef typename InTreeType::LeafNodeType
LeafType;
63 typedef typename InTreeType::template ValueConverter<Vec3Type>::Type
OutTreeType;
66 CptImpl(
const InGridType& grid,
const MapType& map):
75 mInputGrid(other.mInputGrid),
78 mUseWorldTransform(other.mUseWorldTransform)
86 mUseWorldTransform = useWorldTransform;
88 RangeType range(mInputGrid->tree().cbeginLeaf());
90 tbb::parallel_reduce(range, *
this);
99 const bool useWorldTransform = mUseWorldTransform;
100 typename InGridType::ConstAccessor inAccessor = mInputGrid->getConstAccessor();
104 if (useWorldTransform) {
105 for ( ; range; ++range) {
106 for (
typename LeafType::ValueOnCIter v = range.
iterator()->beginValueOn(); v; ++v) {
107 const Coord ijk = v.getCoord();
114 for ( ; range; ++range) {
115 for (
typename LeafType::ValueOnCIter v = range.
iterator()->beginValueOn(); v; ++v) {
116 const Coord ijk = v.getCoord();
134 template<
typename InGr
idT>
139 typedef typename InGridT::ValueType
Real;
142 typedef typename InTreeType::template ValueConverter<Vec3Type>::Type
OutTreeType;
146 mInputGrid(&grid), mThreaded(threaded), mWorldSpace(worldspace)
150 template<
typename MapType>
151 void operator()(
const MapType& map)
154 mOutputGrid = cptImpl.
process(mThreaded, mWorldSpace);
161 const InGridType* mInputGrid;
162 typename OutGridType::Ptr mOutputGrid;
175 template<
typename InGr
idType>
180 typedef typename InGridType::ValueType
Real;
182 typedef typename InTreeType::template ValueConverter<Vec3Type>::Type
OutTreeType;
185 Cpt(
const InGridType& grid): mInputGrid(&grid) {}
192 return cptFunctor.
result();
203 #endif // OPENVDB_TOOLS_CPT_HAS_BEEN_INCLUDED