00001 #ifndef canvas_h
00002 #define canvas_h
00003
00004
00005 #include "fl/point.h"
00006 #include "fl/matrix.h"
00007 #include "fl/image.h"
00008 #include "fl/pi.h"
00009
00010 #include <vector>
00011 #include <string>
00012 #include <fstream>
00013
00014
00015 namespace fl
00016 {
00017
00018
00022 class Canvas
00023 {
00024 public:
00025 virtual ~Canvas ();
00026 virtual void drawDone ();
00027
00028
00029 virtual void drawPoint (const Point & p, unsigned int color = 0xFFFFFF);
00030 virtual void drawSegment (const Point & a, const Point & b, unsigned int color = 0xFFFFFF);
00031 virtual void drawLine (const Point & a, const Point & b, unsigned int color = 0xFFFFFF);
00032 virtual void drawLine (float a, float b, float c, unsigned int color = 0xFFFFFF);
00033 virtual void drawRay (const Point & p, float angle, unsigned int color = 0xFFFFFF);
00034 virtual void drawPolygon (const std::vector<Point> & points, unsigned int color = 0xFFFFFF);
00035 virtual void drawParallelogram (const Matrix<double> & S, float radius = 1.0f, unsigned int color = 0xFFFFFF);
00036 virtual void drawParallelogram (const PointAffine & p, float radius = 1.0f, unsigned int color = 0xFFFFFF);
00037 virtual void drawFilledRectangle (const Point & corner0, const Point & corner1, unsigned int colorFill = 0xFFFFFF);
00038 virtual void drawCircle (const Point & center, float radius, unsigned int color = 0xFFFFFF, float startAngle = 0, float endAngle = 2 * PI);
00039 virtual void drawEllipse (const Point & center, const Matrix2x2<double> & shape, float radius = 1.0f, unsigned int color = 0xFFFFFF, float startAngle = 0, float endAngle = 2 * PI, bool inverse = false);
00040 virtual void drawEllipse (const Matrix<double> & S, float radius = 1.0f, unsigned int color = 0xFFFFFF);
00041 virtual void drawText (const std::string & text, const Point & point, float size = 10, float angle = 0, unsigned int color = 0xFFFFFF);
00042 virtual void drawImage (const Image & image, Point & p, float width = -1, float height = -1);
00043
00044
00045 virtual void setTranslation (float x, float y);
00046 virtual void setScale (float x, float y);
00047 virtual void setLineWidth (float width);
00048 virtual void setPointSize (float radius);
00049 };
00050
00051
00052
00053
00054 class CanvasImage : public Canvas, public Image
00055 {
00056 public:
00057 CanvasImage (const PixelFormat & format = GrayChar);
00058 CanvasImage (int width, int height, const PixelFormat & format = GrayChar);
00059 CanvasImage (const Image & that);
00060 void initialize ();
00061 virtual ~CanvasImage ();
00062
00063 virtual void drawPoint (const Point & p, unsigned int color = 0xFFFFFF);
00064 virtual void drawSegment (const Point & a, const Point & b, unsigned int color = 0xFFFFFF);
00065 virtual void drawLine (float a, float b, float c, unsigned int color = 0xFFFFFF);
00066 virtual void drawRay (const Point & p, float angle, unsigned int color = 0xFFFFFF);
00067 virtual void drawPolygon (const std::vector<Point> & points, unsigned int color = 0xFFFFFF);
00068 virtual void drawFilledRectangle (const Point & corner0, const Point & corner1, unsigned int colorFill = 0xFFFFFF);
00069 virtual void drawEllipse (const Point & center, const Matrix2x2<double> & shape, float radius = 1, unsigned int color = 0xFFFFFF, float startAngle = 0, float endAngle = 2 * PI, bool inverse = false);
00070
00071 virtual void setTranslation (float x, float y);
00072 virtual void setScale (float x, float y);
00073 virtual void setLineWidth (float width);
00074 virtual void setPointSize (float radius);
00075
00076 Point trans (const Point & p);
00077 void pen (const Point & p, unsigned int color);
00078
00079 float transX;
00080 float transY;
00081 float scaleX;
00082 float scaleY;
00083 float lineWidth;
00084 ImageOf<unsigned char> penTip;
00085 float pointRadius;
00086 };
00087
00091 class CanvasPS : public Canvas
00092 {
00093 public:
00094 CanvasPS (const std::string & fileName, float width, float height);
00095 virtual ~CanvasPS ();
00096 virtual void drawDone ();
00097
00098 virtual void drawPoint (const Point & p, unsigned int color = 0);
00099 virtual void drawSegment (const Point & a, const Point & b, unsigned int color = 0);
00100 virtual void drawPolygon (const std::vector<Point> & points, unsigned int color = 0);
00101 virtual void drawCircle (const Point & center, float radius, unsigned int color = 0, float startAngle = 0, float endAngle = 2 * PI);
00102 virtual void drawEllipse (const Point & center, const Matrix2x2<double> & shape, float radius = 1, unsigned int color = 0, float startAngle = 0, float endAngle = 2 * PI, bool inverse = false);
00103 virtual void drawImage (const Image & image, Point & p, float width = -1, float height = -1);
00104
00105 virtual void setTranslation (float x, float y);
00106 virtual void setScale (float x, float y);
00107 virtual void setLineWidth (float width);
00108
00109 void expandColor (unsigned int color);
00110
00111 std::ofstream psf;
00112 float scale;
00113 float lineWidth;
00114 float bboxT;
00115 float bboxB;
00116 float bboxL;
00117 float bboxR;
00118 };
00119 }
00120
00121
00122 #endif