Main Page | Modules | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

Gnuplot.hh

00001 
00002 //
00003 // A C++ interface to gnuplot. 
00004 //
00005 // This is a direct translation from the C interface
00006 // written by N. Devillard (which is available from
00007 // http://ndevilla.free.fr/gnuplot/).
00008 //
00009 // As in the C interface this uses pipes and so wont
00010 // run on a system that doesn't have POSIX pipe 
00011 // support
00012 //
00013 // Rajarshi Guha
00014 // <rajarshi@presidency.com>
00015 //
00016 // 07/03/03
00017 //
00019 //
00020 // A little correction for Win32 compatibility
00021 // and MS VC 6.0 done by V.Chyzhdzenka 
00022 //
00023 // Notes:
00024 // 1. Added private method Gnuplot::init().
00025 // 2. Temporary file is created in th current
00026 //    folder but not in /tmp.
00027 // 3. Added #indef WIN32 e.t.c. where is needed.
00028 // 4. Added private member m_sGNUPlotFileName is
00029 //    a name of executed GNUPlot file.
00030 //
00031 // Viktor Chyzhdzenka
00032 // e-mail: chyzhdzenka@mail.ru
00033 //
00034 // 20/05/03
00035 //
00037 
00038 #ifndef _GNUPLOT_HH
00039 #define _GNUPLOT_HH
00040 
00041 #include <OpenMesh/Core/System/config.hh>
00042 // #ifndef WIN32
00043 // #  include <unistd.h>
00044 // #else
00045 // #  pragma warning (disable : 4786) // Disable 4786 warning for MS VC 6.0
00046 // #endif
00047 #if defined(OM_CC_MIPS)
00048 #  include <stdio.h>
00049 #else
00050 #  include <cstdio>
00051 #endif
00052 #include <string>
00053 #include <vector>
00054 #include <stdexcept>
00055 
00056 // ----------------------------------------------------------------------------
00057 
00058 #ifdef WIN32
00059 #  define GP_MAX_TMP_FILES    27 //27 temporary files it's Microsoft restriction
00060 #else
00061 #  define GP_MAX_TMP_FILES    64
00062 #  define GP_TMP_NAME_SIZE    512
00063 #  define GP_TITLE_SIZE       80
00064 #endif
00065 #define GP_CMD_SIZE         1024
00066 
00067 // ----------------------------------------------------------------------------
00068 
00069 using namespace std;
00070 
00071 // ----------------------------------------------------------------------------
00072 
00074 class GnuplotException : public runtime_error
00075 {
00076 public:
00077   GnuplotException(const string &msg) : runtime_error(msg){}
00078 };
00079 
00080 // ----------------------------------------------------------------------------
00081 
00092 class Gnuplot
00093 {
00094 private:
00095 
00096   FILE            *gnucmd;
00097   string           pstyle;
00098   vector<string>   to_delete;
00099   int              nplots;
00100   bool             get_program_path(const string);
00101   bool             valid;
00102 
00103   // Name of executed GNUPlot file
00104   static string    gnuplot_executable_;
00105 
00106   void init();
00107 
00108 public:
00109 
00111 
00112 
00113   Gnuplot();
00114   
00116   Gnuplot(const string & _style);
00117 
00119   Gnuplot(const string & _title,
00120           const string & _style,
00121           const string & _xlabel,
00122           const string & _ylabel,
00123           vector<double> _x, vector<double> _y);
00124   
00126   Gnuplot(const string &_title,
00127           const string &_style,
00128           const string &_xlabel,
00129           const string &_ylabel,
00130           vector<double> _x);
00132 
00133   ~Gnuplot();
00134   
00136   void cmd(const char *_cmd, ...);
00137   
00139 
00140   void set_style(const string & _style);   
00141   void set_ylabel(const string & _ylabel); 
00142   void set_xlabel(const string & _xlabel); 
00143 
00144 
00146 
00147 
00149   void plot_x(vector<double> _x, const string &_title);
00150   
00152   void plot_xy(vector<double> _x, vector<double> _y, const string  &_title);
00153   
00156   void plot_slope(
00157                   double _a,
00158                   double _b,
00159                   const string & _title
00160                   );
00161   
00163   void plot_equation(
00164                      const string & _equation,
00165                      const string & _title
00166                      );
00167   
00169   void reset_plot(void);
00170 
00172 
00174   bool is_valid(void) const { return valid; }
00175 
00177   bool is_active(void) const { return this->nplots > 0; }
00178 };
00179 
00180 
00181 // ----------------------------------------------------------------------------
00182 #endif // _GNUPLOT_HH
00183 // ============================================================================
00184 

acg pic Project OpenMesh, ©  Computer Graphics Group, RWTH Aachen. Documentation generated using doxygen .