| 1 | /* | 
|---|
| 2 | * Shape.hpp | 
|---|
| 3 | * | 
|---|
| 4 | *  Created on: Jun 18, 2010 | 
|---|
| 5 | *      Author: crueger | 
|---|
| 6 | */ | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef SHAPE_HPP_ | 
|---|
| 9 | #define SHAPE_HPP_ | 
|---|
| 10 |  | 
|---|
| 11 | // include config.h | 
|---|
| 12 | #ifdef HAVE_CONFIG_H | 
|---|
| 13 | #include <config.h> | 
|---|
| 14 | #endif | 
|---|
| 15 |  | 
|---|
| 16 |  | 
|---|
| 17 | #include <boost/shared_ptr.hpp> | 
|---|
| 18 | #include <iosfwd> | 
|---|
| 19 |  | 
|---|
| 20 | #include "Shapes/ShapeExceptions.hpp" | 
|---|
| 21 | #include "Shapes/ShapeType.hpp" | 
|---|
| 22 |  | 
|---|
| 23 | #include <vector> | 
|---|
| 24 |  | 
|---|
| 25 | class Vector; | 
|---|
| 26 | class Shape_impl; | 
|---|
| 27 | class LineSegmentSet; | 
|---|
| 28 | class Line; | 
|---|
| 29 |  | 
|---|
| 30 | class Shape | 
|---|
| 31 | { | 
|---|
| 32 | public: | 
|---|
| 33 | typedef boost::shared_ptr<Shape_impl> impl_ptr; | 
|---|
| 34 | friend impl_ptr getShapeImpl(const Shape&); | 
|---|
| 35 |  | 
|---|
| 36 | Shape(impl_ptr); | 
|---|
| 37 | Shape(const Shape&); | 
|---|
| 38 | virtual ~Shape(); | 
|---|
| 39 |  | 
|---|
| 40 | bool isInside(const Vector &point) const; | 
|---|
| 41 | bool isOnSurface(const Vector &point) const; | 
|---|
| 42 | Vector getNormal(const Vector &point) const throw(NotOnSurfaceException); | 
|---|
| 43 |  | 
|---|
| 44 | Vector getCenter() const; | 
|---|
| 45 | double getRadius() const; | 
|---|
| 46 | double getVolume() const; | 
|---|
| 47 | double getSurfaceArea() const; | 
|---|
| 48 |  | 
|---|
| 49 | LineSegmentSet getLineIntersections(const Line&) const; | 
|---|
| 50 | std::vector<Vector> getHomogeneousPointsOnSurface(const size_t N) const; | 
|---|
| 51 | std::vector<Vector> getHomogeneousPointsInVolume(const size_t N) const; | 
|---|
| 52 |  | 
|---|
| 53 | Shape &operator=(const Shape& rhs); | 
|---|
| 54 |  | 
|---|
| 55 | bool operator==(const Shape &rhs) const; | 
|---|
| 56 |  | 
|---|
| 57 | std::string toString() const; | 
|---|
| 58 | enum ShapeType getType() const; | 
|---|
| 59 |  | 
|---|
| 60 | void setName(const std::string &_name); | 
|---|
| 61 | std::string getName() const; | 
|---|
| 62 |  | 
|---|
| 63 | protected: | 
|---|
| 64 | impl_ptr getImpl() const; | 
|---|
| 65 |  | 
|---|
| 66 | private: | 
|---|
| 67 | impl_ptr impl; | 
|---|
| 68 | std::string name; | 
|---|
| 69 | }; | 
|---|
| 70 |  | 
|---|
| 71 | Shape Everywhere(); | 
|---|
| 72 | Shape Nowhere(); | 
|---|
| 73 |  | 
|---|
| 74 | Shape operator&&(const Shape&,const Shape&); | 
|---|
| 75 | Shape operator||(const Shape&,const Shape&); | 
|---|
| 76 | Shape operator!(const Shape&); | 
|---|
| 77 |  | 
|---|
| 78 | std::ostream &operator<<(std::ostream&,const Shape&); | 
|---|
| 79 |  | 
|---|
| 80 | #endif /* SHAPE_HPP_ */ | 
|---|