00001
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;
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
00036 MapBuilderRequest(unsigned int num=1)
00037 : requestID(0), objectColors(), occluderColors(),
00038 minBlobAreas(), blobOrientations(), floorColor(0),
00039 numImages(num), groundPlaneAssumption(onLegs) {}
00040
00041
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
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
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
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
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;
00114 unsigned int maxDist;
00115 bool clearShapes;
00116 bool pursueShapes;
00117 bool manualHeadMotion;
00118 bool removePts;
00119 bool doScan;
00120
00121 protected:
00122
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
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
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
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
00177 WorldMapRequest(const WorldMapRequest& req) : LocalMapRequest(req) {}
00178
00179 virtual ~WorldMapRequest() {}
00180 };
00181
00182 class WorldMapTestRequest : public WorldMapRequest {
00183 public:
00184
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 }
00201
00202 #endif