Blame view

src/ParamOutputImpl/Plot/PanelPlotOutput.hh 19.5 KB
fbe3c2bb   Benjamin Renard   First commit
1
2
3
4
5
6
7
8
9
10
/*
 * PanelPlotOutput.hh
 *
 *  Created on: 29 oct. 2013
 *      Author: CS
 */

#ifndef PANELPLOTOUTPUT_HH_
#define PANELPLOTOUTPUT_HH_

db5907ad   Menouard AZIB   Plot Preview Down...
11
12
#include "ContextFileWriter.hh"
#include "Layout.hh"
5239be86   Menouard AZIB   Updates from dev
13
#include "Panel.hh"
db5907ad   Menouard AZIB   Plot Preview Down...
14
15
#include "PanelPlotOutputException.hh"
#include "ParamOutput.hh"
fbe3c2bb   Benjamin Renard   First commit
16
#include "ParameterAxes.hh"
fbe3c2bb   Benjamin Renard   First commit
17
#include "ParameterData.hh"
db5907ad   Menouard AZIB   Plot Preview Down...
18
#include "PlotLogger.hh"
fbe3c2bb   Benjamin Renard   First commit
19
20
#include <AMDA_exception.hh>
#include <cxxabi.h>
db5907ad   Menouard AZIB   Plot Preview Down...
21
22
23
24
#include <fstream>
#include <iostream>
#include <tuple>
#include <vector>
5239be86   Menouard AZIB   Updates from dev
25
26
27
28
#include "PlotLogger.hh"
#include "PanelPlotOutputException.hh"
#include "Layout.hh"
#include "ContextFileWriter.hh"
5953671a   Erdogan Furkan   For now
29
#include "Matrix.hh"
fbe3c2bb   Benjamin Renard   First commit
30
31
32

#include <cfloat>

5239be86   Menouard AZIB   Updates from dev
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
namespace plot {

// 0 => xmin
// 1 => xmax
// 2 => ymin
// 3 => ymax
typedef std::tuple<double, double, double, double> PlWindow;
// 0 => x major tick space
// 1 => x minor tick number
// 2 => y major tick space
// 3 => y minor tick number
typedef std::tuple<double, double, double, double> TickConf;

/**
 * Margin.
 */
struct Margin {
	double _left;
	double _right;
	double _top;
	double _bottom;
};

class PanelPlotOutput {
public:
	static const float DEFAULT_TICK_LENGTH_FACTOR;

	/**
	 * Width character proportion is approximatively 0.83 times smaller than height.
	 */
	static const float CHAR_RATIO;

	/**
	 * This two next attribute tell from which tick length plplot is insufficient to calculate space between tickmarks and ticks.
	 * Space between the two is static and can't be modified by user request.
	 * So when limit is reached we must bypass problem by setting two different viewport to let sufficient space between tickmarks and ticks.
	 */
	static const float VERTICAL_TICK_LENGTH_LIMIT;
	static const float HORIZONTAL_TICK_LENGTH_LIMIT;
                    static const float YAXISMARGIN;
fbe3c2bb   Benjamin Renard   First commit
73

5239be86   Menouard AZIB   Updates from dev
74
75
76
	PanelPlotOutput(AMDA::Parameters::ParameterManager& manager,
			boost::shared_ptr<Panel> panel, bool isStandalone = true);
	virtual ~PanelPlotOutput();
fbe3c2bb   Benjamin Renard   First commit
77
78

	/**
5239be86   Menouard AZIB   Updates from dev
79
80
81
	 * type name. This name is used to identify nodes in xml config
	 * and xml request.
	 * @return
fbe3c2bb   Benjamin Renard   First commit
82
	 */
fbe3c2bb   Benjamin Renard   First commit
83
84
85
	virtual const std::string typeName() = 0;

	/**
1d1a3b8a   Erdogan Furkan   Done for tickPlot...
86
87
88
89
90
91
92
	 * type name. This name is used to identify nodes in xml config
	 * and xml request.
	 * @return
	 */
	virtual const std::string subTypeName() = 0;

