QtiPlot 0.9.8.2
|
00001 /*************************************************************************** 00002 File : Filter.h 00003 Project : QtiPlot 00004 -------------------------------------------------------------------- 00005 Copyright : (C) 2007 by Ion Vasilief 00006 Email (use @ for *) : ion_vasilief*yahoo.fr 00007 Description : Abstract base class for data analysis operations 00008 00009 ***************************************************************************/ 00010 00011 /*************************************************************************** 00012 * * 00013 * This program is free software; you can redistribute it and/or modify * 00014 * it under the terms of the GNU General Public License as published by * 00015 * the Free Software Foundation; either version 2 of the License, or * 00016 * (at your option) any later version. * 00017 * * 00018 * This program is distributed in the hope that it will be useful, * 00019 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00020 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 00021 * GNU General Public License for more details. * 00022 * * 00023 * You should have received a copy of the GNU General Public License * 00024 * along with this program; if not, write to the Free Software * 00025 * Foundation, Inc., 51 Franklin Street, Fifth Floor, * 00026 * Boston, MA 02110-1301 USA * 00027 * * 00028 ***************************************************************************/ 00029 #ifndef FILTER_H 00030 #define FILTER_H 00031 00032 #include <QObject> 00033 00034 #include <ApplicationWindow.h> 00035 00036 class MultiLayer; 00037 class QwtPlotCurve; 00038 class Graph; 00039 class Table; 00040 00042 class Filter : public QObject 00043 { 00044 Q_OBJECT 00045 00046 public: 00047 Filter(ApplicationWindow *parent, Table *t = 0, const QString& name = QString()); 00048 Filter(ApplicationWindow *parent, Graph *g = 0, const QString& name = QString()); 00049 Filter(ApplicationWindow *parent, QwtPlotCurve *c); 00050 ~Filter(); 00051 00053 virtual bool run(); 00054 00055 virtual void setDataCurve(QwtPlotCurve *curve, double start, double end); 00056 bool setDataFromCurve(QwtPlotCurve *c); 00057 bool setDataFromCurve(QwtPlotCurve *c, double from, double to); 00058 bool setDataFromCurve(const QString& curveTitle, Graph *g = 0); 00059 bool setDataFromCurve(const QString& curveTitle, double from, double to, Graph *g = 0); 00060 00061 virtual bool setDataFromTable(Table *, const QString&, const QString&, int = 1, int = -1); 00062 00064 void setInterval(double from, double to); 00065 00067 void setTolerance(double eps){d_tolerance = eps;}; 00068 00070 void setColor(int colorId); 00072 void setColor(const QColor& color){d_curveColor = color;}; 00074 void setColor(const QString& colorName); 00075 00077 void setOutputPoints(int points){d_points = points;}; 00078 00080 void setOutputPrecision(int digits){d_prec = digits;}; 00081 00083 void setMaximumIterations(int iter){d_max_iterations = iter;}; 00084 00086 virtual void showLegend(); 00087 00089 virtual QString legendInfo(){return QString();}; 00090 00092 int dataSize(){return d_n;}; 00094 double* x(){return d_x;}; 00096 double* y(){return d_y;}; 00098 Table *resultTable(){return d_result_table;}; 00100 Graph *outputGraph(){return d_output_graph;}; 00101 00102 bool error(){return d_init_err;}; 00103 void setError(bool on = true){d_init_err = on;}; 00104 00105 virtual void enableGraphicsDisplay(bool on = true, Graph *g = 0); 00106 00107 void setUpdateOutputGraph(bool update = true) {d_update_output_graph = update;}; 00108 00109 protected: 00110 void init(); 00111 void memoryErrorMessage(); 00113 virtual void freeMemory(); 00114 00117 virtual int curveData(QwtPlotCurve *c, double start, double end, double **x, double **y); 00119 virtual int sortedCurveData(QwtPlotCurve *c, double start, double end, double **x, double **y); 00120 00121 int curveRange(QwtPlotCurve *c, double start, double end, int *iStart, int *iEnd); 00122 00124 QwtPlotCurve* addResultCurve(double *x, double *y); 00125 00127 int curveIndex(const QString& curveTitle, Graph *g); 00128 00130 virtual QString logInfo(){return QString();}; 00131 00133 virtual void output(); 00134 00136 virtual void calculateOutputData(double *X, double *Y) { Q_UNUSED(X) Q_UNUSED(Y) }; 00137 00138 MultiLayer* createOutputGraph(); 00139 00141 Graph *d_graph; 00142 00144 Graph *d_output_graph; 00145 00147 Table *d_table; 00148 00150 Table *d_result_table; 00151 00153 int d_n; 00154 00156 double *d_x; 00157 00159 double *d_y; 00160 00162 double d_tolerance; 00163 00165 int d_points; 00166 00168 QColor d_curveColor; 00169 00171 int d_max_iterations; 00172 00174 QwtPlotCurve *d_curve; 00175 00177 int d_prec; 00178 00180 bool d_init_err; 00181 00183 double d_from, d_to; 00184 00186 bool d_sort_data; 00187 00189 int d_min_points; 00190 00192 QString d_explanation; 00193 00195 bool d_graphics_display; 00196 00198 bool d_update_output_graph; 00199 00200 QString d_y_col_name; 00201 }; 00202 00203 #endif