#ifndef _SamplingStategy_H__ #define _SamplingStategy_H__ namespace GtpVisibilityPreprocessor { class Preprocessor; struct SimpleRay; /** This class generates a specific sampling strategy. */ class SamplingStrategy { public: /** Default constructor */ SamplingStrategy(const Preprocessor &preprocessor): mPreprocessor(preprocessor) {} virtual ~SamplingStrategy() {}; /** Each strategy has to implement this function. @returns true if generated valid sample. */ virtual bool GenerateSample(SimpleRay &ray) const = 0; protected: const Preprocessor &mPreprocessor; }; class ObjectBasedDistribution: public SamplingStrategy { public: ObjectBasedDistribution(const Preprocessor &preprocessor): SamplingStrategy(preprocessor) {} virtual bool GenerateSample(SimpleRay &ray) const; }; class ObjectDirectionBasedDistribution: public SamplingStrategy { public: ObjectDirectionBasedDistribution(const Preprocessor &preprocessor): SamplingStrategy(preprocessor) {} virtual bool GenerateSample(SimpleRay &ray) const; }; class DirectionBasedDistribution: public SamplingStrategy { public: DirectionBasedDistribution(const Preprocessor &preprocessor): SamplingStrategy(preprocessor) {} virtual bool GenerateSample(SimpleRay &ray) const; }; class DirectionBoxBasedDistribution: public SamplingStrategy { public: DirectionBoxBasedDistribution(const Preprocessor &preprocessor): SamplingStrategy(preprocessor) {} virtual bool GenerateSample(SimpleRay &ray) const; }; class SpatialBoxBasedDistribution: public SamplingStrategy { public: SpatialBoxBasedDistribution(const Preprocessor &preprocessor): SamplingStrategy(preprocessor) {} virtual bool GenerateSample(SimpleRay &ray) const; }; /** This strategy generates samples inside of the objects, e.g., for sampling the inside of a colon. */ /*class ObjectsInteriorDistribution: public SamplingStrategy { public: ObjectsInteriorDistribution(const Preprocessor &preprocessor): SamplingStrategy(preprocessor) {} virtual bool GenerateSample(SimpleRay &ray) const; }; */ }; #endif