	/**
fbe3c2bb   Benjamin Renard   First commit
93
94
	 * @brief Compute the initial plot area for the panel
	 */
b5acc176   Erdogan Furkan   #11391 Done
95
96
	virtual void preparePlotArea (double startTime, double stopTime, int intervalIndex, 
						std::vector<std::string>* ttNames = NULL);
fbe3c2bb   Benjamin Renard   First commit
97
98
99
100

	/**
	 * @brief Retrieve plot area bounds for the panel
	 */
5239be86   Menouard AZIB   Updates from dev
101
	virtual void getPlotAreaBounds (Bounds &plotAreaBounds);
fbe3c2bb   Benjamin Renard   First commit
102
103
104
105
106
107
108
109
110

	/**
	 * @brief Force the plot area horizontal position and width
	 */
	virtual void forcePlotAreaPosAndWidth(double plotAreaX, double plotAreaWidth);

	/**
	 * @brief Retrieve left axis tickMark width
	 */
5239be86   Menouard AZIB   Updates from dev
111
	virtual int getLeftAxisTickMarkWidth (void);
fbe3c2bb   Benjamin Renard   First commit
112
113
114
115
116
117
118
119
120

	/**
	 * @brief Force left axis tickmark width for the panel
	 */
	virtual void forceLeftAxisTickMarkWidth(int leftAxisTickMarkWidth);

	/**
	 * @brief draw the plot for the current time interval
	 */
d57f00dc   Benjamin Renard   Draw NO DATA
121
	virtual bool draw(double startTime, double stopTime, int intervalIndex, bool isFirstInterval, bool isLastInterval);
fbe3c2bb   Benjamin Renard   First commit
122

8499fbdd   Benjamin Renard   Context file gene...
123
124
125
	/**
	 * @brief Write plot context
	 */
11080d60   Erdogan Furkan   Previous/next but...
126
	virtual void writeContext(ContextFileWriter &writer, AMDA::Parameters::TimeIntervalList::iterator currentTimeInterval);
8499fbdd   Benjamin Renard   Context file gene...
127

fbe3c2bb   Benjamin Renard   First commit
128
129
130
	/*
	 * @brief Set a pointer to the time intervals list
	 */
1b52e70a   Erdogan Furkan   First Kernel modi...
131
	void setTimeIntervalListPtr(AMDA::Parameters::TimeIntervalList *timeIntervalListPtr);
fbe3c2bb   Benjamin Renard   First commit
132
133
134
135

	/**
	 * Sets PLplot stream to draw panel and plot
	 */
5239be86   Menouard AZIB   Updates from dev
136
	virtual void setPlStream(std::shared_ptr<plstream>& pls);
fbe3c2bb   Benjamin Renard   First commit
137
138
139
140

	/**
	 * Adds a parameter
	 */
5239be86   Menouard AZIB   Updates from dev
141
	virtual void addParam(const std::string& name) {
fbe3c2bb   Benjamin Renard   First commit
142
143
144
145
		ParameterAxes newParameter(name);
		_parameterAxesList.push_back(newParameter);
	}

5239be86   Menouard AZIB   Updates from dev
146
147
148
	virtual ParameterAxes& getParameter(const std::string& name) {
		for (ParameterAxes& param : _parameterAxesList) {
			if (param._originalParamId == name) {
fbe3c2bb   Benjamin Renard   First commit
149
150
151
152
153
154
155
156
				return param;
			}
		}
		ParameterAxes newParameter(name);
		_parameterAxesList.push_back(newParameter);
		return _parameterAxesList.back();
	}

fbe3c2bb   Benjamin Renard   First commit
157
158
159
	/*
	 * Create a sampled parameter from an original parameter and a sampling value
	 */
5239be86   Menouard AZIB   Updates from dev
160
	AMDA::Parameters::ParameterSPtr createSampledParameter(AMDA::Parameters::ParameterSPtr& originalParam, float samplingValue, int gap = -1);
fbe3c2bb   Benjamin Renard   First commit
161
162
163
164

