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

Generated on Fri Mar 25 19:47:03 2005 for LabPlot by doxygen 1.3.6