PDFgraphing.h

Go to the documentation of this file.
00001 // Copyright (C) 2008 Alexander Ushakov
00002 //
00003 // Contents: Definition of an Image class
00004 //
00005 // Principal Author: Alexander Ushakov
00006 //
00007 // Status: in progress
00008 //
00009 // Revision History:
00010 //
00011 
00012 
00013 #ifndef _PDFgraphing_H_
00014 #define _PDFgraphing_H_
00015 
00016 
00017 #include "vector"
00018 // #include "string"
00019 #include "iostream"
00020 using namespace std;
00021 
00022  
00023 //---------------------------------------------------------------------------//
00024 //--------------------------------- PDFPageObject ---------------------------//
00025 //---------------------------------------------------------------------------//
00026 
00028 class PDFPageObject
00029 {
00030   
00032   //                                                     //
00033   //  Constructors                                       //
00034   //                                                     //
00036 
00037  public:  
00038   
00040   //                                                     //
00041   //  Accessors                                          //
00042   //                                                     //
00044         
00045 public:
00046   
00047   virtual void write( ostream& os ) { cout << "ERROR. Should not be used" << endl; }
00048 };
00049 
00050 //---------------------------------------------------------------------------//
00051 //------------------------------- PDFPageObjectText -------------------------//
00052 //---------------------------------------------------------------------------//
00053 
00054 
00056 class udPDFPageObjectText : public PDFPageObject
00057 {
00059   //                                                     //
00060   //  Constructors                                       //
00061   //                                                     //
00063 
00064  public:  
00065 
00067 
00072   udPDFPageObjectText( double x , double y , const string& t, int s = 12 ) : 
00073         theX(x), theY(y), text(t), tSize(s) { }
00074   
00076   //                                                     //
00077   //  Accessors                                          //
00078   //                                                     //
00080         
00081 public:
00082   
00083   void write( ostream& os );
00084 
00086   //                                                     //
00087   //  Data members                                       //
00088   //                                                     //
00090     
00091  private:
00092   double theX, theY;
00093   string text;
00094   int tSize;
00095 };
00096 
00097 
00098 //---------------------------------------------------------------------------//
00099 //------------------------------- PDFPageObjectLine -------------------------//
00100 //---------------------------------------------------------------------------//
00101 
00103 class PDFPageObjectLine : public PDFPageObject
00104 {
00106   //                                                     //
00107   //  Constructors                                       //
00108   //                                                     //
00110 
00111  public:  
00113 
00116   PDFPageObjectLine( double x1 , double y1 , double x2 , double y2 ) : theX1(x1), theX2(x2), theY1(y1), theY2(y2) { }
00117   
00119   //                                                     //
00120   //  Accessors                                          //
00121   //                                                     //
00123         
00124 public:
00125   
00126   void write( ostream& os ) {
00127     os << theX1 << " " << theY1 << " m" << endl;
00128     os << theX2 << " " << theY2 << " l" << endl;
00129     os << "S" << endl;
00130   }
00131 
00133   //                                                     //
00134   //  Data members                                       //
00135   //                                                     //
00137     
00138  private:
00139   double theX1, theY1;
00140   double theX2, theY2;
00141 };
00142 
00143 //---------------------------------------------------------------------------//
00144 //------------------------------- udPDFPageObjectLine -------------------------//
00145 //---------------------------------------------------------------------------//
00146 
00148 class udPDFPageObjectLine : public PDFPageObject
00149 {
00151   //                                                     //
00152   //  Constructors                                       //
00153   //                                                     //
00155 
00157 
00162  public:  
00163   udPDFPageObjectLine( double x1 , double y1 , double x2 , double y2, double gc = 0, bool d = false ) : 
00164   theX1(x1), theX2(x2), theY1(y1), theY2(y2), gray_color( gc), dashed( d ) { }
00165   
00167   //                                                     //
00168   //  Accessors                                          //
00169   //                                                     //
00171         
00172 public:
00173   
00174   void write( ostream& os );
00175 
00177   //                                                     //
00178   //  Data members                                       //
00179   //                                                     //
00181     
00182  private:
00183   double theX1, theY1;
00184   double theX2, theY2;
00185   double gray_color;
00186   bool dashed;
00187 };
00188 
00189 //---------------------------------------------------------------------------//
00190 //------------------------------- udPDFPageObjectVertLine -------------------//
00191 //---------------------------------------------------------------------------//
00192 
00193 
00195 class udPDFPageObjectVertLine : public udPDFPageObjectLine
00196 {
00198   //                                                     //
00199   //  Constructors                                       //
00200   //                                                     //
00202 
00203  public:  
00205 
00212   udPDFPageObjectVertLine( double x , double y , double s ,  double gc = 0, bool d = false ) :  
00213                         udPDFPageObjectLine( x , y , x , y + s, gc, d  )  { }
00214   
00215 };
00216 
00217 //---------------------------------------------------------------------------//
00218 //------------------------------- udPDFPageObjectHorizLine -------------------//
00219 //---------------------------------------------------------------------------//
00220 
00221 
00223 class udPDFPageObjectHorizLine : public udPDFPageObjectLine
00224 {
00226   //                                                     //
00227   //  Constructors                                       //
00228   //                                                     //
00230 
00231  public:  
00232 
00234 
00240   udPDFPageObjectHorizLine( double x , double y , double s ,  double gc = 0, bool d = false ) :  
00241                         udPDFPageObjectLine( x , y , x + s , y, gc, d  )  { }
00242   
00243 };
00244 
00245 //---------------------------------------------------------------------------//
00246 //------------------------------- udPDFPageObjectRect ---------------------//
00247 //---------------------------------------------------------------------------//
00248 
00250 class udPDFPageObjectRect : public PDFPageObject
00251 {
00253   //                                                     //
00254   //  Constructors                                       //
00255   //                                                     //
00257 
00258  public:  
00259 
00261 
00267   udPDFPageObjectRect( double x , double y , double w , double h, double bc = 0, double f = -1 ) : 
00268                         theX(x), theY(y), theW(w), theH(h), border_color(bc), theFill( f )  { }
00269   
00271   //                                                     //
00272   //  Accessors                                          //
00273   //                                                     //
00275         
00276 public:
00277   
00278   void write( ostream& os );
00279 
00281   //                                                     //
00282   //  Data members                                       //
00283   //                                                     //
00285     
00286  private:
00287   double theX, theY;
00288   double theW, theH;
00289   double theFill;
00290   double border_color;
00291 };
00292 
00293 //---------------------------------------------------------------------------//
00294 //------------------------------- udPDFPageObjectSquare ---------------------//
00295 //---------------------------------------------------------------------------//
00296 
00297 
00299 class udPDFPageObjectSquare : public udPDFPageObjectRect
00300 {
00302   //                                                     //
00303   //  Constructors                                       //
00304   //                                                     //
00306 
00307  public:  
00308 
00310 
00316   udPDFPageObjectSquare( double x , double y , double s, double bc = 0,double f = -1 ) :
00317           udPDFPageObjectRect( x , y , s , s, bc, f ) { }
00318   
00319 };
00320 
00321 //---------------------------------------------------------------------------//
00322 //------------------------------- udPDFPageObjectCircle  --------------------//
00323 //---------------------------------------------------------------------------//
00324 
00325 
00327 class udPDFPageObjectCircle : public PDFPageObject
00328 {
00330   //                                                     //
00331   //  Constructors                                       //
00332   //                                                     //
00334 
00335  public:  
00336 
00338 
00344   udPDFPageObjectCircle( double cx , double cy , double r, double bc = 0,double f = -1 ) : 
00345   theX(cx), theY(cy), theRad(r), border_color(bc), theFill( f )   { }
00346   
00348   //                                                     //
00349   //  Accessors                                          //
00350   //                                                     //
00352         
00353 public:
00354   
00355   void write( ostream& os );
00356 
00358   //                                                     //
00359   //  Data members                                       //
00360   //                                                     //
00362     
00363  private:
00364   double theX, theY;
00365   double theRad;
00366   double theFill;
00367   double border_color;
00368 };
00369 
00370 //---------------------------------------------------------------------------//
00371 //------------------------------------ PDFPage ------------------------------//
00372 //---------------------------------------------------------------------------//
00373 
00375 class PDFPage
00376 {
00378   //                                                     //
00379   //  Constructors                                       //
00380   //                                                     //
00382 
00383  public:  
00384 
00385   PDFPage( ) { }
00386   ~PDFPage( ) {
00387     for( vector< PDFPageObject* >::const_iterator o_it=theObjects.begin( ) ; o_it!=theObjects.end( ) ; ++o_it )
00388       delete *o_it;
00389   }
00390 
00392   void writeContents( ostream& os ) {
00393     for( vector< PDFPageObject* >::const_iterator o_it=theObjects.begin( ) ; o_it!=theObjects.end( ) ; ++o_it )
00394       (*o_it)->write( os );
00395   }
00396 
00398   void addObject( PDFPageObject* obj ) { theObjects.push_back( obj ); }
00399   
00401   static int width() { return 612; }
00403   static int height() { return 792; }
00404 
00406   static int mWidth() { return width() - lMargin() - rMargin(); }
00408   static int mHeight() { return height() - tMargin() - bMargin(); }
00410   static int mRightEnd() { return mWidth() + lMargin(); }
00412   static int mBottomEnd() { return mHeight() + tMargin(); }
00413   
00415   static int lMargin() { return 30; } 
00417   static int rMargin() { return 20; }
00419   static int tMargin() { return 20; } 
00421   static int bMargin() { return 20; }
00422 
00424   //                                                     //
00425   //  Data members                                       //
00426   //                                                     //
00428     
00429  private:
00430   vector< PDFPageObject* > theObjects;
00431 
00432 };
00433 
00434 
00435 //---------------------------------------------------------------------------//
00436 //-------------------------------- PDFStructure -----------------------------//
00437 //---------------------------------------------------------------------------//
00438 
00439 
00441 class PDFStructure
00442 {
00443 
00445   //                                                     //
00446   //  Constructors                                       //
00447   //                                                     //
00449 
00450  public:  
00451   
00452   PDFStructure( ) { }
00453   ~PDFStructure( ) { 
00454     for( vector< PDFPage* >::iterator p_it=thePages.begin() ; p_it!=thePages.end( ) ; ++p_it )
00455       delete *p_it;
00456   }
00457   
00458   
00460   //                                                     //
00461   //  Accessors                                          //
00462   //                                                     //
00464         
00465 public:
00466 
00468   void save( const char* filename );
00470   void newPage( ) { 
00471     thePages.push_back( new PDFPage( ) );
00472   }
00473 
00475 
00479   void addObject( int p , PDFPageObject* obj ) { thePages[p]->addObject( obj ); }
00480 
00482   //                                                     //
00483   //  Internal functions                                 //
00484   //                                                     //
00486 
00487  private:
00488   
00489   pair< const char* , int > preparePageContents( int p ) const;
00490   
00492   //                                                     //
00493   //  Data members                                       //
00494   //                                                     //
00496     
00497  private:
00498  
00499   vector< PDFPage* > thePages;
00500   
00501 };
00502 
00503 
00504 #endif
00505 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on Mon Sep 26 18:43:45 2011 for CRyptography And Groups (CRAG) by  doxygen 1.6.1