	/*
	 * Create a sampled parameter from an original parameter and a reference parameter for time definition
	 */
5239be86   Menouard AZIB   Updates from dev
165
166
	AMDA::Parameters::ParameterSPtr createSampledParameterUnderReferenceParameter(AMDA::Parameters::ParameterSPtr& originalParam,
			AMDA::Parameters::ParameterSPtr& refParam);
fbe3c2bb   Benjamin Renard   First commit
167
168
169
170
171
172

	/**
	 * Create parameters needed for this plot
	 * By default, the creation method create parameters for a time serie.
	 * Override it for other plot type
	 */
5239be86   Menouard AZIB   Updates from dev
173
	virtual void createParameters(std::list<std::string>& usedParametersId_);
fbe3c2bb   Benjamin Renard   First commit
174
175
176
177

	/**
	 * Get related ParameterAxes for a given color serie id
	 */
5239be86   Menouard AZIB   Updates from dev
178
	ParameterAxes* getParameterAxesByColorSerieId(int colorSerieId);
fbe3c2bb   Benjamin Renard   First commit
179
180

	/**
c46af5a8   Benjamin Renard   Implements multi ...
181
182
	 * Get related ParameterAxes for a given x serie id
	 */
5239be86   Menouard AZIB   Updates from dev
183
	ParameterAxes* getParameterAxesByXSerieId(int xSerieId);
c46af5a8   Benjamin Renard   Implements multi ...
184
185

	/**
fbe3c2bb   Benjamin Renard   First commit
186
187
188
189
190
191
192
193
194
195
	 * Gets sampling value from resolution (point-per-plot) according to
	 * the plot time interval and the base parameter sampling value.
	 */
	virtual double getCorrectedSamplingValue(int maxResolution, double samplingValue);

	/**
	 * @brief Get the list of indexes used for a parameter
	 */
	virtual std::vector<AMDA::Common::ParameterIndexComponent> getParamUsedIndexes(std::string paramId, int dim1Size, int dim2Size = -1);

5239be86   Menouard AZIB   Updates from dev
196
	const Margin getMargin(){
f6eaec4e   Benjamin Renard   Optimize plot ele...
197
		Bounds panelBounds(_panel->getBoundsInPlPage());
fbe3c2bb   Benjamin Renard   First commit
198
199
200
201
202
203
204
205
206
207
208
209

		Margin m;
		m._left = _plotAreaBounds._x - panelBounds._x;
		m._right = (panelBounds._x + panelBounds._width) - (_plotAreaBounds._x + _plotAreaBounds._width);
		m._top = (panelBounds._y + panelBounds._height) - (_plotAreaBounds._y + _plotAreaBounds._height);
		m._bottom = _plotAreaBounds._y - panelBounds._y;
		return m;
	}

	/**
	 * @brief reset plot
	 */
5239be86   Menouard AZIB   Updates from dev
210
	virtual void resetPlot() {
fbe3c2bb   Benjamin Renard   First commit
211
		if (_panel != nullptr)
20fef3b6   Benjamin Renard   Fix reset functio...
212
			_panel->resetPlot();
fbe3c2bb   Benjamin Renard   First commit
213
		_automaticSerieColorCursor = 0;
8bb0f02b   Benjamin Renard   Set colors in axi...
214
		_nbSeriesByYAxisMap.clear();
fbe3c2bb   Benjamin Renard   First commit
215
216
217
218
219
220
221
222
223
224
225
226
227
228
		_pls.reset();
	}

	/*
	 * @brief Set pointer to params values
	 */
	void setParameterValues(std::map<std::string, ParameterData> *pParameterValues);

	/*
	 * @brief Get computed values (in relation with the y axis definition) for a y serie, an index of the serie and a time interval
	 * Do not forget to delete (*computedValues) !!
	 * Do not delete (*timeValues), the buffer is not copied !!
	 */
	bool getComputedValuesFromSerieAndInterval(double startDate, double stopDate, SeriesProperties &rSeriesProperties,
5239be86   Menouard AZIB   Updates from dev
229
			AMDA::Common::ParameterIndexComponent index, double** computedValues, double** timeValues, int& nbValues);
fbe3c2bb   Benjamin Renard   First commit
230
231
232
233
234
235
236

