00001 /*
00002 File: EPSPlot.h
00003
00004 Purpose: Defines vanilla class for doing 2D plotting and producing eps output.
00005 adopted from Paul Heckbert's libplo/ps.c
00006
00007 Author: Paul Heckbert, Andrew Willmott
00008 */
00009
00010 #ifndef __EPSPlot__
00011 #define __EPSPlot__
00012
00013 #include "gcl/Geometry.h"
00014 #include "gcl/Colour.h"
00015 #include "cl/String.h"
00016
00017
00018 enum { lineDashed, lineDotted, lineSolid };
00019
00020 class EPSPlot
00021 {
00022 public:
00023 EPSPlot();
00024
00025 Void Open(const Char *filename);
00026 Void Close();
00027
00028 Void MoveTo(GCLReal x, GCLReal y);
00029 Void LineTo(GCLReal x, GCLReal y);
00030 Void SetWidth(GCLReal width);
00031 Void LineStyle(Int style);
00032 Void Dot(GCLReal x, GCLReal y, GCLReal r);
00033 Void Circle(GCLReal x, GCLReal y, GCLReal r);
00034 Void DrawText(GCLReal x, GCLReal y, Char *string);
00035
00036 Void SetColour(const Colour &c);
00037
00038 Void SetOutputSize(GCLReal size); // measured in 1/72 of an inch.
00039 // Must be called before an 'Open'.
00040 Void SetPort(GCLReal left, GCLReal bottom,
00041 GCLReal right, GCLReal top, Bool centred);
00042 // If 'centred' is true, the origin will be at the centre of the port,
00043 // otherwise it will be placed at the bottom-left. Other positions
00044 // for the origin can be achieved by using 'Translate' after calling
00045 // SetPort.
00046 // If you want more than one view setup,
00047 // you must Push/Pop around the previous one.
00048
00049 Void Push();
00050 Void Pop();
00051 Void Translate(GCLReal tx, GCLReal ty);
00052 Void Scale(GCLReal sx, GCLReal sy);
00053 Void Rotate(GCLReal angle);
00054
00055 Void Comment(StrConst string);
00056
00057 Bool level2;
00058 // Warning: Adobe "Illustrator" can't handle level2, so it's off
00059 // by default.
00060
00061 protected:
00062 Void Stroke();
00063
00064 FILE *file;
00065 Bool drawn;
00066 GCLReal scale;
00067 Char *font;
00068 GCLReal width;
00069 GCLReal worldScale;
00070 };
00071
00072 #endif