Tekkotsu Homepage
Demos
Overview
Downloads
Dev. Resources
Reference
Credits

BrickData.h

Go to the documentation of this file.
00001 //-*-c++-*-
00002 #ifndef _BRICKDATA_H_
00003 #define _BRICKDATA_H_
00004 
00005 #include <vector>
00006 #include <iostream>
00007 
00008 #include "Shared/newmat/newmat.h"
00009 
00010 #include "BaseData.h"    // superclass
00011 #include "Point.h"       // Point data members
00012 #include "ShapeTypes.h"  // brickDataType
00013 
00014 #include "LineData.h"
00015 #include "ShapeLine.h"
00016 #include "ShapeBlob.h"
00017 
00018 namespace DualCoding {
00019 
00020 class ShapeRoot;
00021 class SketchSpace;
00022 template<typename T> class Sketch;
00023 
00024 class BrickData : public BaseData {
00025 private:
00026   // T=Top, G=Ground, F=front, B=back, L=left, R=right
00027   EndPoint GFL;
00028   EndPoint GFR;
00029   EndPoint GBL;
00030   EndPoint GBR;
00031   EndPoint TFL;
00032   EndPoint TFR;
00033   EndPoint TBL;
00034   EndPoint TBR;
00035 
00036   Point centroid;
00037 
00038 public:
00039 
00040   //! Constructor
00041   BrickData(ShapeSpace& _space,
00042       const EndPoint &GFL, const EndPoint &GFR, const EndPoint &GBL, const EndPoint &GBR, 
00043       const EndPoint &TFL, const EndPoint &TFR, const EndPoint &TBL, const EndPoint &TBR);
00044 
00045   //! Copy constructor
00046   //BrickData(BrickData& otherBrick);
00047 
00048   static ShapeType_t getStaticType() { return brickDataType; }
00049   DATASTUFF_H(BrickData);
00050   
00051   //! Centroid. (Virtual in BaseData.)
00052   Point getCentroid() const { return centroid; } 
00053   
00054   EndPoint getGFL() {return GFL;}
00055   EndPoint getGFR() {return GFR;}
00056   EndPoint getGBL() {return GBL;}
00057   EndPoint getGBR() {return GBR;}
00058   EndPoint getTFL() {return TFL;}
00059   EndPoint getTFR() {return TFR;}
00060   EndPoint getTBL() {return TBL;}
00061   EndPoint getTBR() {return TBR;}
00062   
00063   //! Match bricks based on their parameters.  (Virtual in BaseData.)
00064   virtual bool isMatchFor(const ShapeRoot& other) const;
00065 
00066   virtual void mergeWith(const ShapeRoot& other);
00067 
00068   virtual bool isAdmissible() const { return true; }
00069 
00070   virtual bool updateParams(const ShapeRoot& other, bool force=false);
00071 
00072   //! Print information about this shape. (Virtual in BaseData.)
00073   virtual void printParams() const;
00074   
00075   //! Transformations. (Virtual in BaseData.)
00076   void applyTransform(const NEWMAT::Matrix& Tmat, const ReferenceFrameType_t newref=unspecified);
00077   
00078   //! Project to ground
00079   virtual void projectToGround(const NEWMAT::Matrix& camToBase,
00080              const NEWMAT::ColumnVector& groundplane);
00081 
00082   virtual unsigned short getDimension() const { return 3; }
00083 
00084   //! Extraction.
00085   static std::vector<Shape<BrickData> > findBricks(ShapeSpace& ShS, std::vector<Shape<LineData> > lines);
00086 
00087   static std::vector<Shape<BrickData> > findBricksFromBlobs(ShapeSpace& ShS, 
00088                   std::vector<Shape<BlobData> > blobs1,
00089                   std::vector<Shape<BlobData> > blobs2,
00090                   std::vector<Shape<BlobData> > blobs3);
00091 
00092   static Shape<BrickData> extractBrick(ShapeSpace& space, std::vector<Shape<BlobData> > &blobs);
00093     
00094   static std::vector<Point> findOrthogonalBoundingBox(ShapeSpace& space, Shape<BlobData> blob, Point centroid, Shape<LineData> parallel);
00095 private:
00096   //! Render into a sketch space and return reference. (Private.)
00097   Sketch<bool>* render() const;
00098 
00099 
00100   static int addBrickWithTwoSides(ShapeSpace& ShS,
00101           std::vector<Point>& corners1, 
00102           std::vector<Point>& corners2, 
00103           std::vector<std::vector<Point> >& blobs3, 
00104           std::vector<Shape<BrickData> >& result, 
00105           float distanceThresh);
00106 
00107   //@}
00108 
00109   BrickData& operator=(const BrickData&); //!< don't call
00110 };
00111 
00112 } // namespace
00113 
00114 #endif

DualCoding 4.0
Generated Thu Nov 22 00:52:36 2007 by Doxygen 1.5.4