	/*
	 * @brief Get computed values (in relation with the color axis definition) for a color serie and a time interval
	 * Do not forget to delete computedValues !!
	 * Don't delete timeValues !!
	 */
	bool getColoredComputedValuesFromSerieAndInterval(double startDate, double stopDate, SeriesProperties &rSeriesProperties,
5239be86   Menouard AZIB   Updates from dev
237
			double** computedValues, double** timeValues, int& nbValues);
fbe3c2bb   Benjamin Renard   First commit
238
239
240
241
242
243

	/*
	 * @brief Get computed values (in relation with the y axis definition) for a y serie and a time interval
	 * Do not forget to delete computedValues !!
	 * Don't delete timeValues !!
	 */
5239be86   Menouard AZIB   Updates from dev
244
245
246
247
	bool getErrorComputedValuesFromSerieAndInterval(double startDate, double stopDate, SeriesProperties &rSeriesProperties, 
			AMDA::Common::ParameterIndexComponent &pParamIndex,
			double** minComputedValues, double** minTimeValues, int& nbMinValues,
			double** maxComputedValues, double** maxTimeValues, int& nbMaxValues);
fbe3c2bb   Benjamin Renard   First commit
248
249
250
251

	/**
	 *@brief Defines the layout constraint to be used for the panel when used within a layout
	 */
5239be86   Menouard AZIB   Updates from dev
252
	virtual PanelConstraint getLayoutConstraint (void) {
fbe3c2bb   Benjamin Renard   First commit
253
254
255
256
		return PanelConstraint::MaxWidth;
	}

	/**
8bb0f02b   Benjamin Renard   Set colors in axi...
257
258
	 * @brief Get nb series to draw by y axis
	 */
5239be86   Menouard AZIB   Updates from dev
259
	std::map<std::string,int>& getNbSeriesByYAxis(); 
8bb0f02b   Benjamin Renard   Set colors in axi...
260

5239be86   Menouard AZIB   Updates from dev
261
262
        /*
 	 * @brief Return the color to draw the line of a serie
8bb0f02b   Benjamin Renard   Set colors in axi...
263
	 */
5239be86   Menouard AZIB   Updates from dev
264
        Color getSerieLineColor(SeriesProperties &rSeriesProperties, bool moreThanOneSerieForAxis);
8bb0f02b   Benjamin Renard   Set colors in axi...
265
266

	/**
fbe3c2bb   Benjamin Renard   First commit
267
268
269
270
271
272
273
274
275
	 * @brief Plot container
	 */
	boost::shared_ptr<Panel> _panel;

	/**
	 * @brief Parameters and series info
	 */
	ParameterAxesList _parameterAxesList;

5239be86   Menouard AZIB   Updates from dev
276
277
278
        
                    // datastore for sauvaud plot
                   	struct SauvaudPart
793c4351   Hacene SI HADJ MOHAND   creation de class...
279
	{
5239be86   Menouard AZIB   Updates from dev
280
281
282
283
284
		double x[2];
		double y[2];
		std::vector<double> value;
		double isColorIndex;
	};
fbe3c2bb   Benjamin Renard   First commit
285

5239be86   Menouard AZIB   Updates from dev
286
                    typedef std::vector<SauvaudPart> SauvaudGrid;
fbe3c2bb   Benjamin Renard   First commit
287

05089f4a   Erdogan Furkan   #11376 - Done.
288
	void drawHistogramBoxes(std::vector<std::pair<double,double>> data, Color &color, double binWidth, double yMin , bool toFill);
81caa397   Furkan   Minor fix
289
	void drawHistoBox( PLFLT x0, PLFLT y0, double binWidth, Color &color, double yBefore, double yAfter, bool hasStairs );
5239be86   Menouard AZIB   Updates from dev
290
291
292
293
294
295
296
297
	/*
	 * @brief Draw a matrix
	 */
	void drawMatrix(MatrixGrid& matrixGrid, double minDataVal, double maxDataVal,
			Color minValColor, Color maxValColor, int colorMapIndex, bool useLog0AsMin = false);
        
