00001
00002 #ifndef __GDEV_EPS_H__
00003 #define __GDEV_EPS_H__
00004
00005 #include "magic/mgobject.h"
00006 #include "magic/mcoord.h"
00007
00008 BEGIN_NAMESPACE (MagiC);
00009
00011
00012
00013
00014
00015
00016
00017
00019
00022 class EPSDevice {
00023 public:
00024
00025 EPSDevice () {make ();}
00026 EPSDevice (const Coord2D& dimensions);
00027 virtual ~EPSDevice () {}
00028
00029 void make ();
00030
00031
00032
00033 virtual EPSDevice& setPixel (const Coord2D&) {NOT_IMPLEMENTED; return *this;}
00034 virtual EPSDevice& line (const Coord2D& start, const Coord2D& end);
00035 virtual EPSDevice& circle (const Coord2D& pos, float r, bool fill=false);
00036 virtual EPSDevice& rect (const Rect& rect);
00037 virtual EPSDevice& setClipping (const Rect& rect);
00038 virtual EPSDevice& endClipping ();
00039 virtual EPSDevice& text (const String& text, float x, float y) {NOT_IMPLEMENTED; return *this;}
00040 virtual EPSDevice& setGray (float g) {mStr+=format("%f setgray\n", g); return *this;}
00041
00042 virtual EPSDevice& saveState () {mStr+="gsave\n"; return *this;}
00043 virtual EPSDevice& restoreState () {mStr+="grestore\n"; return *this;}
00044 virtual EPSDevice& lineStyle (const String& style, float scale=1.0);
00045 virtual EPSDevice& lineWidth (float w) {mStr+=format ("%f setlinewidth\n", w); return *this;}
00046 virtual EPSDevice& scaling (float x, float y);
00047 virtual EPSDevice& origin (const Coord2D& pos);
00048
00049 virtual EPSDevice& framedStyle (float xUserSize, float yUserSize);
00050 virtual EPSDevice& flipCoordinates ();
00051
00052
00053
00054 float width () const {return mDimensions.x;}
00055 float height () const {return mDimensions.y;}
00056 const Coord2D& scaling () const {return mScaling;}
00057
00058
00059
00060 EPSDevice& directPrint (CONSTR str);
00061 EPSDevice& comment (CONSTR str) {mStr+=str; return *this;}
00062
00063
00064 void printFooter ();
00065
00066 String getBuffer () const {return mStr;}
00067
00068 private:
00069 Coord2D mDimensions;
00070 Rect mBoundingBox;
00071 Coord2D mScaling, mOffset;
00072 String mStr;
00073 bool mArrowLines;
00074 float mArrowHeadSize;
00075
00076 void printHeader ();
00077 void checkRange (const Coord2D& pos);
00078 };
00079
00080 END_NAMESPACE;
00081
00082 #endif
00083