Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Shapes/Shape_impl.hpp

    re09b70 rc6f395  
    1010
    1111#include "Shapes/Shape.hpp"
     12#include "vector.hpp"
     13#include "Line.hpp"
     14#include "LineSegment.hpp"
     15#include "LineSegmentSet.hpp"
     16
    1217
    1318class Shape_impl {
     
    1621  virtual ~Shape_impl(){};
    1722  virtual bool isInside(const Vector &point)=0;
     23  virtual bool isOnSurface(const Vector &point)=0;
     24  virtual Vector getNormal(const Vector &point) throw(NotOnSurfaceException)=0;
     25  virtual LineSegmentSet getLineIntersections(const Line&)=0;
     26  virtual std::string toString()=0;
    1827};
    1928
     
    2332    return true;
    2433  }
     34  virtual bool isOnSurface(const Vector &point){
     35    return false;
     36  }
     37  virtual Vector getNormal(const Vector &point) throw(NotOnSurfaceException){
     38    throw NotOnSurfaceException(__FILE__,__LINE__);
     39  }
     40  virtual LineSegmentSet getLineIntersections(const Line &line){
     41    LineSegmentSet res(line);
     42    res.insert(LineSegment(line.negEndpoint(),line.posEndpoint()));
     43    return res;
     44  }
     45  virtual std::string toString(){
     46    return "Everywhere()";
     47  }
    2548};
    2649
     
    2851  virtual bool isInside(const Vector &point){
    2952    return false;
     53  }
     54  virtual bool isOnSurface(const Vector &point){
     55    return false;
     56  }
     57  virtual Vector getNormal(const Vector &point) throw(NotOnSurfaceException){
     58    throw NotOnSurfaceException(__FILE__,__LINE__);
     59  }
     60  virtual LineSegmentSet getLineIntersections(const Line &line){
     61    return LineSegmentSet(line);
     62  }
     63  virtual std::string toString(){
     64    return "Nowhere()";
    3065  }
    3166};
     
    3671  virtual ~AndShape_impl();
    3772  virtual bool isInside(const Vector &point);
     73  virtual bool isOnSurface(const Vector &point);
     74  virtual Vector getNormal(const Vector &point) throw(NotOnSurfaceException);
     75  virtual LineSegmentSet getLineIntersections(const Line&);
     76  virtual std::string toString();
    3877private:
    3978  Shape::impl_ptr lhs;
     
    4685  virtual ~OrShape_impl();
    4786  virtual bool isInside(const Vector &point);
     87  virtual bool isOnSurface(const Vector &point);
     88  virtual Vector getNormal(const Vector &point) throw(NotOnSurfaceException);
     89  virtual LineSegmentSet getLineIntersections(const Line&);
     90  virtual std::string toString();
    4891private:
    4992  Shape::impl_ptr lhs;
     
    5699  virtual ~NotShape_impl();
    57100  virtual bool isInside(const Vector &point);
     101  virtual bool isOnSurface(const Vector &point);
     102  virtual Vector getNormal(const Vector &point) throw(NotOnSurfaceException);
     103  virtual LineSegmentSet getLineIntersections(const Line&);
     104  virtual std::string toString();
    58105private:
    59106  Shape::impl_ptr arg;
Note: See TracChangeset for help on using the changeset viewer.