        	void draw2DMatrix(SauvaudGrid& sauvaudGrid, double minDataVal, double maxDataVal,
			Color minValColor, Color maxValColor, int colorMapIndex, bool useLog0AsMin = false);
fbe3c2bb   Benjamin Renard   First commit
298

5239be86   Menouard AZIB   Updates from dev
299
300
301
302
303
304
	/**
	 * @brief Reset cursor used to attribute automatically a color to a serie
	 */
	void resetAutomaticSerieColorCursor() {
		_automaticSerieColorCursor = 0;
	}
337411e4   Erdogan Furkan   #5390 - Kernel pa...
305

5239be86   Menouard AZIB   Updates from dev
306
307
308
309
	/**
 	 * Draw a rectangle
	 */
	void drawRectangle(double xmin, double xmax, double ymin, double ymax, Color& pColor, double alpha = 1.);
337411e4   Erdogan Furkan   #5390 - Kernel pa...
310

5239be86   Menouard AZIB   Updates from dev
311
312
313
	bool isStandalone() {
		return _isStandalone;
	}
fbe3c2bb   Benjamin Renard   First commit
314

5239be86   Menouard AZIB   Updates from dev
315
	AMDA::Parameters::ParameterManager& _parameterManager;
fbe3c2bb   Benjamin Renard   First commit
316

5239be86   Menouard AZIB   Updates from dev
317
	std::map<std::string, ParameterData> *_pParameterValues;
fbe3c2bb   Benjamin Renard   First commit
318

1d1a3b8a   Erdogan Furkan   Done for tickPlot...
319
320
321
322
323
324
325
326
	bool isHeightFixed(){
		return _isHeightFixed;
	}
	
	void setHeightFixed(bool isHeightFixed){
		_isHeightFixed = isHeightFixed;
	}

7f07dc4b   Menouard AZIB   Now we can downlo...
327
328
329
330
	void setWriteData(bool value){
		writeData_ = value;
	}

5239be86   Menouard AZIB   Updates from dev
331
protected:
db5907ad   Menouard AZIB   Plot Preview Down...
332
333
334
335
	/**
	 * @brief Flag to indicates whetever to write or not data for downloading
	 *
	 */
7f07dc4b   Menouard AZIB   Now we can downlo...
336
	bool writeData_;
b77e7fc1   Menouard AZIB   add a virtual wri...
337
	/**
db5907ad   Menouard AZIB   Plot Preview Down...
338
339
340
341
342
	 * @brief the filedata associated with the plot preview downloading process
	 *
	 */
	std::ofstream fileData;
	/**
1759ade3   Menouard AZIB   writing data into...
343
	 * @brief Write data into file for a plot preview
7f07dc4b   Menouard AZIB   Now we can downlo...
344
	 *
b77e7fc1   Menouard AZIB   add a virtual wri...
345
	 */
d81cc31e   Menouard AZIB   Add INTERVAL INFO...
346
	virtual void writeDataFile(double startTime, double stopTime);
db5907ad   Menouard AZIB   Plot Preview Down...
347
348
349
350
351
352
353
354
355
356
357
358
	/**
	 * @brief Add axis labels to data file for download
	 *
	 * @param lXAxis x axis
	 * @param lYAxis y axis
	 */
	int addAxisLabelToDataFile(boost::shared_ptr<Axis> lXAxis, boost::shared_ptr<Axis> lYAxis);
	/**
	 * @brief Close the datafile
	 *
	 */
	void closeDataFile();
b77e7fc1   Menouard AZIB   add a virtual wri...
359
	AMDA::Parameters::TimeIntervalList *_timeIntervalListPtr;
5239be86   Menouard AZIB   Updates from dev
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420

	/**
	 * @brief Compute plot area.
	 * @note If ratio need to be kept, ratio will be kept between width and height.
	 * @param bounds_ plot area bounds. It is updated by this method.
	 */
	virtual void calculatePlotArea(const Bounds& panelBounds_, Bounds& bounds_);

