source: branches/plotter2/src/Plotter2.h @ 2825

Last change on this file since 2825 was 2825, checked in by WataruKawasaki, 11 years ago

New Development: Yes

JIRA Issue: Yes (CAS-3620)

Ready for Test: Yes

Interface Changes: No

What Interface Changed:

Test Programs:

Put in Release Notes: Yes

Module(s): sd

Description: add a new sd module sd.plotter2, a new lightweight plotter based on pgplot.


File size: 6.6 KB
Line 
1#include <iostream>
2#include <math.h>
3#include <stdio.h>
4#include <string>
5#include <unistd.h>
6#include <vector>
7
8#include <cpgplot.h>
9
10namespace asap {
11
12class Plotter2RectInfo {
13public:
14    Plotter2RectInfo();
15    ~Plotter2RectInfo();
16
17    float xmin;
18    float xmax;
19    float ymin;
20    float ymax;
21
22    int color;
23    int fill;
24    int width;
25    float hsep;
26};
27
28class Plotter2DataInfo {
29public:
30    Plotter2DataInfo();
31    ~Plotter2DataInfo();
32
33    std::vector<float> xData;
34    std::vector<float> yData;
35
36    bool drawLine;
37    int lineColor;
38    int lineWidth;
39    int lineStyle;
40
41    bool drawMarker;
42    int markerType;
43    float markerSize;
44    int markerColor;
45
46    bool hasData;
47};
48
49class Plotter2ViewportInfo {
50public:
51    Plotter2ViewportInfo();
52    ~Plotter2ViewportInfo();
53
54    // show the whole viewport
55    bool showViewport;
56
57    // viewport position in window-coordinate
58    float vpPosXMin;
59    float vpPosXMax;
60    float vpPosYMin;
61    float vpPosYMax;
62
63    // plotting range in world-coordinate
64    float vpRangeXMin;
65    float vpRangeXMax;
66    float vpRangeYMin;
67    float vpRangeYMax;
68
69    // set plotting range automatic
70    bool isAutoRangeX;
71    bool isAutoRangeY;
72    float autoRangeMarginX;
73    float autoRangeMarginY;
74    void adjustRange();
75    std::vector<float> getRangeX();
76    std::vector<float> getRangeY();
77
78    // tick intervals
79    bool isAutoTickIntervalX;
80    bool isAutoTickIntervalY;
81    float majorTickIntervalX;
82    float majorTickIntervalY;
83    int nMajorTickWithinTickNumsX;
84    int nMajorTickWithinTickNumsY;
85    int nMinorTickWithinMajorTicksX;
86    int nMinorTickWithinMajorTicksY;
87    void adjustTickInterval();
88
89    // location of value strings along axes
90    std::string numLocationX;
91    std::string numLocationY;
92
93    // default font size
94    float fontSizeDef;
95
96    // data to be plotted
97    std::vector<Plotter2DataInfo> vData;
98    void setData(const std::vector<float>& inXData, const std::vector<float>& inYData, const int id);
99
100    // rectangles
101    std::vector<Plotter2RectInfo> vRect;
102
103    // x-label
104    std::string labelXString;
105    float labelXPosX;
106    float labelXPosY;
107    float labelXAngle;
108    float labelXFJust;
109    float labelXSize;
110    int labelXColor;
111    int labelXBColor;
112
113    // y-label
114    std::string labelYString;
115    float labelYPosX;
116    float labelYPosY;
117    float labelYAngle;
118    float labelYFJust;
119    float labelYSize;
120    int labelYColor;
121    int labelYBColor;
122
123    // title
124    std::string titleString;
125    float titlePosX;
126    float titlePosY;
127    float titleAngle;
128    float titleFJust;
129    float titleSize;
130    int titleColor;
131    int titleBColor;
132
133    // background colour
134    int vpBColor;
135
136    void getWorldCoordByWindowCoord(const float winX, const float winY, float* worldX, float* worldY);
137
138private:
139    float minXData;
140    float maxXData;
141    float minYData;
142    float maxYData;
143    bool hasDataRange;
144    void updateXDataRange(const float data);
145    void updateYDataRange(const float data);
146    void updateAllDataRanges();
147    void adjustRangeX(float* xmin, float* xmax);
148    void adjustRangeY(float* ymin, float* ymax);
149    void adjustTickIntervalX();
150    void adjustTickIntervalX(const float xmin, const float xmax);
151    void adjustTickIntervalY();
152    void adjustTickIntervalY(const float ymin, const float ymax);
153};
154
155class Plotter2 {
156public:
157    Plotter2();
158    ~Plotter2();
159
160    void setFileName(const std::string& inFilename);
161    void setDevice(const std::string& inDevice);
162
163    int addViewport(const float xmin, const float xmax, const float ymin, const float ymax);
164    void setViewport(const float xmin, const float xmax, const float ymin, const float ymax, const int id);
165    void showViewport(const int inVpid);
166    void hideViewport(const int inVpid);
167    bool getHasDefaultViewport();
168    int getCurrentViewportId();
169    void getViewInfo();
170    void setRange(const float xmin, const float xmax, const float ymin, const float ymax, const int inVpid);
171    void setRangeX(const float xmin, const float xmax, const int inVpid);
172    void setRangeY(const float ymin, const float ymax, const int inVpid);
173    std::vector<float> getRangeX(const int inVpid);
174    std::vector<float> getRangeY(const int inVpid);
175    void setAutoRange(const int inVpid);
176    void setAutoRangeX(const int inVpid);
177    void setAutoRangeY(const int inVpid);
178    void setFontSizeDef(const float size, const int inVpid);
179    void setTicksX(const float interval, const int num, const int inVpid);
180    void setTicksY(const float interval, const int num, const int inVpid);
181    void setAutoTicks(const int inVpid);
182    void setAutoTicksX(const int inVpid);
183    void setAutoTicksY(const int inVpid);
184    void setNumIntervalX(const float interval, const int inVpid);
185    void setNumIntervalY(const float interval, const int inVpid);
186    void setNumLocationX(const std::string& side, const int inVpid);
187    void setNumLocationY(const std::string& side, const int inVpid);
188    void setData(const std::vector<float>& xdata, const std::vector<float>& ydata, const int inVpid, const int inDataid);
189    void setLine(const int color, const int width, const int style, const int inVpid, const int inDataid);
190    void showLine(const int inVpid, const int inDataid);
191    void hideLine(const int inVpid, const int inDataid);
192    void setPoint(const int type, const float size, const int color, const int inVpid, const int inDataid);
193    void showPoint(const int inVpid, const int inDataid);
194    void hidePoint(const int inVpid, const int inDataid);
195    void setMaskX(const float xmin, const float xmax, const int color, const int fill, const int width, const float hsep, const int inVpid);
196    void setLabelX(const std::string& label, const float posx, const float posy, const float size, const std::string& style, const int color, const int bgcolor, const int inVpid);
197    void setLabelY(const std::string& label, const float posx, const float posy, const float size, const std::string& style, const int color, const int bgcolor, const int inVpid);
198    void setTitle(const std::string& label, const float posx, const float posy, const float size, const std::string& style, const int color, const int bgcolor, const int inVpid);
199    void setViewportBackgroundColor(const int bgcolor, const int inVpid);
200    //void setAnnotation(const std::string& label, const float posx, const float posy, const float angle, const float fjust, const float size, const std::string& style, const int color, const int bgcolor, const int inVpid);
201    void plot();
202private:
203    std::string filename;
204    std::string device;
205    bool hasDevice;
206    std::vector<Plotter2ViewportInfo> vInfo;
207    bool hasDefaultViewport;
208    int currentViewportId;
209    void open();
210    void close();
211};
212
213} // namespace asap
Note: See TracBrowser for help on using the repository browser.