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