	/**
	 *@brief computes Panel Plot XY ratio
	 */
	void computePanelPlotXYRatio(void);

	/**
	 * @brief Get colored value associated to a data value. Return false if the value is filtered.
     */
	bool getColoredValue(double value, double filterMin, double filterMax, bool useLog0AsMin, PLFLT &col);

	/**
	 *@brief Draw fill area between parameter and constant or between parameters
	 */
	virtual void drawFills(double startDate, double stopDate);

	/**
	 * Draw list of symbols
	 */
	void drawSymbols(SymbolType pType, int pSize, double pFactor, Color pColor,
			int pNbData, double* pXData, double* pYData,
			double* pZData = NULL, double filterZMin = -DBL_MAX, double filterZMax = DBL_MAX);

	/**
	 * Draw list of lines
	 */
	void drawLines(LineType pType, LineStyle pStyle, int pWidth, Color& pColor,
			int pNbData, double* pXData, double* pYData,
			double* pZData = NULL, double filterZMin = -DBL_MAX, double filterZMax = DBL_MAX);

	/**
	 * Draw errors segments
	 */
	void drawYErrors (LineType pType, LineStyle pStyle, int pWidth, Color& pColor,
			int pNbData, double* pXData, double* pYMinData, double* pYMaxData);

	/**
	 *@brief Draw the serie of a parameter component on plot.
	 */
	virtual void drawSeries(double startDate, double stopDate, int intervalIndex, std::string pParamId, SeriesProperties& pSeries,
			AMDA::Common::ParameterIndexComponent pParamIndex, ParameterAxes& param, bool moreThanOneSerieForAxis);

	/**
	 *@brief Draw the spectro of a parameter on plot.
	 */
	virtual void drawSpectro(double startDate, double stopDate, std::string pParamId,
			SpectroProperties& pSpectro);
        
                       /**
	 *@brief Draw sauvaud plot of a parameter on plot.
	 */
        	virtual void drawSauvaud(double startDate, double stopDate, std::string pParamId,
			SauvaudProperties& pSauvaud, int subIndex, int subsNumber, std::string opositeLegend);

9e457aa4   Erdogan Furkan   For now
421
	virtual void drawHistogram(double startTime, double stopTime, std::string pParamId, 
808ae6b0   Erdogan Furkan   #11405 - fixed
422
								HistogramSeriesProperties& HistogramSeriesProperties);
5953671a   Erdogan Furkan   For now
423

5239be86   Menouard AZIB   Updates from dev
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
	virtual void drawIntervals(double startDate, double stopDate, std::string pParamId,
			IntervalsProperties& pIntervals);

	/*
	 * @brief Draw interval
	 */
	virtual void drawSerieInterval(SeriesProperties& pSeries,
			double* xValues, double* yValues, double* timeValues,
			int nbValues, int intervalIndex);

	/**
	 * Draw an horizontal axis.
	 * Subclasses may override it to take into account decorator attached to that axis (for instance).
	 * @param pXAxis axis to draw.
	 * @param pPlWindow real word ranges.
	 * @param pPlotAreaSize plot ranges.
	 * @param pTickConf ticks configuration.
	 */
	virtual void drawXAxis(boost::shared_ptr<Axis> pXAxis, PlWindow& pPlWindow, Bounds& pPlotAreaSize, TickConf& pTickConf);
	/**
	 * Draw a vertical axis.
	 * Subclasses may override it to take into account decorator attached to that axis (for instance).
	 * @param pXAxis axis to draw.
	 * @param pPlWindow real word ranges.
	 * @param pPlotAreaSize plot ranges.
	 * @param pTickConf ticks configuration.
	 */
	virtual void drawYAxis(boost::shared_ptr<Axis> pXAxis, PlWindow& pPlWindow, Bounds& pPlotAreaSize, TickConf& pTickConf);
	/**
	 * @brief Draw legend for each axis.
	 * @param pAxis axis to draw.
	 * @param pPlWindow real word ranges.
	 * @param pPlotAreaSize plot ranges.
	 */
	virtual void drawLegends(boost::shared_ptr<Axis>& pAxis, PlWindow& pPlWindow, Bounds& pPlotAreaSize);

