00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef OMPL_BASE_VALID_STATE_SAMPLER_
00038 #define OMPL_BASE_VALID_STATE_SAMPLER_
00039
00040 #include "ompl/base/State.h"
00041 #include "ompl/util/ClassForward.h"
00042 #include "ompl/base/GenericParam.h"
00043 #include <boost/function.hpp>
00044 #include <boost/noncopyable.hpp>
00045 #include <string>
00046
00047 namespace ompl
00048 {
00049 namespace base
00050 {
00051
00053 ClassForward(SpaceInformation);
00055
00057
00058 ClassForward(ValidStateSampler);
00060
00065 class ValidStateSampler : private boost::noncopyable
00066 {
00067 public:
00068
00070 ValidStateSampler(const SpaceInformation *si);
00071
00072 virtual ~ValidStateSampler(void);
00073
00075 const std::string& getName(void) const
00076 {
00077 return name_;
00078 }
00079
00081 void setName(const std::string &name)
00082 {
00083 name_ = name;
00084 }
00085
00087 virtual bool sample(State *state) = 0;
00088
00091 virtual bool sampleNear(State *state, const State *near, const double distance) = 0;
00092
00096 void setNrAttempts(unsigned int attempts)
00097 {
00098 attempts_ = attempts;
00099 }
00100
00102 unsigned int getNrAttempts(void) const
00103 {
00104 return attempts_;
00105 }
00106
00108 ParamSet& params(void)
00109 {
00110 return params_;
00111 }
00112
00114 const ParamSet& params(void) const
00115 {
00116 return params_;
00117 }
00118
00119 protected:
00120
00122 const SpaceInformation *si_;
00123
00125 unsigned int attempts_;
00126
00128 std::string name_;
00129
00131 ParamSet params_;
00132 };
00133
00135 typedef boost::function<ValidStateSamplerPtr(const SpaceInformation*)> ValidStateSamplerAllocator;
00136 }
00137 }
00138
00139
00140 #endif