Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

canvas.h

Go to the documentation of this file.
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   // Generic Canvas interface -------------------------------------------------
00018 
00022   class Canvas
00023   {
00024   public:
00025         virtual ~Canvas ();
00026         virtual void drawDone ();  
00027 
00028         // Drawing functions are the primary interface
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         // State information
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   // Specific Canvas implementations ------------------------------------------
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

Generated on Thu Dec 9 17:13:24 2004 for fl by doxygen1.2.18