	/**
f4f4fdcc   Erdogan Furkan   Done
461
462
463
464
465
466
467
468
	 * @brief Add space if there is an exponent or indice
	 * 
	 * @param legend legend to check
	 * @param lPosition position to modify
	 */
	void addSpaceForExInd(std::string &legend, double &lPosition);

	/**
5239be86   Menouard AZIB   Updates from dev
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
	 * @brief Draw parameters legend.
	 */
	virtual void drawParamsLegend(void);

	/**
	 * @brief Draw text legends.
	 */
	virtual void drawTextLegends(void);

	/**
	 * Convert an X axis string value to a double X value
	 * Subclasses may override it to take into account specific value meaning.
	 * @param value string value to convert.
	 */
	virtual double convertXAxisValue(const std::string &value);

	/**
	 * Convert an Y axis string value to a double Y value
	 * Subclasses may override it to take into account specific value meaning.
	 * @param value string value to convert.
	 */
	virtual double convertYAxisValue(const std::string &value);

	/**
	 * Draw X constant lines linked to an axis.
	 * Subclasses may override it to take into account decorator attached (for instance).
	 * @param pXAxis axis to draw.
	 * @param pPlWindow real word ranges.
	 */
	virtual void drawXConstantLines(boost::shared_ptr<Axis> pAxis, PlWindow& pPlWindow);
	/**
	 * Draw X constant lines linked to an axis.
	 * Subclasses may override it to take into account decorator attached (for instance).
	 * @param pXAxis axis to draw.
	 * @param pPlWindow real word ranges.
	 */
	virtual void drawYConstantLines(boost::shared_ptr<Axis> pAxis, PlWindow& pPlWindow);
	/**
	 * Draw textPlots for a panel.
	 * Subclasses may override it for specific drawings.
	 * @param pPlWindow real word ranges.
	 */
	virtual void drawTextPlots(boost::shared_ptr<Axis> pXAxis, boost::shared_ptr<Axis> pYAxis, PlWindow& pPlWindow, const TextPlots &textPlots);


	/**
	 * Draw curvePlot for a panel.
	 * Subclasses may override it for specific drawings.
	 * @param curvePlot curve properties.
	 */
	virtual void drawCurvePlot(CurvePlot &curvePlot);

	/**
	 * @brief Identify if other side of the plot area need to be drawn or not.
	 * @note A plot area side need to be drawn when there is no axis associated to it.
	 */
	virtual std::string drawOppositeSide(boost::shared_ptr<Axis> pAxis);

	/**
	 *@brief Draw additional objects on plot.
	 */
	virtual void drawAdditionalObjects ();

	/**
	 * Draw a z axis
	 */
	virtual void drawZAxis(boost::shared_ptr<Axis> pZAxis, PlWindow& pPlWindow, Bounds& pPlotAreaSize, TickConf& pTickConf);


	/**
	 * Get X Axis range for a serie
	 */
	Range getXAxisRange (SeriesProperties& pSeries, boost::shared_ptr<Axis> pAxis);

	/**
	 * Get Y Axis range for a serie
	 */
	Range getYAxisRange (SeriesProperties& pSeries, boost::shared_ptr<Axis> pAxis);

	/**
	 * Get Z Axis range for a serie
	 */
	Range getZAxisRange (SeriesProperties& pSeries, boost::shared_ptr<Axis> pAxis);

	/*
	 * @brief Return the color to draw the symbols of a serie
	 */
	Color getSerieSymbolColor(SeriesProperties &rSeriesProperties, Color &pLineColor);
fbe3c2bb   Benjamin Renard   First commit
557
558

	/**
5239be86   Menouard AZIB   Updates from dev
559
	 * @brief Configure params legend for a plot.
8bb0f02b   Benjamin Renard   Set colors in axi...
560
	 */
5239be86   Menouard AZIB   Updates from dev
561
	virtual void configureParamsLegend(double startTime, double stopTime, int intervalIndex);
8bb0f02b   Benjamin Renard   Set colors in axi...
562
563

