OpenVDB  12.0.0
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
UniformPointScatter< PointAccessorType, RandomGenerator, InterruptType > Class Template Reference

The two point scatters UniformPointScatter and NonUniformPointScatter depend on the following two classes: More...

#include <openvdb/tools/PointScatter.h>

Inherits BasePointScatter< PointAccessorType, RandomGenerator, InterruptType >.

Public Types

using BaseT = BasePointScatter< PointAccessorType, RandomGenerator, InterruptType >
 

Public Member Functions

 UniformPointScatter (PointAccessorType &points, Index64 pointCount, RandomGenerator &randGen, double spread=1.0, InterruptType *interrupt=nullptr)
 
 UniformPointScatter (PointAccessorType &points, float pointsPerVolume, RandomGenerator &randGen, double spread=1.0, InterruptType *interrupt=nullptr)
 
template<typename GridT >
bool operator() (const GridT &grid)
 This is the main functor method implementing the actual scattering of points. More...
 
void print (const std::string &name, std::ostream &os=std::cout) const
 
float getPointsPerVolume () const
 
Index64 getTargetPointCount () const
 
Index64 getPointCount () const
 
Index64 getVoxelCount () const
 

Protected Member Functions

void start (const char *name)
 
void end ()
 
bool interrupt ()
 
double getRand01 ()
 Return a random floating point number between zero and one. More...
 
double getRand ()
 Return a random floating point number between 0.5 -+ mSpread/2. More...
 
template<typename GridT >
void addPoint (const GridT &grid, const Vec3R &dmin)
 
template<typename GridT >
void addPoint (const GridT &grid, const Vec3R &dmin, const Coord &size)
 

Protected Attributes

PointAccessorType & mPoints
 
InterruptType * mInterrupter
 
Index64 mPointCount
 
Index64 mVoxelCount
 
Index64 mInterruptCount
 
const double mSpread
 
math::Rand01< double, RandomGenerator > mRand01
 

Detailed Description

template<typename PointAccessorType, typename RandomGenerator, typename InterruptType = util::NullInterrupter>
class openvdb::v12_0::tools::UniformPointScatter< PointAccessorType, RandomGenerator, InterruptType >

The two point scatters UniformPointScatter and NonUniformPointScatter depend on the following two classes:

The PointAccessorType template argument below refers to any class with the following interface:

class PointAccessor {
...
public:
void add(const openvdb::Vec3R &pos);// appends point with world positions pos
};

The InterruptType template argument below refers to any class with the following interface:

class Interrupter {
...
public:
void start(const char* name = nullptr) // called when computations begin
void end() // called when computations end
bool wasInterrupted(int percent=-1) // return true to break computation
};
Note
If no template argument is provided for this InterruptType the util::NullInterrupter is used which implies that all interrupter calls are no-ops (i.e. incurs no computational overhead). Uniformly scatters points in the active voxels. The point count is either explicitly defined or implicitly through the specification of a global density (=points-per-volume)
This uniform scattering technique assumes that the number of points is generally smaller than the number of active voxels (including virtual active voxels in active tiles).

Member Typedef Documentation

using BaseT = BasePointScatter<PointAccessorType, RandomGenerator, InterruptType>

Constructor & Destructor Documentation

UniformPointScatter ( PointAccessorType &  points,
Index64  pointCount,
RandomGenerator &  randGen,
double  spread = 1.0,
InterruptType *  interrupt = nullptr 
)
inline
UniformPointScatter ( PointAccessorType &  points,
float  pointsPerVolume,
RandomGenerator &  randGen,
double  spread = 1.0,
InterruptType *  interrupt = nullptr 
)
inline

Member Function Documentation

void addPoint ( const GridT &  grid,
const Vec3R dmin 
)
inlineprotectedinherited
void addPoint ( const GridT &  grid,
const Vec3R dmin,
const Coord &  size 
)
inlineprotectedinherited
void end ( )
inlineprotectedinherited
Index64 getPointCount ( ) const
inlineinherited
float getPointsPerVolume ( ) const
inline
double getRand ( )
inlineprotectedinherited

Return a random floating point number between 0.5 -+ mSpread/2.

double getRand01 ( )
inlineprotectedinherited

Return a random floating point number between zero and one.

Index64 getTargetPointCount ( ) const
inline
Index64 getVoxelCount ( ) const
inlineinherited
bool interrupt ( )
inlineprotectedinherited
bool operator() ( const GridT &  grid)
inline

This is the main functor method implementing the actual scattering of points.

void print ( const std::string &  name,
std::ostream &  os = std::cout 
) const
inline
void start ( const char *  name)
inlineprotectedinherited

Member Data Documentation

Index64 mInterruptCount
protectedinherited
InterruptType* mInterrupter
protectedinherited
Index64 mPointCount
protectedinherited
PointAccessorType& mPoints
protectedinherited
math::Rand01<double, RandomGenerator> mRand01
protectedinherited
const double mSpread
protectedinherited
Index64 mVoxelCount
protectedinherited