OpenMesh
Gnuplot.hh
1
2//
3// A C++ interface to gnuplot.
4//
5// This is a direct translation from the C interface
6// written by N. Devillard (which is available from
7// http://ndevilla.free.fr/gnuplot/).
8//
9// As in the C interface this uses pipes and so wont
10// run on a system that doesn't have POSIX pipe
11// support
12//
13// Rajarshi Guha
14// <rajarshi@presidency.com>
15//
16// 07/03/03
17//
19//
20// A little correction for Win32 compatibility
21// and MS VC 6.0 done by V.Chyzhdzenka
22//
23// Notes:
24// 1. Added private method Gnuplot::init().
25// 2. Temporary file is created in th current
26// folder but not in /tmp.
27// 3. Added #indef WIN32 e.t.c. where is needed.
28// 4. Added private member m_sGNUPlotFileName is
29// a name of executed GNUPlot file.
30//
31// Viktor Chyzhdzenka
32// e-mail: chyzhdzenka@mail.ru
33//
34// 20/05/03
35//
37
38#ifndef _GNUPLOT_HH
39#define _GNUPLOT_HH
40
41#include <OpenMesh/Core/System/config.hh>
42// #ifndef WIN32
43// # include <unistd.h>
44// #else
45// # pragma warning (disable : 4786) // Disable 4786 warning for MS VC 6.0
46// #endif
47#if defined(OM_CC_MIPS)
48# include <stdio.h>
49#else
50# include <cstdio>
51#endif
52#include <string>
53#include <vector>
54#include <stdexcept>
55
56// ----------------------------------------------------------------------------
57
58#ifdef WIN32
59# define GP_MAX_TMP_FILES 27 //27 temporary files it's Microsoft restriction
60#else
61# define GP_MAX_TMP_FILES 64
62# define GP_TMP_NAME_SIZE 512
63# define GP_TITLE_SIZE 80
64#endif
65#define GP_CMD_SIZE 1024
66
67// ----------------------------------------------------------------------------
68
69using namespace std;
70
71// ----------------------------------------------------------------------------
72
74class GnuplotException : public runtime_error
75{
76public:
77 explicit GnuplotException(const string &msg) : runtime_error(msg){}
78};
79
80// ----------------------------------------------------------------------------
81
93{
94private:
95
96 FILE *gnucmd;
97 string pstyle;
98 vector<string> to_delete;
99 int nplots;
100 bool get_program_path(const string& );
101 bool valid;
102
103 // Name of executed GNUPlot file
104 static string gnuplot_executable_;
105
106 void init();
107
108public:
109
111
112
113 Gnuplot();
114
116 explicit Gnuplot(const string & _style);
117
119 Gnuplot(const string & _title,
120 const string & _style,
121 const string & _xlabel,
122 const string & _ylabel,
123 const vector<double>& _x, const vector<double>& _y);
124
126 Gnuplot(const string &_title,
127 const string &_style,
128 const string &_xlabel,
129 const string &_ylabel,
130 const vector<double>& _x);
132
133 ~Gnuplot();
134
136 void cmd(const char *_cmd, ...);
137
139
140 void set_style(const string & _style);
141 void set_ylabel(const string & _ylabel);
142 void set_xlabel(const string & _xlabel);
144
146
147
149 void plot_x(const vector<double>& _x, const string &_title);
150
152 void plot_xy(const vector<double>& _x, const vector<double>& _y, const string &_title);
153
156 void plot_slope(
157 double _a,
158 double _b,
159 const string & _title
160 );
161
163 void plot_equation(
164 const string & _equation,
165 const string & _title
166 );
167
169 void reset_plot(void);
170
172
174 bool is_valid(void) const { return valid; }
175
177 bool is_active(void) const { return this->nplots > 0; }
178};
179
180
181// ----------------------------------------------------------------------------
182#endif // _GNUPLOT_HH
183// ============================================================================
184
Exception thrown by class Gnuplot.
Definition: Gnuplot.hh:75
Utility class interfacing with Gnuplot.
Definition: Gnuplot.hh:93
bool is_valid(void) const
Is Self valid?
Definition: Gnuplot.hh:174
void set_xlabel(const string &_xlabel)
set x axis label
Definition: Gnuplot.cc:290
void plot_slope(double _a, double _b, const string &_title)
Plot an equation of the form: y = ax + b You supply a and b.
Definition: Gnuplot.cc:305
void cmd(const char *_cmd,...)
Send a command to gnuplot (low-level function use by all plot functions.)
Definition: Gnuplot.cc:261
~Gnuplot()
Default constructor.
Definition: Gnuplot.cc:191
void plot_x(const vector< double > &_x, const string &_title)
Plot a single vector.
Definition: Gnuplot.cc:352
void plot_xy(const vector< double > &_x, const vector< double > &_y, const string &_title)
Plot x,y pairs.
Definition: Gnuplot.cc:421
Gnuplot()
Default constructor.
Definition: Gnuplot.cc:110
void reset_plot(void)
If multiple plots are present it will clear the plot area.
Definition: Gnuplot.cc:230
void set_style(const string &_style)
set line style
Definition: Gnuplot.cc:243
bool is_active(void) const
Is Self active, i.e. does it have an active plot?
Definition: Gnuplot.hh:177
void plot_equation(const string &_equation, const string &_title)
Plot an equation supplied as a string.
Definition: Gnuplot.cc:328
void set_ylabel(const string &_ylabel)
set x axis label
Definition: Gnuplot.cc:278

Project OpenMesh, ©  Visual Computing Institute, RWTH Aachen. Documentation generated using doxygen .