	/**
5239be86   Menouard AZIB   Updates from dev
564
	 * @brief Add a serie to the param legend
fbe3c2bb   Benjamin Renard   First commit
565
	 */
5239be86   Menouard AZIB   Updates from dev
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
	void addSerieToParamsLegend(SeriesProperties& lSeriesProperties,
			AMDA::Common::ParameterIndexComponent& index, std::string originalParamId,
			Color& lineColor, Color& symbolColor,
			double startTime, double stopTime, int intervalIndex);

	/*
	 * @brief Return the associated params legend to a serie
	 */
	virtual std::string getSerieParamsLegendString(SeriesProperties &rSeriesProperties,
			AMDA::Common::ParameterIndexComponent& index, std::string originalParamId);

	/**
	 * @brief plplot stream
	 */
	std::shared_ptr<plstream> _pls;

	/*
	 * Dumps properties for test.
	 */
	virtual void dump(std::ostream& out_);

	/**
	 * @brief Fill the background of the plot area
	 *
	 * @param pls
	 */

	void fillBackground(std::shared_ptr<plstream> &pls);
f43341e7   Menouard AZIB   Improve the conte...
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
	/**
	 * @brief Scale Enum to string
	 * 
	 * @param scale given axis scale
	 * @return std::string 
	 */
	std::string scaleStr(Axis::Scale scale)
	{
		switch (scale)
		{
		case Axis::Scale::LOGARITHMIC:
			return "logarithmic";
		case Axis::Scale::LINEAR:
			return "linear";

		default:
			return "None";
		}
	}
5239be86   Menouard AZIB   Updates from dev
613
614
615
616
617
618
619
620

private:

	void drawAxis(boost::shared_ptr<Axis> pAxis, TickConf& pTickConf, std::string pXAxisOptions,
			std::string pYAxisOptions);

	double estimateZAxisWidth(boost::shared_ptr<Axis> pZAxis);

b5acc176   Erdogan Furkan   #11391 Done
621
622
	boost::shared_ptr<std::vector<std::string>> _ttNames;

5239be86   Menouard AZIB   Updates from dev
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
	/**
	 * @brief _plotAreaSideSet Store which side of plot area is linked to an axis.
	 */
	std::map<PlotCommon::Position, bool> _plotAreaSideSet;

	/**
	 * @brief nb series to draw by y axis
	 */
	std::map<std::string,int> _nbSeriesByYAxisMap;

	/**
	 * @brief plot array on which to draw data.
	 */
	Bounds _plotAreaBounds;

	/*
	 * @brief Panel XY ratio used for angular conversion
	 */
	double _panelPlotXYRatio;

	/*
	 * @brief Panel left axis tickmark width
	 */
	double _leftAxisTickMarkWidth;

	/*
	 * @brief cursor use to set a default color to a serie
	 */
	int _automaticSerieColorCursor;

	/*
	 * 
	 */
	bool _isStandalone;

1d1a3b8a   Erdogan Furkan   Done for tickPlot...
658
659
	bool _isHeightFixed;

5239be86   Menouard AZIB   Updates from dev
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
	void reserveSpaceForAxis (boost::shared_ptr<Axis>& pAxis, double titleHeight, std::map<PlotCommon::Position, int> nbAxesBySide,
			double& topSpace, double& bottomSpace, double& leftSpace, double& rightSpace);

	void reserveSpaceForTextLegend (boost::shared_ptr<TextLegendProperties>& pTextLegendProp, double titleHeight, double& topSpace, double& bottomSpace, double& leftSpace, double& rightSpace);
};

/**
 * Calculate room taken by tick.
 */
double getHorizontalTickLength(Axis* pAxis, double charHeight);

/**
 * Calculate room taken by tick.
 */
double getVerticalTickLength(Axis* pAxis, double charHeight);
fbe3c2bb   Benjamin Renard   First commit
675
676
677

} /* namespace plot */
#endif /* PANELPLOTOUTPUT_HH_ */