Index: src/Shapes/Shape_impl.hpp
===================================================================
--- src/Shapes/Shape_impl.hpp	(revision b92e4abd2c9d2269cf58be33cf7cd809f3e304bd)
+++ src/Shapes/Shape_impl.hpp	(revision 735940a1f921b67951e76dc118fcdac077fea6ab)
@@ -30,8 +30,8 @@
   Shape_impl(){};
   virtual ~Shape_impl(){};
-  virtual bool isInside(const Vector &point)=0;
-  virtual bool isOnSurface(const Vector &point)=0;
-  virtual Vector getNormal(const Vector &point) throw(NotOnSurfaceException)=0;
-  virtual LineSegmentSet getLineIntersections(const Line&)=0;
+  virtual bool isInside(const Vector &point) const=0;
+  virtual bool isOnSurface(const Vector &point) const=0;
+  virtual Vector getNormal(const Vector &point) const throw(NotOnSurfaceException)=0;
+  virtual LineSegmentSet getLineIntersections(const Line&) const=0;
   virtual std::string toString() const =0;
   virtual enum ShapeType getType() const =0;
@@ -41,14 +41,14 @@
 class Everywhere_impl : public Shape_impl {
 public:
-  virtual bool isInside(const Vector &point){
+  virtual bool isInside(const Vector &point) const{
     return true;
   }
-  virtual bool isOnSurface(const Vector &point){
+  virtual bool isOnSurface(const Vector &point) const{
     return false;
   }
-  virtual Vector getNormal(const Vector &point) throw(NotOnSurfaceException){
+  virtual Vector getNormal(const Vector &point) const throw(NotOnSurfaceException){
     throw NotOnSurfaceException() << ShapeVector(&point);
   }
-  virtual LineSegmentSet getLineIntersections(const Line &line){
+  virtual LineSegmentSet getLineIntersections(const Line &line) const{
     LineSegmentSet res(line);
     res.insert(LineSegment(line.negEndpoint(),line.posEndpoint()));
@@ -68,14 +68,14 @@
 
 class Nowhere_impl : public Shape_impl {
-  virtual bool isInside(const Vector &point){
+  virtual bool isInside(const Vector &point) const{
     return false;
   }
-  virtual bool isOnSurface(const Vector &point){
+  virtual bool isOnSurface(const Vector &point) const{
     return false;
   }
-  virtual Vector getNormal(const Vector &point) throw(NotOnSurfaceException){
+  virtual Vector getNormal(const Vector &point) const throw(NotOnSurfaceException){
     throw NotOnSurfaceException() << ShapeVector(&point);
   }
-  virtual LineSegmentSet getLineIntersections(const Line &line){
+  virtual LineSegmentSet getLineIntersections(const Line &line) const{
     return LineSegmentSet(line);
   }
@@ -96,8 +96,8 @@
   AndShape_impl(const Shape::impl_ptr&, const Shape::impl_ptr&);
   virtual ~AndShape_impl();
-  virtual bool isInside(const Vector &point);
-  virtual bool isOnSurface(const Vector &point);
-  virtual Vector getNormal(const Vector &point) throw(NotOnSurfaceException);
-  virtual LineSegmentSet getLineIntersections(const Line&);
+  virtual bool isInside(const Vector &point) const;
+  virtual bool isOnSurface(const Vector &point) const;
+  virtual Vector getNormal(const Vector &point) const throw(NotOnSurfaceException);
+  virtual LineSegmentSet getLineIntersections(const Line&) const;
   virtual std::string toString() const;
   virtual enum ShapeType getType() const;
@@ -112,8 +112,8 @@
   OrShape_impl(const Shape::impl_ptr&, const Shape::impl_ptr&);
   virtual ~OrShape_impl();
-  virtual bool isInside(const Vector &point);
-  virtual bool isOnSurface(const Vector &point);
-  virtual Vector getNormal(const Vector &point) throw(NotOnSurfaceException);
-  virtual LineSegmentSet getLineIntersections(const Line&);
+  virtual bool isInside(const Vector &point) const;
+  virtual bool isOnSurface(const Vector &point) const;
+  virtual Vector getNormal(const Vector &point) const throw(NotOnSurfaceException);
+  virtual LineSegmentSet getLineIntersections(const Line&) const;
   virtual std::string toString() const;
   virtual enum ShapeType getType() const;
@@ -128,8 +128,8 @@
   NotShape_impl(const Shape::impl_ptr&);
   virtual ~NotShape_impl();
-  virtual bool isInside(const Vector &point);
-  virtual bool isOnSurface(const Vector &point);
-  virtual Vector getNormal(const Vector &point) throw(NotOnSurfaceException);
-  virtual LineSegmentSet getLineIntersections(const Line&);
+  virtual bool isInside(const Vector &point) const;
+  virtual bool isOnSurface(const Vector &point) const;
+  virtual Vector getNormal(const Vector &point) const throw(NotOnSurfaceException);
+  virtual LineSegmentSet getLineIntersections(const Line&) const;
   virtual std::string toString() const;
   virtual enum ShapeType getType() const;
