Homepage Demos Overview Downloads Tutorials Reference
Credits

MapBuilderRequests.h

Go to the documentation of this file.
00001 //-*-c++-*-
00002 #ifndef INCLUDED_MapBuilderRequests_h_
00003 #define INCLUDED_MapBuilderRequests_h_
00004 
00005 #include "BlobData.h"
00006 #include "ShapeTypes.h"
00007 #include "VRmixin.h"
00008 
00009 namespace DualCoding {
00010 
00011 class MapBuilderRequest {
00012   typedef map<ShapeType_t,set<int> > colorMap;
00013   friend class MapBuilder;
00014 
00015 public:
00016   enum MapBuilderRequestType_t { 
00017     none, 
00018     takeSnap, 
00019     localMap, 
00020     worldMap
00021   };
00022 
00023   virtual MapBuilderRequestType_t getRequestType() const=0;
00024 
00025   virtual ~MapBuilderRequest() {}
00026 
00027   unsigned int requestID; // set by mapbuilder when added to request queue
00028   colorMap objectColors, occluderColors;
00029   map<int, int> minBlobAreas;
00030   map<int, BlobData::BlobOrientation_t> blobOrientations;
00031   unsigned int floorColor;
00032   unsigned int numImages;
00033   enum GroundPlaneAssumption_t { onStand, onLegs } groundPlaneAssumption;
00034 
00035   //! Constructor
00036   MapBuilderRequest(unsigned int num=1)
00037     : requestID(0), objectColors(), occluderColors(), 
00038       minBlobAreas(), blobOrientations(), floorColor(0), 
00039       numImages(num), groundPlaneAssumption(onLegs) {}
00040 
00041   //! Copy constructor
00042   MapBuilderRequest(const MapBuilderRequest& req)
00043     : requestID(req.requestID), 
00044       objectColors(req.objectColors), occluderColors(req.occluderColors), 
00045       minBlobAreas(req.minBlobAreas), blobOrientations(req.blobOrientations),
00046       floorColor(req.floorColor), numImages(req.numImages),
00047       groundPlaneAssumption(req.groundPlaneAssumption) {}
00048 
00049 private:
00050   MapBuilderRequest& operator=(const MapBuilderRequest& req);
00051 };
00052 
00053 class TakeSnapRequest : public MapBuilderRequest {
00054 public:
00055   virtual MapBuilderRequestType_t getRequestType() const { return takeSnap; }
00056   TakeSnapRequest(unsigned int num=1)
00057     : MapBuilderRequest(num) {}
00058   TakeSnapRequest(const TakeSnapRequest& req)
00059     : MapBuilderRequest(req) {}
00060 };
00061 
00062 class TakeSnapAtRequest : public TakeSnapRequest {
00063 public:
00064   TakeSnapAtRequest(const Point& pt, unsigned int num=1)
00065     : TakeSnapRequest(num), gazePt(pt) {}
00066   TakeSnapAtRequest(const TakeSnapAtRequest& req)
00067     : TakeSnapRequest(req), gazePt(req.gazePt) {}
00068   Point gazePt;
00069 };
00070 
00071 
00072 class LocalMapRequest : public MapBuilderRequest {
00073 public:
00074   virtual MapBuilderRequestType_t getRequestType() const { return localMap; }
00075 
00076   //! Constructor with bounding box
00077   LocalMapRequest(coordinate_t maxX, coordinate_t minX, coordinate_t maxY, 
00078       coordinate_t minY, unsigned int _maxDist, unsigned int num=1, 
00079       bool clear=true, bool _doScan=true)
00080     : MapBuilderRequest(num), shs(VRmixin::localShS), 
00081       area(Shape<BlobData>
00082      (new BlobData
00083       (VRmixin::groundShS,Point(maxX,maxY),Point(maxX,minY),
00084        Point(minX,maxY),Point(minX,minY),(maxX-minX)*(maxY-minY),
00085        vector<BlobData::run>(),BlobData::groundplane,rgb(0,0,0)))), 
00086       maxDist(_maxDist), clearShapes(clear), pursueShapes(true), manualHeadMotion(false),
00087       removePts(true), doScan(_doScan) {}
00088 
00089   //! Constructor with point target
00090   LocalMapRequest(const Point& pt, unsigned int _maxDist, unsigned int num=1, 
00091       bool clear=true, bool _doScan=true)
00092     : MapBuilderRequest(num), shs(VRmixin::localShS), 
00093       area(Shape<PointData>(new PointData(VRmixin::groundShS,pt))), 
00094       maxDist(_maxDist), clearShapes(clear), pursueShapes(true), manualHeadMotion(false),
00095       removePts(true), doScan(_doScan) {}
00096 
00097   //! Constructor with ShapeRoot to define scan region
00098   LocalMapRequest(const ShapeRoot _area, unsigned int _maxDist, unsigned int num=1, 
00099       bool clear=true, bool _doScan=true)
00100     : MapBuilderRequest(num), shs(VRmixin::localShS), 
00101       area(_area), maxDist(_maxDist), clearShapes(clear), pursueShapes(true), manualHeadMotion(false),
00102       removePts(true), doScan(_doScan) {}
00103 
00104   //! Copy constructor
00105   LocalMapRequest(const LocalMapRequest& req)
00106     : MapBuilderRequest(req), shs(req.shs), area(req.area), maxDist(req.maxDist), 
00107       clearShapes(req.clearShapes), pursueShapes(req.pursueShapes), manualHeadMotion(req.manualHeadMotion),
00108       removePts(req.removePts), doScan(req.doScan) {}
00109 
00110   virtual ~LocalMapRequest() {} 
00111 
00112   ShapeSpace& shs;
00113   ShapeRoot area; //!< The area to search, in egocentric coords
00114   unsigned int maxDist; //!< Ignore objects farther than this distance
00115   bool clearShapes; //!< If true, clear the shape space at start of request
00116   bool pursueShapes; //!< If true, generate new gaze points as shapes are recognized
00117   bool manualHeadMotion; //!< If true, waits for !msg MoveHead before moving to next gaze point (for debugging)
00118   bool removePts; //!< If true, remove pending gaze points if they're visible in current image
00119   bool doScan; //!< If true, do a continuous scan of the area to find interest points to be examined
00120 
00121 protected:
00122   //! Constructor used by subclass WorldMapRequest
00123   LocalMapRequest(ShapeSpace& _shs, const ShapeRoot& _area, unsigned int _maxDist, 
00124       unsigned int num=1, bool clear=true, bool _doScan=true)
00125     : MapBuilderRequest(num), shs(_shs), area(_area), 
00126       maxDist(_maxDist), clearShapes(clear), pursueShapes(true), manualHeadMotion(false),
00127       removePts(true), doScan(_doScan) {}
00128 
00129   //! Constructor used by subclass WorldMapRequest
00130   LocalMapRequest(ShapeSpace& _shs, coordinate_t maxX, coordinate_t minX, 
00131       coordinate_t maxY, coordinate_t minY, unsigned int _maxDist, 
00132       unsigned int num=1, bool clear=true, bool _doScan=true)
00133     : MapBuilderRequest(num), shs(_shs), 
00134       area(Shape<BlobData>
00135      (new BlobData
00136       (VRmixin::groundShS,Point(maxX,maxY),Point(maxX,minY),
00137        Point(minX,maxY),Point(minX,minY),(maxX-minX)*(maxY-minY),
00138        vector<BlobData::run>(),BlobData::groundplane,rgb(0,0,0)))), 
00139       maxDist(_maxDist), clearShapes(clear), pursueShapes(true), manualHeadMotion(false),
00140       removePts(true), doScan(_doScan) {}
00141 };
00142 
00143 class LocalMapTestRequest : public LocalMapRequest {
00144 public:
00145   LocalMapTestRequest(bool (*func)(), coordinate_t maxX, coordinate_t minX, 
00146           coordinate_t maxY, coordinate_t minY, unsigned int _maxDist, 
00147           unsigned int num=1, bool clear=true, bool _doScan=true)
00148     : LocalMapRequest(maxX,minX,maxY,minY,_maxDist,num,clear,_doScan), exitTest(func){}
00149 
00150    LocalMapTestRequest(const LocalMapTestRequest& req)
00151     : LocalMapRequest(req), exitTest(req.exitTest) {}
00152 
00153   virtual ~LocalMapTestRequest() {} 
00154 
00155   bool (*exitTest)();
00156 
00157 private:
00158   LocalMapTestRequest& operator=(const LocalMapTestRequest&);
00159 };
00160 
00161 class WorldMapRequest : public LocalMapRequest {
00162 public:
00163   virtual MapBuilderRequestType_t getRequestType() const { return worldMap; }
00164 
00165   //! Constructor using a shape to specify area
00166   WorldMapRequest(const ShapeRoot& _area, unsigned int _maxDist, 
00167       unsigned int num=1, bool clear=true, bool _doScan=true)
00168     : LocalMapRequest(VRmixin::worldShS,_area,_maxDist,num,clear,_doScan) {}
00169 
00170   //! Constructor using a bounding box
00171   WorldMapRequest(coordinate_t maxX, coordinate_t minX, coordinate_t maxY, 
00172       coordinate_t minY, unsigned int _maxDist, 
00173       unsigned int num=1, bool clear=true, bool _doScan=true)
00174     : LocalMapRequest(VRmixin::worldShS,maxX,minX,maxY,minY,_maxDist,num,clear,_doScan) {}
00175 
00176   //! Copy constructor
00177   WorldMapRequest(const WorldMapRequest& req) : LocalMapRequest(req) {}
00178 
00179   virtual ~WorldMapRequest() {}
00180 };
00181 
00182 class WorldMapTestRequest : public WorldMapRequest {
00183 public:
00184   //  virtual MapBuilderRequestType_t getRequestType() const { return worldMapTest; }
00185   WorldMapTestRequest(bool (*func)(), const ShapeRoot& _area, unsigned int _maxDist,
00186           unsigned int num=1, bool clear=true, bool _doScan=true)
00187     : WorldMapRequest(_area,_maxDist,num,clear,_doScan), exitTest(func){}
00188   WorldMapTestRequest(bool (*func)(), coordinate_t maxX, coordinate_t minX, 
00189           coordinate_t maxY, coordinate_t minY, unsigned int _maxDist,
00190           unsigned int num=1, bool clear=true, bool _doScan=true)
00191     : WorldMapRequest(maxX,minX,maxY,minY,_maxDist,num,clear,_doScan), exitTest(func){}
00192   WorldMapTestRequest(const WorldMapTestRequest& req)
00193     : WorldMapRequest(req), exitTest(req.exitTest) {}
00194   virtual ~WorldMapTestRequest() {} 
00195   bool (*exitTest)();
00196 private:
00197   WorldMapTestRequest& operator=(const WorldMapTestRequest&);
00198 };
00199 
00200 } // namespace
00201 
00202 #endif

DualCoding 3.0beta
Generated Wed Oct 4 00:01:53 2006 by Doxygen 1.4.7