Main Page | Namespace List | Class Hierarchy | Class List | File List | Class Members | File Members

Plot.h

Go to the documentation of this file.
00001 //LabPlot : Plot.h
00002 
00003 #ifndef PLOT_H
00004 #define PLOT_H
00005 
00006 #include <math.h>
00007 #include "Worksheet.h"
00008 #include "Legend.h"
00009 #include "Label.h"
00010 #include "Axis.h"
00011 
00012 class Legend;
00013 
00014 class Plot {
00015 public:
00016         Plot(class Worksheet *p);
00017         virtual ~Plot() {}
00018         GraphList *getGraphList() { return graphlist; }
00019         void clear() {graphlist->clear();}
00020         void save(QTextStream *t);
00021         virtual void saveAxes(QTextStream *t) = 0;
00022         void saveAxis(QTextStream *t,Axis *axis,int gridenabled, int borderenabled, int minorgridenabled);
00023         void open(QTextStream *t, int version);
00024         void openAxis(QTextStream *t,int version, Axis *axis,bool *gridenabled,bool *borderenabled, bool *minorgridenabled);
00025         virtual void openAxes(QTextStream *t, int version) = 0;
00026 
00027         QString TicLabel(int atlf, int prec, QString dtf, double value);
00028         double TicLabelValue(int atlf, QString string);
00029         
00030         virtual Axis *getAxis(int i) = 0;
00031         Legend* getLegend() { return &legend; }
00032         void setType(PType i) { type = i; }
00033         PType Type() { return type; }
00034         Label* Title() { return title; }
00035         virtual void setRange(LRange *,int i) = 0;
00036         LRange* Range(int i) { return &range[i];}
00037         virtual void setActRange(LRange *,int i) = 0;
00038         LRange* ActRange(int i) { return &actrange[i];}
00039         virtual void setRanges(LRange *) = 0;
00040         LRange* Ranges() { return range;}
00041         virtual void setActRanges(LRange *) = 0;
00042         LRange* ActRanges() { return actrange;}
00043         void setRegionMin(double min) {region->setMin(min);}
00044         void setRegionMax(double max) {region->setMax(max);}
00045         void setRegion(double min, double max) {region->setMin(min); region->setMax(max);}
00046         void setRegion(LRange *r) {region->setMin(r->rMin()); region->setMax(r->rMax());}
00047         double RegionMin() {return region->rMin();}
00048         double RegionMax() {return region->rMax();}
00049         LRange *Region() { return region; }
00050         bool regionEnabled() { return region_enabled; }
00051         void setRegionEnabled(bool e=true) { region_enabled = e; }
00052         void setTransparent(bool t) { transparent = t; }
00053         bool Transparent() { return transparent; }
00054         void setClipOffset(int c) { clipoffset=c;}
00055         int ClipOffset() { return clipoffset;}
00056 
00057         virtual void enableGrid(int index,bool b=true) = 0;
00058         virtual bool gridEnabled(int index) = 0;
00059         virtual void enableBorder(int index,bool b=true) = 0;
00060         virtual bool borderEnabled(int index) = 0;
00061         bool baselineEnabled() { return baseline_enabled; }
00062         void setBaselineEnabled(bool e=true) { baseline_enabled = e; }
00063         double Baseline() { return baseline; }
00064         void setBaseline(double b) { baseline = b; }
00065         double XBaseline() { return xbaseline; }
00066         void setXBaseline(double b) { xbaseline = b; }
00067         bool xbaselineEnabled() { return xbaseline_enabled; }
00068         void setXBaselineEnabled(bool e=true) { xbaseline_enabled = e; }
00069 
00070         bool marksEnabled() { return marks_enabled; }
00071         void setMarksEnabled(bool m=true) { marks_enabled=m; }
00072         LRange *markX() { return markx; }
00073         void setMarkX(LRange *l) { markx=l; }
00074         LRange *markY() { return marky; }
00075         void setMarkY(LRange *l) { marky=l; }
00076 
00077         virtual void draw(QPainter *p, int w, int h) = 0;
00078         void drawStyle(QPainter *p, Style *s, Symbol *symbol, QPointArray pa, int xmin, int xmax, int ymin, int ymax);
00079         void drawErrorBar(QPainter *p, QPointArray pa, QPointArray hpa, QPointArray vpa);
00080         virtual void setBorder(int,bool) = 0;
00081         bool inside(double x, double y) {
00082                 if(x>position.X() && x<position.X()+size.X() && y>position.Y() && y<position.Y()+size.Y())
00083                         return true;
00084                 else
00085                         return false;
00086         }
00087         bool insideLegend(int x,int y) { if (legend.inside(x,y)) return true; return false;}
00088         bool insidePlottingArea(double x,double y) {
00089                 if (x>p1.X() && x<p2.X() && y>p1.Y() && y<p2.Y()) return true; return false;
00090         }
00091         bool insideF1Corner(double x, double y) {
00092                 if(fabs(x-position.X()) < 0.01 && fabs(y-position.Y())<0.01)
00093                         return true;
00094                 return false;
00095         }
00096         bool insideF2Corner(double x, double y) {
00097                 if(fabs(x-position.X()-size.X()) < 0.01 && fabs(y-position.Y()-size.Y())<0.01)
00098                         return true;
00099                 return false;
00100         }
00101         bool insideB1Corner(double x, double y) {
00102                 if(fabs(x-position.X()) < 0.01 && fabs(y-position.Y()-size.Y())<0.01)
00103                         return true;
00104                 return false;
00105         }
00106         bool insideB2Corner(double x, double y) {
00107                 if(fabs(x-position.X()-size.X()) < 0.01 && fabs(y-position.Y())<0.01)
00108                         return true;
00109                 return false;
00110         }
00111         bool insideX1Border(double x, double y) {
00112                 if(x >position.X() && x<position.X()+size.X() && fabs(y-position.Y()-size.Y())<0.01)
00113                         return true;
00114                 return false;
00115         }
00116         bool insideX2Border(double x, double y) {
00117                 if(x >position.X() && x<position.X()+size.X() && fabs(y-position.Y())<0.01)
00118                         return true;
00119                 return false;
00120         }
00121         bool insideY1Border(double x, double y) {
00122                 if(y >position.Y() && y<position.Y()+size.Y() && fabs(x-position.X())<0.01)
00123                         return true;
00124                 return false;
00125         }
00126         bool insideY2Border(double x, double y) {
00127                 if(y >position.Y() && y<position.Y()+size.Y() && fabs(x-position.X()-size.X())<0.01)
00128                         return true;
00129                 return false;
00130         }
00131         bool insideCenter(double x, double y) {
00132                 if(fabs(x-position.X()-size.X()/2.0)<0.01 && fabs(y-position.Y()-size.Y()/2.0)<0.01)
00133                         return true;
00134                 return false;
00135         }
00136         void setPosition(Point p) { position = p; }
00137         void setPosition(double x, double y) { position = Point(x,y); }
00138         Point Position() { return position; }
00139         void setSize(Point s) { size = s; }
00140         void setSize(double x, double y) { size = Point(x,y); }
00141         Point Size() { return size; }
00142         QColor Background() { return bgcolor; }
00143         void setBackground(QColor c) { bgcolor = c; }
00144         void setBackground(QString c) { bgcolor = QColor(c); }
00145         QColor graphBackground() { return gbgcolor; }
00146         void setGraphBackground(QColor c) { gbgcolor = c;}
00147         void setGraphBackground(QString c) { gbgcolor = QColor(c);}
00148         void autoScaleX();
00149         void autoScaleY();
00150         void autoScaleZ();
00151         void setXRange(double x1, double x2) {actrange[0].setMin(x1); actrange[0].setMax(x2); }
00152         void setYRange(double y1, double y2) {actrange[1].setMin(y1); actrange[1].setMax(y2); }
00153         void setZRange(double z1, double z2) {actrange[2].setMin(z1); actrange[2].setMax(z2); }
00154 
00155         Point P1() { return p1;}
00156         Point P2() { return p2;}
00157         void setP1(Point p) { p1=p;}
00158         void setP2(Point p) { p2=p;}
00159 
00160         void setXMin(int xmin,int X) { p1.setPoint((xmin/(double)X-position.X())/size.X(),p1.Y()); }
00161         void setXMax(int xmax,int X) { p2.setPoint((xmax/(double)X-position.X())/size.X(),p2.Y()); }
00162         void setYMin(int ymin,int Y) { p1.setPoint(p1.X(),(ymin/(double)Y-position.Y())/size.Y()); }
00163         void setYMax(int ymax,int Y) { p2.setPoint(p2.X(),(ymax/(double)Y-position.Y())/size.Y()); }
00164 
00165         void shiftRight();
00166         void shiftLeft();
00167         void shiftUp();
00168         void shiftDown();
00169         void scaleXUp();
00170         void scaleXDown();
00171         void scaleYUp();
00172         void scaleYDown();
00173         void scaleZUp();
00174         void scaleZDown();
00175         void zoomIn();
00176         void zoomOut();
00177 
00178         Point dataValue(double x);
00179 protected:
00180         int autoTics(double min, double max);   // calcuate tic number for auto tics
00181         Worksheet *worksheet;                   // parent worksheet
00182         PType type;                             // type of the plot
00183         GraphList *graphlist;                   // list of graphs
00184         Point position, size;                           // position and size (0..1)
00185         Label *title;                                   // Title
00186         Legend legend;                          // Legend
00187         QColor bgcolor, gbgcolor;               // background & graph background color
00188         Point p1, p2;                                   // plotting area        (0..1)
00189         LRange range[3];                                // graph ranges (x,y,z)
00190         LRange actrange[3];                     // actual plotting range (x,y,z)
00191         double baseline;                                // baseline
00192         bool baseline_enabled;                  // draw it ?
00193         double xbaseline;                               // x baseline
00194         bool xbaseline_enabled;                 // draw it ?
00195         LRange *region;                         // region
00196         bool region_enabled;                    // draw it ?
00197         bool transparent;                               // draw bgcolor & gbgcolor ?
00198         int clipoffset;                                 // offset for clipping area drawing (Symbols->full drawn, line section->limited)
00199         bool marks_enabled;
00200         LRange *markx, *marky;                  // marker
00201 };
00202 
00203 #ifndef HAVE_LOG2
00204 inline double log2(double x) {return log(x)/log(2.0);}
00205 #endif
00206 
00207 #endif // PLOT_H

Generated on Fri Aug 19 21:34:45 2005 for LabPlot by doxygen 1.3.6