14#ifndef MATHPLOT_H_INCLUDED
15#define MATHPLOT_H_INCLUDED
83#ifdef mathplot_EXPORTS
85 #define WXDLLIMPEXP_MATHPLOT WXEXPORT
87 #define WXDLLIMPEXP_DATA_MATHPLOT(type) WXEXPORT type
90 #define WXDLLIMPEXP_MATHPLOT
92 #define WXDLLIMPEXP_DATA_MATHPLOT(type) type
95#if defined(__GNUG__) && !defined(__APPLE__) && !defined(__INTEL_CLANG_COMPILER)
96 #pragma interface "mathplot.h"
102#include <unordered_map>
113#include <wx/scrolwin.h>
115#include <wx/dynarray.h>
117#include <wx/dcmemory.h>
118#include <wx/string.h>
127#if defined(MP_USER_INCLUDE)
131 #define str(x) xstr(x)
132 #define header MP_USER_INCLUDE.h
137#if defined(MP_ENABLE_CONFIG) || defined(ENABLE_MP_CONFIG)
138 #include "MathPlotConfig.h"
145#if defined(MP_ENABLE_NAMESPACE) || defined(ENABLE_MP_NAMESPACE)
149#ifdef MP_ENABLE_DEBUG
154 #define DEBUG_NEW new(_NORMAL_BLOCK ,__FILE__, __LINE__)
156 #define DEBUG_NEW new
162#define MP_X_BORDER_SEPARATION 40
164#define MP_Y_BORDER_SEPARATION 60
167#define MP_X_LOCALTIME 0x10
169#define MP_X_UTCTIME 0x20
171#define MP_X_RAWTIME MP_X_UTCTIME
174#define MP_EPSILON 1e-30
176#define MP_ISNOTNULL(x) (std::fpclassify(x) != FP_ZERO)
179#define MP_EXTRA_MARGIN 8
182#define MP_ZOOM_AROUND_CENTER -1
189#define DECLARE_DYNAMIC_CLASS_MATHPLOT(mp_class) wxDECLARE_DYNAMIC_CLASS(mp_class)
221#if defined(MP_ENABLE_CONFIG) || defined(ENABLE_MP_CONFIG)
258 return wxRect(startPx, startPy, endPx - startPx, endPy - startPy);
261static_assert(
sizeof(
mpRect) == 4 *
sizeof(wxCoord));
344 return ((min != 0) || (max != 0));
355 else if (value > max)
401 return (min + max) / 2;
407 return std::max(fabs(min), fabs(max));
413 min = (min > 0) ? log10(min) : 0;
414 max = (max > 0) ? log10(max) : 0;
420 return ((point >= min) && (point <= max));
423 #if (defined(__cplusplus) && (__cplusplus > 201703L))
424 bool operator==(
const mpRange&)
const =
default;
429 return (min == other.
min) && (max == other.
max);
434 return !(*
this == other);
444struct [[deprecated(
"Deprecated! No longer used as X and Y are now separated")]]
mpFloatRect
447 std::vector<mpRange<double>>
y;
466 bool PointIsInside(
const double px,
const double py,
const size_t yAxisID = 0)
const {
467 if (yAxisID < y.size())
469 if( (px < x.min || px > x.
max) ||
470 (py < y[yAxisID].min || py > y[yAxisID].max))
490 assert(yAxisID < y.size());
491 if (yAxisID < y.size())
493 if (px < x.
min ) x.
min = px;
494 else if (px > x.
max ) x.
max = px;
495 if (py < y[yAxisID].min ) y[yAxisID].min = py;
496 else if (py > y[yAxisID].max ) y[yAxisID].max = py;
507 assert(yAxisID < y.size());
508 if (yAxisID < y.size())
511 y[yAxisID].min = y[yAxisID].max = py;
517#if (defined(__cplusplus) && (__cplusplus > 201703L))
518 bool operator==(
const mpFloatRect&)
const =
default;
524 auto Same = [](
const double a,
const double b) {
535 if (y.size() != rect.
y.size())
541 for (
size_t i = 0; i < y.size(); ++i)
543 if (!Same(y[i].min, rect.
y[i].min) ||
544 !Same(y[i].max, rect.
y[i].max) )
624#if defined(MP_ENABLE_CONFIG) || defined(ENABLE_MP_CONFIG)
899 *subtype = m_subtype;
900 return (m_type == typeOfInterest);
1015 m_fontcolour = colour;
1023 return m_fontcolour;
1046 if (brush == wxNullBrush)
1047 m_brush = *wxTRANSPARENT_BRUSH;
1055 void SetBrush(
const wxColour &colour,
enum wxBrushStyle style = wxBRUSHSTYLE_SOLID)
1057 m_brush.SetColour(colour);
1058 m_brush.SetStyle(style);
1086 m_drawOutsideMargins = drawModeOutside;
1093 return m_drawOutsideMargins;
1127 m_tractable = track;
1148 m_CanDelete = canDelete;
1260 [[deprecated(
"Use Show() instead")]]
1280 return m_dim.GetPosition();
1287 m_relX = pos.x / 100.0;
1288 m_relY = pos.y / 100.0;
1295 return m_dim.GetSize();
1309 m_location = location;
1382 [[deprecated(
"Use Show() instead")]]
1405 return IsVisible() && (GetDrawOutsideMargins() || plotArea.Contains(mousePos));
1414 m_timeConv = time_conv;
1419 [[deprecated(
"Deprecated, use SetInfoCoordType instead")]]
1422 m_infoCoordType = show ? infoCoord_closestSeries : infoCoord_axis;
1430 m_infoCoordType = type;
1438 return m_infoCoordType;
1499 m_needs_update =
true;
1512 m_item_direction = mode;
1513 m_needs_update =
true;
1519 return m_item_direction;
1525 m_needs_update =
true;
1532 m_showDraggedSeries = active;
1539 return m_showDraggedSeries;
1546 m_enableSeriesValues = enable;
1547 m_maxSeriesValueWidth = 0;
1554 return m_enableSeriesValues;
1562 return m_enableSeriesValues && plotArea.Contains(mousePos);
1569 m_showSeriesValues = show;
1576 return m_showSeriesValues && IsVisible();
1583 m_indicateSeriesIntersection = enable;
1605 return m_verticalCursorMode;
1651 wxString m_headerString = wxString::FromUTF8(
"≡");
1663 unsigned int layerIdx;
1667 std::vector<LegendDetail> m_LegendDetailList;
1668 wxCoord m_headerEnd;
1669 bool m_needs_update;
1670 int m_maxSeriesValueWidth;
1671 bool m_enableSeriesValues;
1672 bool m_showSeriesValues;
1673 bool m_indicateSeriesIntersection;
1674 VerticalCursorMode m_verticalCursorMode;
1675 double m_verticalCursorPosX;
1687 void UpdateBitmap(wxDC &dc,
mpWindow &w);
1697 int GetMaxLabelWidth(wxDC &dc,
mpWindow &w)
const;
1719 int DrawSeriesValue(wxDC& dc,
mpWindow& w,
mpFunction& function,
int posX,
int posY,
int labelHeight,
int labelWidth,
int maxLabelWidth);
1725 void DrawVerticalCursor(wxDC &dc,
mpWindow &w);
1757 m_continuous = continuity;
1765 return m_continuous;
1800 m_symbolSize = size;
1807 return m_symbolSize;
1834 m_yAxisID = yAxisID;
1842 m_LegendIsAlwaysVisible = alwaysVisible;
1850 return m_LegendIsAlwaysVisible;
1858 m_autoStep = enable;
1873 m_maxNOfPoints = nOfPoints;
1880 return m_maxNOfPoints;
1908 mpLine(
double value,
const wxPen &pen = *wxGREEN_PEN);
1937 return m_IsHorizontal;
2089 mpFY(
const wxString &name = wxEmptyString,
int flags =
mpALIGN_TOP,
unsigned int yAxisID = 0);
2155 mpFXY(
const wxString &name = wxEmptyString,
int flags =
mpALIGN_SW,
bool viewAsBar =
false,
unsigned int yAxisID = 0);
2230 bool m_ViewAsBar =
false;
2281 mpFXYVector(
const wxString &name = wxEmptyString,
int flags =
mpALIGN_SW,
bool viewAsBar =
false,
unsigned int yAxisID = 0);
2294 void SetData(
const std::vector<double> &xs,
const std::vector<double> &ys);
2329 bool AddData(
double x,
double y,
bool updatePlot);
2339 m_reserveXY = reserve;
2340 m_xs.reserve(m_reserveXY);
2341 m_ys.reserve(m_reserveXY);
2391 return m_rangeX.
min - (m_deltaX / 2);
2395 return m_rangeX.
min;
2403 return m_rangeY.
min;
2413 return m_rangeX.
max + (m_deltaX / 2);
2417 return m_rangeX.
max;
2425 return m_rangeY.
max;
2431 void First_Point(
double x,
double y);
2435 static void Check_Limit(
double val,
mpRange<double> *range,
double *last,
double *delta);
2487 mpFX(name, flags, yAxisID)
2489 const wxPen FXpen(*wxBLUE, 1, wxPENSTYLE_SOLID);
2490 SetDrawOutsideMargins(
false);
2491 SetContinuity(
true);
2500 double GetY(
const double x)
override
2521 return m_rangeY.min;
2530 return m_rangeY.max;
2564 m_variance = sigma * sigma;
2565 m_const = 1.0 / sqrt(2.0 * M_PI * m_variance);
2576 return m_const * exp(-(x - m_mu) * (x - m_mu) / (2.0 * m_variance));
2600 m_variance = sigma * sigma;
2601 m_const = 1.0 / (m_variance * sqrt(2.0 * M_PI));
2616 const double tmp = log(x) - m_mu;
2617 return m_const * exp(-tmp * tmp / (2.0 * m_variance)) / x;
2654 void AddData(
const double &data,
const std::string &label);
2663 return (values.size() > 0);
2682#define mpBAR_AXIS_H 1
2683#define mpBAR_AXIS_V 2
2684#define mpBAR_INSIDE 3
2693 mpBarChart(
const wxString &name = wxEmptyString,
double width = 0.5);
2759 mpPieChart(
const wxString &name = wxEmptyString,
double radius = 20);
2794 return m_center.x - m_radius;
2802 return m_center.x + m_radius;
2810 return m_center.y - m_radius;
2818 return m_center.y + m_radius;
2863 double maxAxisValue = 0.0;
2864 bool UseScientific =
false;
2865 int SignificantDigits = 0;
2866 int DecimalDigits = 0;
2867 double EpsilonScale = 0.0;
2938 m_labelFormat = format;
2939 if (updateLabelMode)
2956 m_timeConv = time_conv;
2963 return m_labelFormat;
2985 void SetAuto(
const bool automaticScalingIsEnabled)
2987 m_auto = automaticScalingIsEnabled;
3003 m_axisRange.SetMin(min);
3011 return m_axisRange.min;
3019 m_axisRange.SetMax(max);
3027 return m_axisRange.max;
3036 m_axisRange.Set(min, max);
3045 *min = m_axisRange.min;
3046 *max = m_axisRange.max;
3054 m_axisRange = range;
3094 m_CoordIsAlwaysVisible = alwaysVisible;
3102 return m_CoordIsAlwaysVisible;
3122 static constexpr wxCoord kTickSize = 4;
3123 static constexpr wxCoord kYAxisExtraSpace = 6;
3124 static constexpr wxCoord kYAxisTitleSpace = 2;
3125 static constexpr wxCoord kYAxisLabelSpace = 2;
3126 static constexpr wxCoord kXAxisTitleSpace = 3;
3138 bool m_hover =
false;
3151 static double GetStep(
double scale,
int minLabelSpacing);
3214 mpScale(name, flags, grids, type)
3271 mpScale(name, flags, grids, labelType, yAxisID)
3276 m_autoHideAxis =
false;
3294 m_autoHideAxis = autoHide;
3300 return m_autoHideAxis;
3318 if ( (IsLeftAxis() || IsRightAxis()) && (xPixel >= m_xPos) && (xPixel <= (m_xPos + m_axisWidth)) )
3350#define mpMOUSEMODE_DRAG 0
3352#define mpMOUSEMODE_ZOOMBOX 1
3381 return (scale == other.
scale) && (pos == other.
pos) &&
3410typedef std::function<void(
void *Sender,
const wxString &classname,
bool &cancel)>
mpOnDeleteLayer;
3440 m_domain = plotArea;
3461 return m_enable && m_domain.Contains(mousePos);
3518 mpWindow(wxWindow *parent, wxWindowID
id = wxID_ANY,
const wxPoint &pos = wxDefaultPosition,
const wxSize &size = wxDefaultSize,
3683 m_AxisDataX.scale = scaleX;
3684 UpdateDesiredBoundingBox(uXAxis);
3695 return m_AxisDataX.scale;
3704 assert(m_AxisDataYList.count(yAxisID) != 0);
3707 m_AxisDataYList[yAxisID].scale = scaleY;
3708 UpdateDesiredBoundingBox(uYAxis);
3720 assert(m_AxisDataYList.count(yAxisID) != 0);
3721 return m_AxisDataYList[yAxisID].scale;
3724 [[deprecated(
"Incomplete, use UpdateBBox instead")]]
3732 return m_AxisDataX.bound;
3738 return m_AxisDataX.desired;
3746 assert(m_AxisDataYList.count(yAxisID) != 0);
3747 return m_AxisDataYList[yAxisID].bound;
3755 assert(m_AxisDataYList.count(yAxisID) != 0);
3756 return m_AxisDataYList[yAxisID].desired;
3764 return mpRange<double>(m_AxisDataX.pos + (m_margin.left / m_AxisDataX.scale), m_AxisDataX.pos + ((m_margin.left + m_plotWidth) / m_AxisDataX.scale));
3773 assert(m_AxisDataYList.count(yAxisID) != 0);
3774 mpAxisData& yData = m_AxisDataYList[yAxisID];
3784 std::unordered_map<int, mpRange<double>> yRange;
3785 for (
const auto& [m_yID, m_yData] : m_AxisDataYList)
3787 yRange[m_yID] = m_yData.bound;
3798 std::unordered_map<int, mpRange<double>> yRange;
3799 for (
const auto& [m_yID, m_yData] : m_AxisDataYList)
3801 yRange[m_yID] = m_yData.desired;
3811 m_AxisDataX.pos = posX;
3812 UpdateDesiredBoundingBox(uXAxis);
3822 return m_AxisDataX.pos;
3829 void SetPosY(std::unordered_map<int, double>& posYList)
3831 for (
auto& [m_yID, m_yData] : m_AxisDataYList)
3833 m_yData.pos = posYList[m_yID];
3835 UpdateDesiredBoundingBox(uYAxis);
3846 assert(m_AxisDataYList.count(yAxisID) != 0);
3847 return m_AxisDataYList[yAxisID].pos;
3855 return (
int)m_AxisDataYList.size();
3863 return m_AxisDataYList;
3875 m_plotWidth = m_scrX - (m_margin.left + m_margin.right);
3876 m_plotHeight = m_scrY - (m_margin.top + m_margin.bottom);
3878 m_plotBoundaries.endPx = m_scrX;
3879 m_plotBoundariesMargin.endPx = m_scrX - m_margin.right;
3880 m_plotBoundaries.endPy = m_scrY;
3881 m_plotBoundariesMargin.endPy = m_scrY - m_margin.bottom;
3883 m_PlotArea = wxRect(m_margin.left - m_extraMargin, m_margin.top - m_extraMargin,
3884 m_plotWidth + 2*m_extraMargin, m_plotHeight + 2*m_extraMargin);
3886 m_magnet.UpdateBox(m_PlotArea);
3916 void SetPos(
const double posX, std::unordered_map<int, double>& posYList)
3918 m_AxisDataX.pos = posX;
3925 double p2x(
const wxCoord pixelCoordX)
const
3927 return m_AxisDataX.pos + (pixelCoordX / m_AxisDataX.scale);
3933 double p2y(
const wxCoord pixelCoordY,
const int yAxisID = 0)
3935 assert(m_AxisDataYList.count(yAxisID) != 0);
3936 if (m_AxisDataYList.count(yAxisID) == 0)
3938 return m_AxisDataYList[yAxisID].pos - (pixelCoordY / m_AxisDataYList[yAxisID].scale);
3944 wxCoord
x2p(
const double x)
const
3946 return (wxCoord)((x - m_AxisDataX.pos) * m_AxisDataX.scale);
3952 wxCoord
y2p(
const double y,
const int yAxisID = 0)
3954 assert(m_AxisDataYList.count(yAxisID) != 0);
3955 if (m_AxisDataYList.count(yAxisID) == 0)
3957 return (wxCoord)((m_AxisDataYList[yAxisID].pos - y) * m_AxisDataYList[yAxisID].scale);
3961 [[deprecated(
"Deprecated - use EnableBufferedPaintDC??")]]
3964 EnableBufferedPaintDC(enabled);
3972 m_enableBufferedPaintDC = enabled;
3979 m_enableMouseNavigation = enabled;
3995 return m_lockaspect;
4027 void ZoomIn(
const wxPoint ¢erPoint = wxDefaultPosition);
4033 void ZoomOut(
const wxPoint ¢erPoint = wxDefaultPosition);
4069 return (
unsigned int)m_layers.size();
4091 if (update & uXAxis)
4093 m_AxisDataX.desired = GetVisibleRangeX();
4097 if (update & uYAxis)
4099 for (
auto& [yID, yData] : m_AxisDataYList)
4101 yData.desired = GetVisibleRangeY(yID);
4113 assert(m_AxisDataYList.count(yAxisID) != 0);
4115 return mpFloatRectSimple(m_AxisDataX.desired, m_AxisDataYList[yAxisID].desired);
4127 if (m_AxisDataYList.count(yAxisID) == 0)
4130 return m_AxisDataX.bound.PointIsInside(px) && GetBoundY(yAxisID).PointIsInside(py);
4140 if (m_AxisDataYList.count(yAxisID) == 0)
4143 m_AxisDataX.bound.Update(px);
4144 m_AxisDataYList[yAxisID].bound.Update(py);
4155 if (m_AxisDataYList.count(yAxisID) == 0)
4158 m_AxisDataX.bound.Set(px, px);
4159 m_AxisDataYList[yAxisID].bound.Set(py, py);
4170 return m_enableScrollBars;
4178 bool SaveScreenshot(
const wxString &filename,
int type = wxBITMAP_TYPE_BMP, wxSize imageSize = wxDefaultSize,
bool fit =
false);
4195 m_wildcard = wildcard;
4213 bool LoadFile(
const wxString &filename = wxEmptyString);
4221 m_DefaultDir = dirname;
4240 m_DefaultLegendIsAlwaysVisible = visible;
4255 m_autoFit = autoFit;
4269 SetMargins(m_marginOuter.top, m_marginOuter.right, m_marginOuter.bottom, m_marginOuter.left);
4275 SetMargins(top, m_marginOuter.right, m_marginOuter.bottom, m_marginOuter.left);
4284 return m_margin.top - m_extraMargin;
4286 return m_margin.top;
4292 SetMargins(m_marginOuter.top, right, m_marginOuter.bottom, m_marginOuter.left);
4301 return m_margin.right - m_extraMargin;
4303 return m_margin.right;
4309 return m_marginOuter.right;
4315 SetMargins(m_marginOuter.top, m_marginOuter.right, bottom, m_marginOuter.left);
4324 return m_margin.bottom - m_extraMargin;
4326 return m_margin.bottom;
4332 SetMargins(m_marginOuter.top, m_marginOuter.right, m_marginOuter.bottom, left);
4341 return m_margin.left - m_extraMargin;
4343 return m_margin.left;
4349 m_extraMargin = extra;
4350 SetMargins(m_marginOuter.top, m_marginOuter.right, m_marginOuter.bottom, m_marginOuter.left);
4356 return m_extraMargin;
4362 return m_marginOuter.left;
4374 return m_plotHeight;
4385 bond = m_plotBoundariesMargin;
4387 bond = m_plotBoundaries;
4388 bond.startPx -= m_extraMargin;
4389 bond.endPx += m_extraMargin;
4390 bond.startPy -= m_extraMargin;
4391 bond.endPy += m_extraMargin;
4408 m_drawBox = drawbox;
4451 void SetColourTheme(
const wxColour &bgColour,
const wxColour &drawColour,
const wxColour &axesColour);
4469 m_bgColour = colour;
4479 m_OnDeleteLayer = event;
4485 m_OnDeleteLayer = NULL;
4494 m_OnUserMouseAction = userMouseEventHandler;
4500 m_OnUserMouseAction = NULL;
4510 if (m_AxisDataX.axis)
4511 return ((
mpScaleX *)m_AxisDataX.axis)->IsLogAxis();
4522 assert(m_AxisDataYList.count(yAxisID) != 0);
4523 mpScaleY* yAxis = GetLayerYAxis(yAxisID);
4536 if (m_AxisDataX.axis)
4537 ((
mpScaleX *)m_AxisDataX.axis)->SetLogAxis(log);
4547 mpScaleY* yAxis = GetLayerYAxis(yAxisID);
4558 return m_magnet.IsEnabled();
4564 m_magnet.Enable(mag);
4573 m_mouseLeftDownAction = action;
4582 return m_mouseLeftDownAction;
4600 return m_movingInfoLayer;
4603#if defined(MP_ENABLE_CONFIG) || defined(ENABLE_MP_CONFIG)
4653 m_buff_dc.SelectObject(m_buff_bmp);
4663 virtual void OnFit(wxCommandEvent &event);
4668#if defined(MP_ENABLE_CONFIG) || defined(ENABLE_MP_CONFIG)
4669 virtual void OnConfiguration(wxCommandEvent &event);
4726 void Zoom(
bool zoomIn,
const wxPoint ¢erPoint);
4801#if defined(MP_ENABLE_CONFIG) || defined(ENABLE_MP_CONFIG)
4804 bool m_openConfigWindowPending =
false;
4817 void CheckAndReportDesiredBoundsChanges();
4823 unsigned int GetNewAxisDataID(
void)
4826 for (
const auto& [m_yID, m_yData] : m_AxisDataYList)
4831 newID = std::max(newID, m_yID + 1);
4872 mpText(
const wxString &name,
int offsetx,
int offsety);
4890 m_location = location;
4944 SetPen(*wxWHITE_PEN);
4945 SetBrush(*wxWHITE_BRUSH);
4998 stretch_factor = factor;
5025 m_reference_x(0), m_reference_y(0), m_reference_phi(0), m_shape_xs(0), m_shape_ys(0)
5039 phi = m_reference_phi;
5048 m_reference_phi = phi;
5055 return m_trans_shape_xs.size() != 0;
5062 return m_bbox_x.min;
5069 return m_bbox_x.max;
5076 return m_bbox_y.min;
5083 return m_bbox_y.max;
5143 mpCovarianceEllipse(
const double cov_00 = 1,
const double cov_11 = 1,
const double cov_01 = 0,
const double quantiles = 2,
const int segments = 32,
5145 m_cov_00(cov_00), m_cov_11(cov_11), m_cov_01(cov_01), m_quantiles(quantiles), m_segments(segments)
5147 m_continuous =
true;
5175 m_segments = segments;
5237 m_continuous =
true;
5251 void setPoints(
const std::vector<double> &points_xs,
const std::vector<double> &points_ys,
bool closedShape =
true);
5272 m_bitmapChanged =
false;
5273 m_scaledBitmap_offset_x = m_scaledBitmap_offset_y = 0;
5292 void SetBitmap(
const wxImage &inBmp,
double x,
double y,
double lx,
double ly);
5298 return m_bitmapX.min;
5305 return m_bitmapX.max;
5312 return m_bitmapY.min;
5319 return m_bitmapY.max;
5374 auto GetRandomColor = []() {
5375 return (rand() * 255) / RAND_MAX;
5378 auto GetRandomColor = []() {
5379 return (random() * 255) / RAND_MAX;
5385 this->Set(0, 0, 255);
5388 this->Set(255, 0, 0);
5391 this->Set(0, 128, 0);
5394 this->Set(128, 0, 128);
5397 this->Set(255, 255, 0);
5400 this->Set(255, 0, 255);
5403 this->Set(0, 255, 0);
5406 this->Set(0, 255, 255);
5409 this->Set(128, 128, 0);
5412 this->Set((ChannelType) (GetRandomColor()), (ChannelType) (GetRandomColor()), (ChannelType) (GetRandomColor()));
5420#if defined(MP_ENABLE_NAMESPACE) || defined(ENABLE_MP_NAMESPACE)
Dialog box for configuring the plot's layer objects In this dialog, you can configure:
Definition MathPlotConfig.h:156
Layer for bar chart.
Definition mathplot.h:2690
~mpBarChart() override
Destructor.
Definition mathplot.h:2696
double GetMaxX() override
Get inclusive right border of bounding box.
double GetMaxY() override
Get inclusive top border of bounding box.
void SetBarColour(const wxColour &colour)
Set the colour used to fill the bars.
void DoPlot(wxDC &dc, mpWindow &w) override
Layer plot handler.
double m_width
Width of each bar/column in plot units.
Definition mathplot.h:2735
double GetMinY() override
Get inclusive bottom border of bounding box.
double GetMinX() override
Get inclusive left border of bounding box.
void SetBarLabelPosition(int position)
Set bar labels positioning.
wxColour m_barColour
Fill colour used for the bars.
Definition mathplot.h:2736
void SetColumnWidth(const double colWidth)
Set the bar width in plot units.
Definition mathplot.h:2705
int m_labelPos
Bar-label placement mode.
Definition mathplot.h:2737
double m_labelAngle
Rotation angle used for bar labels, in degrees.
Definition mathplot.h:2738
mpBarChart(const wxString &name=wxEmptyString, double width=0.5)
Debault constructor.
A layer that allows you to have a bitmap image printed in the mpWindow.
Definition mathplot.h:5265
void SetBitmap(const wxImage &inBmp, double x, double y, double lx, double ly)
Change the bitmap associated with the layer (to update the screen, refresh the mpWindow).
double GetMinY() override
Get inclusive bottom border of bounding box.
Definition mathplot.h:5310
bool m_validImg
True when the source image is valid and ready to draw.
Definition mathplot.h:5330
double GetMinX() override
Get inclusive left border of bounding box.
Definition mathplot.h:5296
void GetBitmapCopy(wxImage &outBmp) const
Returns a copy of the current bitmap assigned to the layer.
wxBitmap m_scaledBitmap
Cached scaled bitmap used for drawing.
Definition mathplot.h:5327
double GetMaxY() override
Get inclusive top border of bounding box.
Definition mathplot.h:5317
wxImage m_bitmap
The internal copy of the Bitmap:
Definition mathplot.h:5326
mpRange< double > m_bitmapX
The shape of the bitmap:
Definition mathplot.h:5335
double GetMaxX() override
Get inclusive right border of bounding box.
Definition mathplot.h:5303
mpBitmapLayer()
Default constructor.
Definition mathplot.h:5269
wxCoord m_scaledBitmap_offset_x
Cached X pixel offset used when drawing the scaled bitmap.
Definition mathplot.h:5328
bool m_bitmapChanged
True when the cached scaled bitmap must be regenerated.
Definition mathplot.h:5331
void DoPlot(wxDC &dc, mpWindow &w) override
Pure virtual method to plot the layer.
mpRange< double > m_bitmapY
Range of the bitmap on y direction.
Definition mathplot.h:5336
wxCoord m_scaledBitmap_offset_y
Cached Y pixel offset used when drawing the scaled bitmap.
Definition mathplot.h:5329
abstract Layer for chart (bar and pie).
Definition mathplot.h:2631
void AddData(const double &data, const std::string &label)
Add data and label.
mpChart(const wxString &name=wxEmptyString)
Default constructor.
void SetChartLabels(const std::vector< std::string > &labelArray)
Set bar label values.
double m_total_value
Total of the values vector.
Definition mathplot.h:2671
void SetChartValues(const std::vector< double > &data)
Set bar values.
std::vector< std::string > labels
Labels of the Values.
Definition mathplot.h:2668
bool HasBBox() override
Check whether this layer has a bounding box.
Definition mathplot.h:2661
double m_max_value
Max value of the values vector.
Definition mathplot.h:2670
std::vector< double > values
Values of the chart.
Definition mathplot.h:2667
virtual void Clear()
Clears all the data, leaving the layer empty.
~mpChart() override
Destructor.
Definition mathplot.h:2637
A 2D ellipse, described by a 2x2 covariance matrix.
Definition mathplot.h:5138
int GetSegments() const
Get the number of line segments used to approximate the ellipse. */.
Definition mathplot.h:5179
double m_cov_11
Covariance matrix element (1,1).
Definition mathplot.h:5207
void SetCovarianceMatrix(const double cov_00, const double cov_01, const double cov_11)
Changes the covariance matrix:
Definition mathplot.h:5195
void SetQuantiles(const double q)
Set how many "quantiles" to draw, that is, the confidence interval of the ellipse (see GetQuantiles a...
Definition mathplot.h:5166
double m_cov_00
The elements of the matrix (only 3 since cov(0,1)=cov(1,0) in any positive definite matrix).
Definition mathplot.h:5206
void SetSegments(const int segments)
Set the number of line segments used to approximate the ellipse.
Definition mathplot.h:5173
double m_quantiles
Confidence-interval multiplier used when drawing the ellipse.
Definition mathplot.h:5209
mpCovarianceEllipse(const double cov_00=1, const double cov_11=1, const double cov_01=0, const double quantiles=2, const int segments=32, const wxString &layerName=_T(""))
Default constructor.
Definition mathplot.h:5143
void RecalculateShape()
Called to update the m_shape_xs, m_shape_ys vectors, whenever a parameter changes.
double GetQuantiles() const
Get the confidence-interval multiplier used for the ellipse.
Definition mathplot.h:5159
int m_segments
The number of line segments that build up the ellipse.
Definition mathplot.h:5213
void GetCovarianceMatrix(double &cov_00, double &cov_01, double &cov_11) const
Returns the elements of the current covariance matrix:
Definition mathplot.h:5186
double m_cov_01
Covariance matrix element (0,1), equal to element (1,0).
Definition mathplot.h:5208
Create a generic FX function Override the ComputeY() function with your function.
Definition mathplot.h:2480
mpFXGeneric(const wxString &name=wxT("Generic FX function"), const int flags=mpALIGN_LEFT, const unsigned int yAxisID=0)
Definition mathplot.h:2486
double GetMinY() override
Get min Y of the function.
Definition mathplot.h:2519
virtual double ComputeY(double x)=0
The main computation of the FX function.
double GetY(const double x) override
Get function value for argument.
Definition mathplot.h:2500
double GetMaxY() override
Get max Y of the function.
Definition mathplot.h:2528
mpRange< double > m_rangeY
Y range.
Definition mathplot.h:2534
Abstract base class providing plot and labeling functionality for functions F:X->Y.
Definition mathplot.h:2021
virtual double GetY(double x)=0
Get function value for argument.
double DoGetY(double x)
Get function value with log if necessary Call DefineDoGetY() function if pDoGetY pointer is not defin...
void DoPlot(wxDC &dc, mpWindow &w) override
Layer plot handler.
double NormalDoGetY(double x)
Definition of the DoGetY function without log.
double LogDoGetY(double x)
Definition of the DoGetY function with log.
mpFX(const wxString &name=wxEmptyString, int flags=mpALIGN_RIGHT, unsigned int yAxisID=0)
void DefineDoGetY(void)
Define the good DoGetY function (with ou without log).
Abstract base class providing plot and labeling functionality for a locus plot F:N->X,...
Definition mathplot.h:2148
void SetViewMode(bool asBar)
Switch series plot like a bar mode.
int m_BarWidth
Bar width in pixels when the XY series is drawn in bar mode.
Definition mathplot.h:2228
virtual void Rewind()=0
Rewind value enumeration with mpFXY::GetNextXY.
double m_deltaX
Min delta between 2 consecutive coordinate on x direction.
Definition mathplot.h:2225
int GetBarWidth(void) const
Get the width of the bar when we plot in bar mode.
Definition mathplot.h:2204
bool DoGetNextXY(double *x, double *y)
Get function value with log test.
double m_deltaY
Min delta between 2 consecutive coordinate on y direction.
Definition mathplot.h:2226
void UpdateViewBoundary(wxCoord xnew, wxCoord ynew)
Update label positioning data.
mpRange< int > m_drawX
Range min and max on x axis.
Definition mathplot.h:2221
mpFXY(const wxString &name=wxEmptyString, int flags=mpALIGN_SW, bool viewAsBar=false, unsigned int yAxisID=0)
mpRange< int > m_drawY
Range min and max on y axis.
Definition mathplot.h:2222
virtual bool GetNextXY(double *x, double *y)=0
Get locus value for next N.
bool ViewAsBar(void) const
Get if we are in bar mode.
Definition mathplot.h:2213
virtual size_t GetSize()
Return the number of points in the series.
Definition mathplot.h:2173
virtual void Clear()
Clears all the data, leaving the layer empty.
Definition mathplot.h:2165
void DoPlot(wxDC &dc, mpWindow &w) override
Layer plot handler.
A class providing graphs functionality for a 2D plot (either continuous or a set of points),...
Definition mathplot.h:2274
const std::vector< double > & GetXData() const
Get read-only access to the internal X data vector.
Definition mathplot.h:2311
double GetMaxX() override
Returns the actual maximum X data (loaded in SetData).
Definition mathplot.h:2408
bool AddData(double x, double y, bool updatePlot)
Add data to the internal vector.
int GetReserve() const
Get memory reserved for m_xs and m_ys.
Definition mathplot.h:2347
size_t GetSize() override
Return the number of points in the series We assume that size of m_xs equals size of m_ys.
Definition mathplot.h:2305
mpRange< double > m_rangeY
Range min and max on y axis.
Definition mathplot.h:2361
~mpFXYVector() override
destrutor
Definition mathplot.h:2285
void Clear() override
Clears all the data, leaving the layer empty.
std::vector< double > m_ys
internal copy of the set of data on y direction
Definition mathplot.h:2354
void DrawAddedPoint(double x, double y)
Draw the point added if there is in bound.
std::vector< double > m_xs
internal copy of the set of data on x direction
Definition mathplot.h:2353
mpFXYVector(const wxString &name=wxEmptyString, int flags=mpALIGN_SW, bool viewAsBar=false, unsigned int yAxisID=0)
double GetMinX() override
Returns the actual minimum X data (loaded in SetData).
Definition mathplot.h:2386
void SetData(const std::vector< double > &xs, const std::vector< double > &ys)
Changes the internal data: the set of points to draw.
void SetReserve(const int reserve)
Set memory reserved for m_xs and m_ys Note : this does not modify the size of m_xs and m_ys,...
Definition mathplot.h:2337
int m_reserveXY
Memory reserved for m_xs and m_ys. Default 1000.
Definition mathplot.h:2356
double GetMaxY() override
Returns the actual maximum Y data (loaded in SetData).
Definition mathplot.h:2423
double m_lastX
Last x-coordinate point added.
Definition mathplot.h:2360
size_t m_endIndex
The end index indicating the last point inside plot area.
Definition mathplot.h:2358
bool m_isMonotonicX
Indicates if all all X values are monotonic, i.e increasing, which enables binary search.
Definition mathplot.h:2355
double GetMinY() override
Returns the actual minimum Y data (loaded in SetData).
Definition mathplot.h:2401
bool GetNextXY(double *x, double *y) override
Get locus value for next N.
void Rewind() override
Calculates the start and end index which shall be used when iterating the data.
double m_lastY
Last y-coordinate point added.
Definition mathplot.h:2362
const std::vector< double > & GetYData() const
Get read-only access to the internal Y data vector.
Definition mathplot.h:2317
mpRange< double > m_rangeX
Range min and max on x axis.
Definition mathplot.h:2359
size_t m_index
The internal counter for the "GetNextXY" interface.
Definition mathplot.h:2357
Abstract base class providing plot and labeling functionality for functions F:Y->X.
Definition mathplot.h:2083
double LogDoGetX(double y)
Definition of the DoGetX function with log.
void DefineDoGetX(void)
Define the good DoGetX function (with ou without log).
void DoPlot(wxDC &dc, mpWindow &w) override
Layer plot handler.
double DoGetX(double y)
Get function value with log if necessary Call DefineDoGetX() function if pDoGetX pointer is not defin...
virtual double GetX(double y)=0
Get function value for argument.
double NormalDoGetX(double y)
Definition of the DoGetX function without log.
mpFY(const wxString &name=wxEmptyString, int flags=mpALIGN_TOP, unsigned int yAxisID=0)
Plot layer implementing an abstract function plot class.
Definition mathplot.h:1743
unsigned int GetStep() const
Get step for plot.
Definition mathplot.h:1777
mpSymbol m_symbol
A symbol for the plot in place of point. Default mpNone.
Definition mathplot.h:1885
bool GetContinuity() const
Gets the 'continuity' property of the layer.
Definition mathplot.h:1763
int GetYAxisID() const
Get the ID of the Y axis used by the function.
Definition mathplot.h:1823
void SetAutoStep(const bool enable)
Enables auto step which is used to plot a maximum nuber of points at a time to the plot no matter zoo...
Definition mathplot.h:1856
virtual bool DrawSymbol(wxDC &dc, wxCoord x, wxCoord y)
Draw a symbol in place of point.
std::optional< double > GetSeriesValue(double xValue)
Get Y value of series at specified X.
size_t GetMaxNOfPoints() const
Get maximum number of points to plot.
Definition mathplot.h:1878
void SetSymbolSize(const int size)
Set symbol size.
Definition mathplot.h:1798
bool m_autoStep
Calculates m_step automatically based on how many points you want to draw.
Definition mathplot.h:1890
void SetLegendIsAlwaysVisible(const bool alwaysVisible)
Set the visibility of the name of the function in the legend despite the visibility of the function i...
Definition mathplot.h:1840
bool m_continuous
Specify if the layer will be plotted as a continuous line or a set of points. Default false.
Definition mathplot.h:1884
size_t m_maxNOfPoints
Maximum number of points to draw to screen.
Definition mathplot.h:1891
bool GetLegendIsAlwaysVisible() const
Get the visibility of the legend.
Definition mathplot.h:1848
bool GetAutoStep() const
Get if auto stop is enabled.
Definition mathplot.h:1863
void SetSymbol(const mpSymbol symbol)
Set symbol.
Definition mathplot.h:1784
int m_yAxisID
The ID of the Y axis used by the function. Equal 0 if no axis.
Definition mathplot.h:1888
void SetContinuity(const bool continuity)
Set the 'continuity' property of the layer.
Definition mathplot.h:1755
void SetStep(const unsigned int step)
Set step for plot.
Definition mathplot.h:1770
mpSymbol GetSymbol() const
Get symbol.
Definition mathplot.h:1791
bool m_LegendIsAlwaysVisible
If true, the name is visible in the legend despite the visibility of the function....
Definition mathplot.h:1889
void SetYAxisID(const unsigned int yAxisID)
Set the ID of the Y axis used by the function.
Definition mathplot.h:1832
mpFunction(mpLayerType layerType=mpLAYER_PLOT, const wxString &name=wxEmptyString, unsigned int yAxisID=0)
Full constructor.
int m_symbolSize
Size of the symbol. Default 6.
Definition mathplot.h:1886
void SetMaxNOfPoints(const size_t nOfPoints)
Set how many points that is allowed to be drawn at a time.
Definition mathplot.h:1871
int GetSymbolSize() const
Get symbol size.
Definition mathplot.h:1805
unsigned int m_step
Step to get point to be draw. Default : 1.
Definition mathplot.h:1887
Classic Gaussian distribution f(x) = exp(-(x-μ)²/2σ²)/sqrt(2πσ²)
Definition mathplot.h:2552
mpGaussian(const double mu, const double sigma)
Classic Gaussian distribution.
Definition mathplot.h:2559
double m_sigma
Sigma value.
Definition mathplot.h:2570
double ComputeY(const double x) override
The main computation of the FX function.
Definition mathplot.h:2574
double m_variance
Sigma² is the variance.
Definition mathplot.h:2571
double m_mu
Mean value.
Definition mathplot.h:2569
double m_const
Const factor.
Definition mathplot.h:2572
Abstract class providing an horizontal line.
Definition mathplot.h:1951
mpHorizontalLine(double yvalue, const wxPen &pen= *wxGREEN_PEN, unsigned int yAxisID=0)
Draw a horizontal line.
void SetYValue(const double yvalue)
Set y.
Definition mathplot.h:1964
void DoPlot(wxDC &dc, mpWindow &w) override
Pure virtual method to plot the layer.
Implements an overlay box which shows the mouse coordinates in plot units.
Definition mathplot.h:1347
bool ShouldBeShown(const wxRect plotArea, const wxPoint mousePos) const
Check conditions if info coords shall be shown or not.
Definition mathplot.h:1403
wxCoord m_mouseX
Last mouse X position in window pixel coordinates.
Definition mathplot.h:1458
bool IsShown() const
Get shown status.
Definition mathplot.h:1394
infoCoordType GetInfoCoordType() const
Get the type of info coordinates to be displayed (axis, closest series, or all series)
Definition mathplot.h:1436
infoCoordType
Type of info coordinates to be displayed (axis, closest series, or all series)
Definition mathplot.h:1369
@ infoCoord_closestSeries
Show the X and Y value of the closest series.
Definition mathplot.h:1371
@ infoCoord_axis
Show axis coordinates at mouse position.
Definition mathplot.h:1370
~mpInfoCoords() override
Default destructor.
Definition mathplot.h:1362
mpLabelType m_labelType
Label formatting mode used for the X coordinate display.
Definition mathplot.h:1456
std::vector< wxColor > m_seriesColors
Colors of the series in the order they were added to the mpWindow.
Definition mathplot.h:1461
void UpdateInfo(mpWindow &w, wxEvent &event) override
Update the content of the info box.
void DoPlot(wxDC &dc, mpWindow &w) override
Plot method.
void DrawContent(wxDC &dc, mpWindow &w)
Draw the content of info coords to plot.
void SetSeriesCoord(const bool show)
Set the series coordinates of the mouse position (if tractable set)
Definition mathplot.h:1420
mpInfoCoords(wxPoint pos, const wxBrush &brush= *wxTRANSPARENT_BRUSH, mpLocation location=mpMarginUser)
Complete constructor, setting initial rectangle and background brush.
wxString m_content
string holding the coordinates to be drawn.
Definition mathplot.h:1455
unsigned int m_timeConv
Time conversion mode used when formatting date/time X values.
Definition mathplot.h:1457
mpInfoCoords(mpLocation location)
Limited constructor.
void SetInfoCoordType(const infoCoordType type)
Set the type of info coordinates to be displayed (axis, closest series, or all series)
Definition mathplot.h:1428
virtual wxString GetInfoCoordsText(mpWindow &w, double xVal, std::unordered_map< int, double > yValList)
Get string describing mouse position.
wxCoord m_mouseY
Last mouse Y position in window pixel coordinates.
Definition mathplot.h:1459
bool m_show
Indicates if magnet shall be shown in plot.
Definition mathplot.h:1454
infoCoordType m_infoCoordType
Type of info coordinates to be displayed (axis, closest series, or all series).
Definition mathplot.h:1460
void ErasePlot(wxDC &, mpWindow &) override
Just delete the bitmap of the info.
Definition mathplot.h:1383
void Show(const bool show)
Set if info coords shall be shown or hidden.
Definition mathplot.h:1387
mpInfoCoords()
Default constructor.
void SetLabelMode(const mpLabelType mode, const unsigned int time_conv=0x20)
Set X axis label view mode.
Definition mathplot.h:1411
Base class to create small rectangular info boxes mpInfoLayer is the base class to create a small rec...
Definition mathplot.h:1227
const wxRect & GetRectangle() const
Get the current rectangle coordinates.
Definition mathplot.h:1300
virtual void ErasePlot(wxDC &, mpWindow &)
Just delete the bitmap of the info.
Definition mathplot.h:1261
double m_relX
Box X position relative window, used to rescale the info box position when the window is resized.
Definition mathplot.h:1323
wxBitmap * m_info_bmp
The bitmap that contain the info.
Definition mathplot.h:1321
void SetVisible(bool show) override
Sets layer visibility.
wxPoint m_reference
Holds the reference point for movements.
Definition mathplot.h:1322
virtual void UpdateInfo(mpWindow &w, wxEvent &event)
Update the content of the info box.
wxRect m_dim
The bounding rectangle of the mpInfoLayer box (may be resized dynamically by the Plot method).
Definition mathplot.h:1320
mpInfoLayer()
Default constructor.
~mpInfoLayer() override
Destructor.
wxPoint GetPosition() const
Get the position of the upper left corner of the box (in pixels)
Definition mathplot.h:1278
void SetInfoRectangle(mpWindow &w, int width=0, int height=0)
Compute the dimensions and position of the mpInfoLayer rectangle.
void SetLocation(const mpLocation location)
Set the location of the mpInfoLayer box.
Definition mathplot.h:1307
void SetInitialPosition(const wxPoint pos)
Set the position in percent of the upper left corner of the box.
Definition mathplot.h:1285
mpLocation GetLocation() const
Return the location of the mpInfoLayer box.
Definition mathplot.h:1314
bool HasBBox() override
mpInfoLayer has not bounding box.
Definition mathplot.h:1253
virtual bool Inside(const wxPoint &point)
Is given point inside the info box rectangle?
virtual void UpdateReference()
Update the rectangle reference point.
double m_relY
Box Y position relative window, used to rescale the info box position when the window is resized.
Definition mathplot.h:1324
mpInfoLayer(wxPoint pos, const wxBrush &brush= *wxTRANSPARENT_BRUSH, mpLocation location=mpMarginUser)
Complete constructor.
void DoPlot(wxDC &dc, mpWindow &w) override
Plot method.
virtual void Move(wxPoint delta, mpWindow &w)
Move the layer rectangle by given pixel deltas.
mpLocation m_location
Location of the box in the margin. Default mpMarginNone = use coordinates.
Definition mathplot.h:1325
wxSize GetSize() const
Get the size of the box (in pixels)
Definition mathplot.h:1293
Implement the legend to be added to the plot This layer allows you to add a legend to describe the pl...
Definition mathplot.h:1479
~mpInfoLegend() override
Default destructor.
Definition mathplot.h:1492
int GetLegendHitRegion(wxPoint mousePos)
Checks if mouse is inside legend and if it hovers the header or any of the series If a series is hove...
mpInfoLegend()
Default constructor.
bool m_showDraggedSeries
Indicate if series that has been gripped with mouse shall be drawn.
Definition mathplot.h:1650
void SetNeedUpdate()
Mark the legend bitmap as needing regeneration.
Definition mathplot.h:1523
mpInfoLegend(wxPoint pos, const wxBrush &brush= *wxWHITE_BRUSH, mpLocation location=mpMarginUser)
Complete constructor, setting initial rectangle and background brush.
void ShowSeriesValues(const bool show)
Set if the series values shall be drawn to the plot.
Definition mathplot.h:1567
void DrawDraggedSeries(wxDC &dc, mpWindow &w) const
When a series is being dragged, draw a rectangle with its name at the mouse cursor.
void DrawContent(wxDC &dc, mpWindow &w)
Draw the content of info legend to plot.
void SetVerticalCursorFixed(double posX)
Place the vertical cursor at a fixed position and show the series values.
void SetItemDirection(const mpLegendDirection mode)
Set item direction (may be vertical or horizontal)
Definition mathplot.h:1510
void EnableSeriesValues(const bool enable)
Enables to show series values in the legend.
Definition mathplot.h:1544
void IndicateSeriesIntersection(const bool enable)
Set if the intersection of the series with the vertical cursor shall be indicated.
Definition mathplot.h:1581
void ShowDraggedSeries(const bool active)
Set if dragged series shall be shown or hidden.
Definition mathplot.h:1530
mpLegendStyle m_item_mode
Visual style used for each legend entry.
Definition mathplot.h:1648
mpLegendStyle GetItemMode() const
Get the current legend item drawing mode.
Definition mathplot.h:1503
mpLegendDirection m_item_direction
Layout direction used when arranging legend entries.
Definition mathplot.h:1649
VerticalCursorMode GetVerticalCursorMode() const
Get the current vertical cursor mode.
Definition mathplot.h:1603
void SetVerticalCursorFollowMouse()
Make the vertical cursor follow the mouse position.
bool IsSeriesValuesEnabled() const
Check if series values is enabled in legend.
Definition mathplot.h:1552
VerticalCursorMode
Enumeration for vertical cursor mode, which determines how the vertical cursor is positioned for seri...
Definition mathplot.h:1596
@ CursorMode_mouse
Vertical cursor is at mouse position.
Definition mathplot.h:1597
wxCoord GetVerticalCursorX() const
Get the current x position (in pixels) of the vertical cursor.
static void RestoreAxisHighlighting(mpWindow &w)
Clear the dragged series rectangle from the plot and restores axis hovering indication.
HitCode
Return codes for GetLegendHitRegion() if no series was hit.
Definition mathplot.h:1639
void DoPlot(wxDC &dc, mpWindow &w) override
Plot method.
mpLegendDirection GetItemDirection() const
Get the current legend item layout direction.
Definition mathplot.h:1517
bool IsSeriesValuesShown() const
Indicates if series values shall be shown.
Definition mathplot.h:1574
void SetItemMode(const mpLegendStyle mode)
Set item mode (the element on the left of text representing the plot line may be line,...
Definition mathplot.h:1496
bool IsDraggedSeriesShown() const
Get shown status of dragged series.
Definition mathplot.h:1537
bool SeriesValuesShouldBeShown(const wxRect plotArea, const wxPoint mousePos) const
Check if series values should be shown in plot, depending on where mouse is.
Definition mathplot.h:1560
Plot layer, abstract base class.
Definition mathplot.h:844
void UpdateContext(wxDC &dc) const
Initialize the context.
void Plot(wxDC &dc, mpWindow &w)
Plot given view of layer to the given device context.
mpLayerZOrder m_ZIndex
The index in Z-Order to draw the layer.
Definition mathplot.h:1181
mpLayerType GetLayerType() const
Get layer type: a Layer can be of different types: plot, lines, axis, info boxes, etc.
Definition mathplot.h:879
bool GetDrawOutsideMargins() const
Get Draw mode: inside or outside margins.
Definition mathplot.h:1091
wxFont m_font
Layer's font.
Definition mathplot.h:1169
bool m_drawOutsideMargins
Select if the layer should draw only inside margins or over all DC. Default : false.
Definition mathplot.h:1175
void SetFontColour(const wxColour &colour)
Set layer font foreground colour.
Definition mathplot.h:1013
void SetFont(const wxFont &font)
Set layer font.
Definition mathplot.h:997
bool GetCanDelete(void) const
Retreive what we do with the object associated with the layer when we delete the layer.
Definition mathplot.h:1153
bool IsVisible() const
Is this layer visible?
Definition mathplot.h:1104
const wxString & GetName() const
Get layer name.
Definition mathplot.h:989
mpLayerZOrder GetZIndex(void) const
Get the ZIndex of the plot.
Definition mathplot.h:1160
wxBitmap GetColourSquare(int side=16)
Get a small square bitmap filled with the colour of the pen used in the layer.
wxColour m_fontcolour
Layer's font foreground colour.
Definition mathplot.h:1170
mpWindow * m_win
The wxWindow handle.
Definition mathplot.h:1167
bool m_CanDelete
Is the layer can be deleted.
Definition mathplot.h:1180
bool m_showName
States whether the name of the layer must be shown. Default : false.
Definition mathplot.h:1174
bool m_visible
Toggles layer visibility. Default : true.
Definition mathplot.h:1176
mpRect m_plotBoundaries
The boundaries for plotting curve calculated by mpWindow.
Definition mathplot.h:1179
void SetCanDelete(const bool canDelete)
Set what we do with the object associated with the layer when we delete the layer.
Definition mathplot.h:1146
bool GetShowName() const
Get Name visibility.
Definition mathplot.h:1077
void SetBrush(const wxColour &colour, enum wxBrushStyle style=wxBRUSHSTYLE_SOLID)
Set layer brush.
Definition mathplot.h:1055
virtual void SetTractable(const bool track)
Sets layer tractability.
Definition mathplot.h:1125
void SetAlign(const int align)
Set X/Y alignment.
Definition mathplot.h:1132
const mpLayerType m_type
Layer type mpLAYER_*.
Definition mathplot.h:1166
virtual bool IsLayerType(const mpLayerType typeOfInterest, int *subtype)
Set the layer's subtype in caller variable, and return true if the layer is of type "typeOfInterest".
Definition mathplot.h:897
int m_subtype
Layer sub type, set in constructors.
Definition mathplot.h:1168
const wxFont & GetFont() const
Get font set for this layer.
Definition mathplot.h:1005
int GetLayerSubType() const
Get layer subtype: each layer type can have several flavors.
Definition mathplot.h:887
mpLayer(mpLayerType layerType)
The base class of all layer objects.
const wxColour & GetFontColour() const
Get font foreground colour set for this layer.
Definition mathplot.h:1021
virtual void DoPlot(wxDC &dc, mpWindow &w)=0
Pure virtual method to plot the layer.
bool m_tractable
Is the layer tractable.
Definition mathplot.h:1177
const wxPen & GetPen() const
Get pen set for this layer.
Definition mathplot.h:1037
void SetShowName(const bool show)
Set Name visibility.
Definition mathplot.h:1070
void SetName(const wxString &name)
Set layer name.
Definition mathplot.h:981
bool IsTractable() const
Checks whether the layer is tractable or not.
Definition mathplot.h:1118
int m_flags
Holds label alignment. Default : mpALIGN_SW for series and mpALIGN_CENTER for scale.
Definition mathplot.h:1178
void SetDrawOutsideMargins(const bool drawModeOutside)
Set Draw mode: inside or outside margins.
Definition mathplot.h:1084
virtual void SetVisible(const bool show)
Sets layer visibility.
Definition mathplot.h:1111
wxString m_name
Layer's name.
Definition mathplot.h:1173
wxBrush m_brush
Layer's brush. Default wxTRANSPARENT_BRUSH.
Definition mathplot.h:1172
virtual bool DoBeforePlot()
If we need to do something before plot like reinitialize some parameters ... Return true by default t...
Definition mathplot.h:1197
virtual bool HasBBox()
Check whether this layer has a bounding box.
Definition mathplot.h:871
void SetPen(const wxPen &pen)
Set layer pen.
Definition mathplot.h:1029
wxPen m_pen
Layer's pen. Default Colour = Black, width = 1, style = wxPENSTYLE_SOLID.
Definition mathplot.h:1171
virtual double GetMaxX()
Get inclusive right border of bounding box.
Definition mathplot.h:914
void SetBrush(const wxBrush &brush)
Set layer brush.
Definition mathplot.h:1044
virtual double GetMinX()
Get inclusive left border of bounding box.
Definition mathplot.h:906
virtual double GetMaxY()
Get inclusive top border of bounding box.
Definition mathplot.h:930
virtual double GetMinY()
Get inclusive bottom border of bounding box.
Definition mathplot.h:922
void SetWindow(mpWindow &w)
Set the wxWindow handle.
Definition mathplot.h:859
void CheckLog(double *x, double *y, int yAxisID)
Test if we are in log axis and if true return the log of the values.
const wxBrush & GetBrush() const
Get brush set for this layer.
Definition mathplot.h:1063
int GetAlign() const
Get X/Y alignment.
Definition mathplot.h:1139
Abstract class providing a line.
Definition mathplot.h:1900
void SetValue(const double value)
Set x or y value.
Definition mathplot.h:1927
bool IsHorizontal(void) const
Is it a horizontal line?
Definition mathplot.h:1935
bool m_IsHorizontal
Is the line horizontal? Default false.
Definition mathplot.h:1942
bool HasBBox() override
Check whether this layer has a bounding box.
Definition mathplot.h:1911
mpLine(double value, const wxPen &pen= *wxGREEN_PEN)
Implement a line.
double GetValue() const
Get the x or y coordinates of the line.
Definition mathplot.h:1919
double m_value
The x or y coordinates of the line.
Definition mathplot.h:1941
Class for drawing mouse magnetization Draw an horizontal and a vertical line at the mouse position.
Definition mathplot.h:3425
void Show(const bool show)
Set if magnet shall be shown or hidden.
Definition mathplot.h:3465
void UpdateBox(const wxRect &plotArea)
Update the drawable magnet area from a wxRect.
Definition mathplot.h:3438
void DrawCross(wxDC &dc, mpWindow &w)
Update the magnet cross to a new mouse position.
void Enable(const bool enable)
Enables the magnet.
Definition mathplot.h:3444
bool IsEnabled() const
Check if magnet is enabled.
Definition mathplot.h:3450
bool ShouldBeShown(const wxPoint mousePos) const
Check conditions if magnet shall be shown.
Definition mathplot.h:3459
bool IsShown() const
Get shown status.
Definition mathplot.h:3471
This virtual class represents objects that can be moved to an arbitrary 2D location+rotation.
Definition mathplot.h:5020
void GetCoordinateBase(double &x, double &y, double &phi) const
Get the current coordinate transformation.
Definition mathplot.h:5035
bool HasBBox() override
Check whether this layer has a bounding box.
Definition mathplot.h:5053
std::vector< double > m_trans_shape_xs
Transformed shape vertices in X coordinates.
Definition mathplot.h:5105
mpRange< double > m_bbox_y
Range of bounding box on y direction.
Definition mathplot.h:5112
mpMovableObject()
Default constructor (sets mpMovableObject location and rotation to (0,0,0))
Definition mathplot.h:5024
double m_reference_phi
Current object rotation angle in radians.
Definition mathplot.h:5092
std::vector< double > m_shape_xs
Shape vertices in object-local X coordinates.
Definition mathplot.h:5101
double GetMinY() override
Get inclusive bottom border of bounding box.
Definition mathplot.h:5074
mpRange< double > m_bbox_x
The precomputed bounding box:
Definition mathplot.h:5111
double m_reference_y
Current object Y position in plot coordinates.
Definition mathplot.h:5091
double GetMinX() override
Get inclusive left border of bounding box.
Definition mathplot.h:5060
double GetMaxX() override
Get inclusive right border of bounding box.
Definition mathplot.h:5067
void DoPlot(wxDC &dc, mpWindow &w) override
Pure virtual method to plot the layer.
void ShapeUpdated()
Must be called by the descendent class after updating the shape (m_shape_xs/ys), or when the transfor...
double GetMaxY() override
Get inclusive top border of bounding box.
Definition mathplot.h:5081
void TranslatePoint(double x, double y, double &out_x, double &out_y) const
A method for 2D translation and rotation, using the current transformation stored in m_reference_x,...
double m_reference_x
The coordinates of the object (orientation "phi" is in radians).
Definition mathplot.h:5090
std::vector< double > m_shape_ys
Shape vertices in object-local Y coordinates.
Definition mathplot.h:5102
std::vector< double > m_trans_shape_ys
Transformed shape vertices in Y coordinates.
Definition mathplot.h:5106
void SetCoordinateBase(const double x, const double y, const double phi=0)
Set the coordinate transformation (phi in radians, 0 means no rotation).
Definition mathplot.h:5044
Classic Normal distribution f(x) = exp(-(ln(x)-μ)²/2σ²)/(xσ.sqrt(2π))
Definition mathplot.h:2588
double ComputeY(const double x) override
The main computation of the FX function.
Definition mathplot.h:2610
double m_const
Const factor.
Definition mathplot.h:2608
double m_variance
Sigma² is the variance.
Definition mathplot.h:2607
double m_mu
Mean value.
Definition mathplot.h:2605
mpNormal(const double mu, const double sigma)
Classic Normal distribution.
Definition mathplot.h:2595
double m_sigma
Sigma value.
Definition mathplot.h:2606
Layer for pie chart.
Definition mathplot.h:2754
void SetCenter(const wxPoint center)
Set the center of the pie chart.
Definition mathplot.h:2771
double GetMaxY() override
Get inclusive top border of bounding box.
Definition mathplot.h:2816
wxPoint m_center
Center of the pie chart in device coordinates.
Definition mathplot.h:2824
double GetMaxX() override
Get inclusive right border of bounding box.
Definition mathplot.h:2800
std::vector< wxColour > colours
Per-slice colours used when drawing the chart.
Definition mathplot.h:2825
~mpPieChart() override
Destructor.
Definition mathplot.h:2762
void SetPieColours(const std::vector< wxColour > &colourArray)
Set colours for the pie.
double m_radius
Radius of the pie chart in pixels.
Definition mathplot.h:2823
mpPieChart(const wxString &name=wxEmptyString, double radius=20)
Default constructor.
void DoPlot(wxDC &dc, mpWindow &w) override
Layer plot handler.
wxPoint GetCenter(void) const
Get the center of the pie chart.
Definition mathplot.h:2779
double GetMinY() override
Get inclusive bottom border of bounding box.
Definition mathplot.h:2808
double GetMinX() override
Get inclusive left border of bounding box.
Definition mathplot.h:2792
const wxColour & GetColour(unsigned int id)
Get the colour used for the slice with the given index.
An arbitrary polygon, descendant of mpMovableObject.
Definition mathplot.h:5231
void setPoints(const std::vector< double > &points_xs, const std::vector< double > &points_ys, bool closedShape=true)
Set the points in the polygon.
mpPolygon(const wxString &layerName=_T(""))
Default constructor.
Definition mathplot.h:5235
Printout class used by mpWindow to draw in the objects to be printed.
Definition mathplot.h:4961
bool OnPrintPage(int page) override
Render the requested print page.
bool HasPage(int page) override
Does this page exist?
mpPrintout(mpWindow *drawWindow, const wxString &title=_T("wxMathPlot print output"), int factor=2)
Construct a printout helper for a plot window.
void SetFactor(const int factor)
Definition mathplot.h:4996
void SetDrawState(const bool drawState)
Set whether the plot has already been drawn on the current printout.
Definition mathplot.h:4984
Abstract base class providing plot and labeling functionality for functions F:Y->X.
Definition mathplot.h:2449
mpProfile(const wxString &name=wxEmptyString, int flags=mpALIGN_TOP)
virtual double GetY(double x)=0
Get function value for argument.
void DoPlot(wxDC &dc, mpWindow &w) override
Layer plot handler.
Plot layer implementing an abstract scale ruler.
Definition mathplot.h:2853
static int GetSignificantDigits(double step, double maxAxisValue)
Get number of significant digits to be used in scientific notation.
mpLabelType GetLabelMode() const
Get axis label view mode.
Definition mathplot.h:2945
void GetScale(double *min, double *max) const
Get the minimum and maximum of the scale range when we are in automatic mode.
Definition mathplot.h:3043
void ShowTicks(const bool ticks)
Set axis ticks.
Definition mathplot.h:2906
mpLabelType m_labelType
Select labels mode: mpLabel_AUTO for normal labels, mpLabel_TIME for time axis in hours,...
Definition mathplot.h:3134
bool m_isLog
Is the axis a log axis ?
Definition mathplot.h:3137
bool m_grids
Flag to show grids. Default false.
Definition mathplot.h:3131
void SetLabelFormat(const wxString &format, const bool updateLabelMode=false)
Set axis Label format (used for mpLabel_AUTO draw mode).
Definition mathplot.h:2936
void SetAxisID(const unsigned int yAxisID)
Set an ID to the axis.
Definition mathplot.h:2899
virtual bool IsLogAxis()
Get if we are in Logarithmic mode.
Definition mathplot.h:3076
const wxString & GetLabelFormat() const
Get axis Label format (used for mpLabel_AUTO draw mode).
Definition mathplot.h:2961
void SetCoordIsAlwaysVisible(const bool alwaysVisible)
Set the visibility of the mouse coordinates in the info coordinates despite the visibility of the axi...
Definition mathplot.h:3092
void SetScale(const mpRange< double > range)
Set the minimum and maximum of the scale range when we are in automatic mode.
Definition mathplot.h:3052
virtual int GetOrigin(mpWindow &w)=0
virtual function to compute origin of the axis
bool GetCoordIsAlwaysVisible() const
Get the visibility of the mouse coordinates in the info coordinates.
Definition mathplot.h:3100
static bool UseScientific(double maxAxisValue)
Checks if scientific notation shall be used on the labels.
static int GetDecimalDigits(double step)
Get number of decimal digits to be used in decimal notation.
bool GetShowTicks() const
Get axis ticks.
Definition mathplot.h:2913
int m_axisID
Unique ID that identify this axis. Default -1 mean that axis is not used.
Definition mathplot.h:3128
bool m_CoordIsAlwaysVisible
If true, the mouse coordinates is visible in the info coordinates despite the visibility of the axis....
Definition mathplot.h:3139
virtual void SetLogAxis(const bool log)
Set Logarithmic mode.
Definition mathplot.h:3084
void ShowGrids(const bool grids)
Set axis grids.
Definition mathplot.h:2920
bool m_ticks
Flag to show ticks. Default true.
Definition mathplot.h:3130
unsigned int m_timeConv
Selects if time has to be converted to local time or not.
Definition mathplot.h:3135
bool HasBBox() override
Check whether this layer has a bounding box.
Definition mathplot.h:2882
mpRange< double > m_axisRange
Range axis values when autosize is false.
Definition mathplot.h:3133
void SetAuto(const bool automaticScalingIsEnabled)
Enable/Disable automatic scaling for this axis.
Definition mathplot.h:2985
int GetLabelWidth(double value, wxDC &dc, const mpScaleConstraints &constraints)
Get label text width for a given value.
void SetHovering(const bool hover)
Set if axis shall be highlighted when a series is dragged over it.
Definition mathplot.h:3068
int GetAxisID(void) const
Return the ID of the Axis.
Definition mathplot.h:2890
wxString m_labelFormat
Format string used to print labels.
Definition mathplot.h:3136
double GetMaxScale() const
Get the maximum of the scale range when we are in automatic mode.
Definition mathplot.h:3025
void SetMaxScale(const double max)
Set the maximum of the scale range when we are in automatic mode.
Definition mathplot.h:3017
virtual void DrawScaleName(wxDC &dc, mpWindow &w, int origin, int labelSize)=0
Draw the name of the scale This function is virtual and need to be overloaded in child class.
bool GetAuto() const
Is automatic scaling enabled for this axis?
Definition mathplot.h:2993
const wxPen & GetGridPen() const
Get pen set for this axis.
Definition mathplot.h:2977
static mpScaleConstraints ComputeScaleConstraints(double step, double maxAxisValue)
Compute the scale constraints for the given step size and axis range.
void SetScale(const double min, const double max)
Set the minimum and maximum of the scale range when we are in automatic mode.
Definition mathplot.h:3034
bool m_auto
Flag to autosize grids. Default true.
Definition mathplot.h:3132
mpScale(const wxString &name, int flags, bool grids, mpLabelType labelType=mpLabel_AUTO, mpOptional_uint axisID=std::nullopt)
Full constructor.
wxPen m_gridpen
Grid's pen. Default Colour = LIGHT_GREY, width = 1, style = wxPENSTYLE_DOT.
Definition mathplot.h:3129
bool GetShowGrids() const
Get axis grids.
Definition mathplot.h:2927
void SetLabelMode(const mpLabelType mode, const unsigned int time_conv=0x20)
Set axis label view mode.
Definition mathplot.h:2953
void SetMinScale(const double min)
Set the minimum of the scale range when we are in automatic mode.
Definition mathplot.h:3001
static wxString FormatLogValue(double n)
Formats a value to a string used on a log axis.
mpRange< double > GetScale() const
Get the minimum and maximum of the scale range when we are in automatic mode.
Definition mathplot.h:3060
void SetGridPen(const wxPen &pen)
Set grid pen.
Definition mathplot.h:2969
static double GetStep(double scale, int minLabelSpacing)
Calculate a 'nice' label step size for the given dataset and desired pixel spacing.
wxString FormatLabelValue(double value, const mpScaleConstraints &constraints)
Formats a label value to a string Use m_ScaleConstraints, so this structure must be up to date.
double GetMinScale() const
Get the minimum of the scale range when we are in automatic mode.
Definition mathplot.h:3009
Plot layer implementing a x-scale ruler.
Definition mathplot.h:3206
bool IsTopAxis() const
Return true when this X axis is aligned at the top edge or top border.
Definition mathplot.h:3220
mpScaleX(const wxString &name=_T("X"), const int flags=mpALIGN_CENTERX, const bool grids=false, const mpLabelType type=mpLabel_AUTO)
Full constructor.
Definition mathplot.h:3213
void DoPlot(wxDC &dc, mpWindow &w) override
Layer plot handler.
static int m_orgy
The y origin coordinate of the X axis We declare it static so we can access to it in mpScaleY.
Definition mathplot.h:3236
void DrawScaleName(wxDC &dc, mpWindow &w, int origin, int labelSize) override
Draw the name of the scale This function is virtual and need to be overloaded in child class.
int GetOrigin(mpWindow &w) override
virtual function to compute origin of the axis
bool IsBottomAxis() const
Return true when this X axis is aligned at the bottom edge or bottom border.
Definition mathplot.h:3226
Plot layer implementing a y-scale ruler.
Definition mathplot.h:3261
void DoPlot(wxDC &dc, mpWindow &w) override
Layer plot handler.
bool IsInside(const wxCoord xPixel) const
Return true if the given X pixel lies within this Y-axis drawing area.
Definition mathplot.h:3316
int m_axisWidth
Reserved width for this Y axis including labels, in pixels.
Definition mathplot.h:3326
void UpdateAxisWidth(mpWindow &w)
Recalculate the axis width based on the label and name text sizes.
bool GetAutoHideAxis() const
Return true if this axis is automatically hidden when not used by any series.
Definition mathplot.h:3298
int m_xPos
Leftmost X pixel occupied by this axis (starting point).
Definition mathplot.h:3327
void SetAutoHideAxis(const bool autoHide)
Enable or disable automatic hiding of this axis when no series uses it.
Definition mathplot.h:3292
int GetAxisWidth() const
Get the reserved width of the Y axis in pixels.
Definition mathplot.h:3284
void DrawScaleName(wxDC &dc, mpWindow &w, int origin, int maxLabelWidth) override
Draw the name of the scale This function is virtual and need to be overloaded in child class.
int GetOrigin(mpWindow &w) override
virtual function to compute origin of the axis
bool IsLeftAxis() const
Return true if this Y axis is aligned to the left side.
Definition mathplot.h:3304
bool m_autoHideAxis
Hide axis automatically if no series uses it. Default: false.
Definition mathplot.h:3328
mpScaleY(const wxString &name=_T("Y"), const int flags=mpALIGN_CENTERY, const bool grids=false, const mpOptional_uint yAxisID=std::nullopt, const mpLabelType labelType=mpLabel_AUTO)
Full constructor.
Definition mathplot.h:3270
bool IsRightAxis() const
Return true if this Y axis is aligned to the right side.
Definition mathplot.h:3310
Plot layer implementing a text string.
Definition mathplot.h:4855
mpLocation m_location
The location of the text.
Definition mathplot.h:4918
void SetLocation(const mpLocation location)
Set the location of the box.
Definition mathplot.h:4888
mpText(const wxString &name=wxEmptyString)
Default constructor.
Definition mathplot.h:4859
int m_offsetx
Holds offset for X in percentage.
Definition mathplot.h:4916
void GetOffset(int *offX, int *offY) const
Get the offset.
Definition mathplot.h:4909
bool HasBBox() override
Text Layer has not bounding box.
Definition mathplot.h:4881
mpLocation GetLocation() const
Returns the location of the box.
Definition mathplot.h:4895
void DoPlot(wxDC &dc, mpWindow &w) override
Text Layer plot handler.
mpText(const wxString &name, mpLocation marginLocation)
void SetOffset(const int offX, const int offY)
Set offset.
Definition mathplot.h:4902
int m_offsety
Holds offset for Y in percentage.
Definition mathplot.h:4917
mpText(const wxString &name, int offsetx, int offsety)
Plot layer implementing a simple title.
Definition mathplot.h:4932
mpTitle(const wxString &name)
Definition mathplot.h:4940
mpTitle()
Default constructor.
Abstract class providing an vertical line.
Definition mathplot.h:1980
bool DoBeforePlot() override
This is the only case where we don't need and Y axis So no need to test m_yAxisID.
Definition mathplot.h:2005
mpVerticalLine(double xvalue, const wxPen &pen= *wxGREEN_PEN)
Draw a vertical line.
void SetXValue(const double xvalue)
Set x.
Definition mathplot.h:1992
void DoPlot(wxDC &dc, mpWindow &w) override
Pure virtual method to plot the layer.
Canvas for plotting mpLayer implementations.
Definition mathplot.h:3504
mpRange< double > GetVisibleRangeY(const unsigned int yAxisID=0)
Get the visible range for Y axis of ID yAxisID, i.e.
Definition mathplot.h:3771
const wxString & GetWildcard(void) const
Get wildcard.
Definition mathplot.h:4201
double GetPosY(const int yAxisID)
Get current view's Y position.
Definition mathplot.h:3844
mpInfoLayer * m_movingInfoLayer
For moving info layers over the window area.
Definition mathplot.h:4788
mpRange< double > GetDesiredBoundX(void) const
Get desired bounding box for X axis.
Definition mathplot.h:3736
int GetScreenY(void) const
Get current view's Y dimension in device context units.
Definition mathplot.h:3906
int GetNOfYAxis(void) const
Get the number of Y axis.
Definition mathplot.h:3853
virtual void OnMouseLeftRelease(wxMouseEvent &event)
Mouse left click (for rect zoom)
void SetColourTheme(const wxColour &bgColour, const wxColour &drawColour, const wxColour &axesColour)
Set Color theme.
void UnSetOnUserMouseAction()
Remove the 'user mouse action event' callback.
Definition mathplot.h:4498
void ZoomRect(wxPoint p0, wxPoint p1)
Zoom view fitting given coordinates to the window (p0 and p1 do not need to be in any specific order)
double m_mouseScaleX
Store current X-scale, used as reference during drag zooming.
Definition mathplot.h:4783
bool GetDrawBox() const
Get the draw of the box around the plot.
Definition mathplot.h:4412
int m_infoLegendSelectedSeries
Only used with config window: the selected series in info legend.
Definition mathplot.h:4805
void OpenConfigWindow(mpLayerType layerType=mpLAYER_UNDEF, int param=-1)
Opens the configuration window, creating it lazily on first use.
virtual void OnToggleCoords(wxCommandEvent &event)
Toggle Coords handler.
mpRange< double > GetDesiredBoundY(const int yAxisID)
Get desired bounding box for Y axis of ID yAxisID.
Definition mathplot.h:3753
bool m_mouseMovedAfterRightClick
If the mouse does not move after a right click, then the context menu is displayed.
Definition mathplot.h:4779
mpInfoLayer * GetMovingInfoLayer() const
Returns moving info layer.
Definition mathplot.h:4598
bool PointIsInsideBound(const double px, const double py, const int yAxisID)
Is the given point inside the current bounding box for the selected Y axis?
Definition mathplot.h:4125
bool m_enableMouseNavigation
For pan/zoom with the mouse.
Definition mathplot.h:4777
const wxColour & GetAxesColour() const
Get axes draw colour.
Definition mathplot.h:4455
void SetOnDeleteLayer(const mpOnDeleteLayer &event)
On delete layer event Allows the user to perform certain actions before deleting the layer.
Definition mathplot.h:4477
virtual void OnMouseWheel(wxMouseEvent &event)
Mouse handler for the wheel.
int GetExtraMargin() const
Get the extra margin.
Definition mathplot.h:4354
bool IsLayerVisible(const wxString &name)
Check whether a layer with given name is visible.
bool SaveScreenshot(const wxString &filename, int type=wxBITMAP_TYPE_BMP, wxSize imageSize=wxDefaultSize, bool fit=false)
Draw the window on a wxBitmap, then save it to a file.
unsigned int CountLayersFXYPlot()
Counts the number of XY plot layers.
unsigned int CountLayersType(mpLayerType type)
Counts the number of plot layers: this is to count only the layers which have a plot.
void ZoomInX()
Zoom in current view along X around center and refresh display.
std::unordered_map< int, double > m_mouseScaleYList
Store current Y-scales, used as reference during drag zooming.
Definition mathplot.h:4784
bool m_boxZoomActive
Indicate if box zoom is active.
Definition mathplot.h:4792
void SetPosY(std::unordered_map< int, double > &posYList)
Set current view's Y position and refresh display.
Definition mathplot.h:3829
bool GetMagnetize() const
Is mouse magnetization enabled? Useful to read the position on the axes.
Definition mathplot.h:4556
virtual void OnMouseHelp(wxCommandEvent &event)
Help handler.
virtual void OnSize(wxSizeEvent &event)
Size handler, will update scroll bar sizes.
void SetMouseLeftDownAction(const mpMouseButtonAction action)
Set the type of action for the left mouse button.
Definition mathplot.h:4571
virtual void OnScrollPageDown(wxScrollWinEvent &event)
Scroll page down.
int m_last_lx
Last logical X origin, used for double buffering.
Definition mathplot.h:4771
void SetLayerVisible(const unsigned int position, bool viewable)
Sets the visibility of a layer by its position in layer list.
bool m_autoFit
Automatically fit plot when hiding / showing axis and series.
Definition mathplot.h:4787
virtual void OnToggleGrids(wxCommandEvent &event)
Toggle Grids handler.
virtual void OnMouseMove(wxMouseEvent &event)
Mouse handler for mouse motion (for pan)
void Zoom(bool zoomIn, const wxPoint ¢erPoint)
zoom action
bool IsLogYaxis(const int yAxisID)
Get the log property (true or false) Y layer (Y axis) with a specific Y ID or false if not found.
Definition mathplot.h:4520
wxMemoryDC * GetMemoryDC(void)
Give a direct access to the memory DC to draw in the buffered bitmap You need release the bitmap afte...
Definition mathplot.h:4651
mpMagnet m_magnet
For mouse magnetization.
Definition mathplot.h:4794
virtual void OnLoadFile(wxCommandEvent &event)
Load File handler.
void SetAutoFit(const bool autoFit)
Set if plot shall be auto fitted when hiding or showing axis and series via mouse.
Definition mathplot.h:4253
void SetMargins(int top, int right, int bottom, int left)
Set window margins, creating a blank area where some kinds of layers cannot draw.
int GetScreenX(void) const
Get current view's X dimension in device context units.
Definition mathplot.h:3895
virtual void OnShowPopupMenu(wxMouseEvent &event)
Mouse handler, will show context menu.
bool m_enableBufferedPaintDC
For auto DC double buffering.
Definition mathplot.h:4776
mpOptional_int IsInsideYAxis(const wxPoint &point)
Check if a given point is inside the area of a visible Y-axis and returns its ID if so.
mpMouseButtonAction GetMouseLeftDownAction() const
Returns the type of action for the left mouse button.
Definition mathplot.h:4580
void SetScaleX(const double scaleX)
Set current view's X scale and refresh display.
Definition mathplot.h:3679
void SetDefaultDir(const wxString &dirname)
Set the default directory for wxFileDialog.
Definition mathplot.h:4219
virtual void OnScrollBottom(wxScrollWinEvent &event)
Scroll to bottom.
unsigned int CountLayers()
Counts the number of plot layers, including axes: this is to count only the layers which have a bound...
mpLayer * GetLayerByClassName(const wxString &name)
void SetLogXaxis(const bool log)
Enable or disable logarithmic scaling on the X axis.
Definition mathplot.h:4534
int GetRightYAxesWidth(mpOptional_int yAxisID=std::nullopt)
Calculate width of all axes to the right of this axis.
void SetBound()
Update bound for mpFX and mpFY when axis is scaled.
mpRect GetPlotBoundaries(const bool with_margin) const
Get the boundaries of the plot.
Definition mathplot.h:4381
void EnableBufferedPaintDC(const bool enabled)
Enable/disable the auto buffering of PaintDC.
Definition mathplot.h:3970
wxBitmap m_buff_bmp
Bmp for double buffering.
Definition mathplot.h:4773
mpMouseButtonAction m_mouseLeftDownAction
Type of action for left mouse button.
Definition mathplot.h:4778
mpLayer * GetLayersType(int position, mpLayerType type)
wxMemoryDC m_buff_dc
DC for double buffering.
Definition mathplot.h:4774
wxCoord x2p(const double x) const
Converts graph (floating point) coordinates into mpWindow (screen) pixel coordinates,...
Definition mathplot.h:3944
void Paint(wxDC &dc)
Paint handler which plot all attached layers, with possibility to chose type of DC.
mpScale * GetLayerAxis(int position, mpScaleType scale=mpsAllType)
wxTopLevelWindow * m_parent
Pointer to the top-level window containing the plot (used for fullscreen)
Definition mathplot.h:4742
wxRect m_PlotArea
The full size of the plot with m_extraMargin.
Definition mathplot.h:4769
virtual void OnZoomIn(wxCommandEvent &event)
Zoom In handler.
int m_clickedY
Last mouse click Y position, for centering and zooming the view.
Definition mathplot.h:4759
wxColour m_bgColour
Background Colour.
Definition mathplot.h:4751
virtual void OnScrollLineDown(wxScrollWinEvent &event)
Scroll line down.
wxCoord m_plotHeight
Height of the plot = m_scrY - (m_margin.top + m_margin.bottom)
Definition mathplot.h:4765
mpRange< double > GetBoundY(const int yAxisID)
Get bounding box for Y axis of ID yAxisID.
Definition mathplot.h:3744
void SetLogYaxis(const int yAxisID, const bool log)
Set the log property (true or false) for a Y layer (Y axis) given by is ID.
Definition mathplot.h:4545
void SetWildcard(const wxString &wildcard)
Set wildcard for LoadFile() function when we use wxFileDialog.
Definition mathplot.h:4193
wxCoord m_plotWidth
Width of the plot = m_scrX - (m_margin.left + m_margin.right)
Definition mathplot.h:4764
wxPoint m_mouseLClick
Starting coords for rectangular zoom selection.
Definition mathplot.h:4782
mpScaleY * GetLayerYAxis(int yAxisID)
void DrawBoxZoom(wxDC &dc)
Draws the box zoom selection rectangle.
virtual void OnFit(wxCommandEvent &event)
Fit handler.
const wxColour & GetbgColour() const
Get the plot background colour.
Definition mathplot.h:4461
bool m_lockaspect
Scale aspect is locked or not.
Definition mathplot.h:4750
void SetScaleYAndCenter(double scaleY, int yAxisID)
Set the m_scaleY directly to fixed zoom level, but also adjust m_posY to to make the zoom around cent...
bool m_enableScrollBars
Enable scrollbar in plot window (default false)
Definition mathplot.h:4786
mpLayer * GetLayerPlot(int position, mpFunctionType func=mpfAllType)
void UpdateBoundingBoxToInclude(const double px, const double py, const int yAxisID)
Ensure the bounding box includes the given point for the selected Y axis.
Definition mathplot.h:4138
void SetLayerVisible(const wxString &name, bool viewable)
Sets the visibility of a layer by its name.
bool m_drawBox
Draw box of the plot bound. Default true.
Definition mathplot.h:4754
void SetScreen(const int scrX, const int scrY)
Set current view's dimensions in device context units.
Definition mathplot.h:3871
mpWindow(wxWindow *parent, wxWindowID id=wxID_ANY, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long flags=0)
Construct a plotting window.
void RefreshConfigWindow(mpLayerType layerType=mpLAYER_UNDEF, int param=-1)
Refresh the config window if present.
void DoZoomXCalc(bool zoomIn, wxCoord staticXpixel=-1)
Zoom in or out X around a X position.
virtual void OnLockAspect(wxCommandEvent &event)
Lock Aspect handler.
bool IsLogXaxis() const
Is this an X axis to be displayed with log scale? It is really an axis property but as we need to con...
Definition mathplot.h:4508
int GetMarginTop(const bool minusExtra=false) const
Get the top margin.
Definition mathplot.h:4281
static void SetDefaultLegendIsAlwaysVisible(const bool visible)
Set if legend is always visible even if series is not plotted.
Definition mathplot.h:4238
void RenderOverlays(wxDC &dc)
Draw fast moving objects as a overlay on top of the buffered DC, without having to re-draw all layers...
virtual void OnScrollPageUp(wxScrollWinEvent &event)
Scroll page up.
virtual void OnPaint(wxPaintEvent &event)
Paint handler, will plot all attached layers.
bool IsLayerVisible(const unsigned int position)
Check whether the layer at given position is visible.
wxPoint m_mousePos
Current mouse position in window.
Definition mathplot.h:4780
mpRect m_plotBoundaries
The full size of the plot. Calculated.
Definition mathplot.h:4767
bool LoadFile(const wxString &filename=wxEmptyString)
Load a data file like a csv file Data must be formatted in 2 or more columns.
double GetScaleX(void) const
Get current view's X scale.
Definition mathplot.h:3693
std::optional< mpPlotHit > GetClosestPlot(wxCoord ix, wxCoord iy)
bool AddLayer(mpLayer *layer, bool fit=true, bool refreshConfig=true)
Add a plot layer to the canvas.
int GetPlotWidth() const
Get the width of the plot.
Definition mathplot.h:4366
void SetScaleXAndCenter(double scaleX)
Set the m_scaleX directly to fixed zoom level, but also adjust m_posX to to make the zoom around cent...
bool DelLayer(mpLayer *layer, mpDeleteAction alsoDeleteObject, bool refreshDisplay=true, bool refreshConfig=true)
Remove a plot layer from the canvas.
wxPoint m_mouseRClick
For the right button "drag" feature.
Definition mathplot.h:4781
virtual void OnMouseLeftDown(wxMouseEvent &event)
Mouse left click (for rect zoom)
std::unordered_map< int, mpRange< double > > GetAllDesiredY()
Returns the desired bounds for all Y-axes.
Definition mathplot.h:3796
int GetLayerPosition(mpLayer *layer)
bool IsYAxisUsedByFunction(int yAxisID)
void ZoomInY(mpOptional_int yAxisID=std::nullopt)
Zoom in current view along Y around center and refresh display.
void EnableMousePanZoom(const bool enabled)
Enable/disable the feature of pan/zoom with the mouse (default=enabled)
Definition mathplot.h:3977
mpAxisList GetAxisDataYList(void) const
Get the Y-axis data map.
Definition mathplot.h:3861
void UpdateDesiredBoundingBox(const mpAxisUpdate update)
Update m_desired bounds.
Definition mathplot.h:4088
void ZoomIn(const wxPoint ¢erPoint=wxDefaultPosition)
Zoom into current view and refresh display.
void DoZoomYCalc(bool zoomIn, wxCoord staticYpixel=-1, mpOptional_int yAxisID=std::nullopt)
Zoom in or out Y around a Y position.
wxColour m_fgColour
Foreground Colour.
Definition mathplot.h:4752
void ZoomOut(const wxPoint ¢erPoint=wxDefaultPosition)
Zoom out current view and refresh display.
void SetMarginBottom(const int bottom)
Set the bottom margin.
Definition mathplot.h:4313
int GetMarginLeft(const bool minusExtra=false) const
Get the left margin.
Definition mathplot.h:4338
bool IsAspectLocked() const
Checks whether the X/Y scale aspect is locked.
Definition mathplot.h:3993
mpRange< double > GetBoundX(void) const
Get bounding box for X axis.
Definition mathplot.h:3730
mpAxisList m_AxisDataYList
List of axis data for the Y direction.
Definition mathplot.h:4747
double p2x(const wxCoord pixelCoordX) const
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition mathplot.h:3925
void SetDrawBox(const bool drawbox)
Set the draw of the box around the plot.
Definition mathplot.h:4406
mpInfoLayer * IsInsideInfoLayer(const wxPoint &point)
Check if a given point is inside the area of a mpInfoLayer and eventually returns its pointer.
void DelAllLayers(mpDeleteAction alsoDeleteObject, bool refreshDisplay=true)
Remove all layers from the plot.
void LockAspect(bool enable=true)
Enable or disable X/Y scale aspect locking for the view.
void SetOnUserMouseAction(const mpOnUserMouseAction &userMouseEventHandler)
On user mouse action event Allows the user to perform certain actions before normal event processing.
Definition mathplot.h:4492
void UpdateAll()
Refresh display.
wxString m_DefaultDir
The default directory for wxFileDialog.
Definition mathplot.h:4799
wxMenu m_popmenu
Canvas' context menu.
Definition mathplot.h:4749
virtual void OnScrollThumbTrack(wxScrollWinEvent &event)
Scroll thumb on scroll bar moving.
bool CheckUserMouseAction(wxMouseEvent &event)
Check if a user mouse action is required.
virtual void OnMouseLeave(wxMouseEvent &event)
Mouse handler for mouse motion (for pan)
double GetScaleY(const int yAxisID)
Get current view's Y scale.
Definition mathplot.h:3718
int m_clickedX
Last mouse click X position, for centering and zooming the view.
Definition mathplot.h:4758
virtual void OnCenter(wxCommandEvent &event)
Center handler.
void SetMarginRight(const int right)
Set the right margin.
Definition mathplot.h:4290
void InitializeBoundingBox(const double px, const double py, const int yAxisID)
Initialize the bounding box from a first point for the selected Y axis.
Definition mathplot.h:4153
wxMenu * GetPopupMenu()
Get reference to context menu of the plot canvas.
Definition mathplot.h:3526
void SetPos(const double posX, std::unordered_map< int, double > &posYList)
Set current view's X and Y position and refresh display.
Definition mathplot.h:3916
static bool m_DefaultCoordIsAlwaysVisible
This value sets the default behaviour when an axis is not visible for the mouse info coordinates disp...
Definition mathplot.h:4246
void DelAllYAxisAfterID(mpDeleteAction alsoDeleteObject, int yAxisID=0, bool refreshDisplay=true)
Remove all extra y axis after the selected y axis.
static bool m_DefaultLegendIsAlwaysVisible
This value sets the default behaviour when a series is not visible for the legend display.
Definition mathplot.h:4231
wxBitmap * BitmapScreenshot(wxSize imageSize=wxDefaultSize, bool fit=false)
Get a screen shot of the window plot.
void DeleteConfigWindow(void)
Deletes configuration window.
void EnableDoubleBuffer(const bool enabled)
Deprecated: Enable/disable the double-buffering of the window, eliminating the flicker (default=enabl...
Definition mathplot.h:3962
virtual void OnFullScreen(wxCommandEvent &event)
FullScreen handler.
void SetMPScrollbars(bool status)
Enable/disable scrollbars.
wxBitmap * m_Screenshot_bmp
For clipboard, save and print.
Definition mathplot.h:4796
void DelAllPlot(mpDeleteAction alsoDeleteObject, mpFunctionType func=mpfAllType, bool refreshDisplay=true, bool refreshConfig=true)
Remove all plot layers.
void ClipboardScreenshot(wxSize imageSize=wxDefaultSize, bool fit=false)
Send the screen shot to the Clipboard.
virtual void BindEvents(void)
Connect all events.
virtual void OnScreenShot(wxCommandEvent &event)
ScreenShot handler.
virtual void OnScrollLineUp(wxScrollWinEvent &event)
Scroll line up.
void Fit(const mpRange< double > &rangeX, std::unordered_map< int, mpRange< double > > rangeY, bool updateDesired=true, wxCoord *printSizeX=NULL, wxCoord *printSizeY=NULL)
Set view to fit a given bounding box and refresh display with UpdateAll().
mpLayerList m_layers
List of attached plot layers.
Definition mathplot.h:4745
void SetbgColour(const wxColour &colour)
Set the plot background colour.
Definition mathplot.h:4467
static double m_zoomIncrementalFactor
This value sets the zoom steps whenever the user clicks "Zoom in/out" or performs zoom with the mouse...
Definition mathplot.h:4226
virtual void OnZoomOut(wxCommandEvent &event)
Zoom Out handler.
int GetMarginBottom(const bool minusExtra=false) const
Get the bottom margin.
Definition mathplot.h:4321
mpFloatRectSimple GetBoundingBox(const bool desired, const unsigned int yAxisID=0)
Return a bounding box for an y-axis ID.
Definition mathplot.h:4111
void SetScaleY(const double scaleY, const int yAxisID)
Set current view's Y scale and refresh display.
Definition mathplot.h:3702
wxColour m_axColour
Axes Colour.
Definition mathplot.h:4753
mpLayer * GetLayerByName(const wxString &name)
virtual void OnMouseLeftDoubleClick(wxMouseEvent &event)
Mouse left double click (opens the configuration window of a Y-axis)
mpAxisData m_AxisDataX
Axis data for the X direction.
Definition mathplot.h:4746
void SetPosX(const double posX)
Set current view's X position and refresh display.
Definition mathplot.h:3809
mpRect m_marginOuter
Margin around the plot exluding Y-axis. Default 50.
Definition mathplot.h:4762
mpLayer * GetLayer(int position)
mpRect m_margin
Margin around the plot including Y-axis.
Definition mathplot.h:4761
void ZoomOutX()
Zoom out current view along X around center and refresh display.
void InitParameters()
Function to initialize all variables to their default values This function is called in mpWindow cons...
virtual void OnMouseRightDown(wxMouseEvent &event)
Mouse handler, for detecting when the user drags with the right button or just "clicks" for the menu.
int GetPlotHeight() const
Get the height of the plot.
Definition mathplot.h:4372
int GetLeftYAxesWidth(mpOptional_int yAxisID=std::nullopt)
Calculate width of all axes to the left of this axis.
void SetMarginTop(const int top)
Set the top margin.
Definition mathplot.h:4273
std::unordered_map< int, mpRange< double > > GetAllBoundY()
Returns the bounds for all Y-axes.
Definition mathplot.h:3782
mpRange< double > GetVisibleRangeX()
Get the visible range for X axis, i.e.
Definition mathplot.h:3762
void ZoomOutY(mpOptional_int yAxisID=std::nullopt)
Zoom out current view along Y around center and refresh display.
virtual void DesiredBoundsHaveChanged()
To be notified of displayed bounds changes (after user zoom etc), override this callback in your deri...
Definition mathplot.h:4813
unsigned int CountAllLayers() const
Counts the number of plot layers, whether or not they have a bounding box.
Definition mathplot.h:4067
double GetPosX(void) const
Get current view's X position.
Definition mathplot.h:3820
int m_scrY
Current view's Y dimension.
Definition mathplot.h:4757
void SetExtraMargin(const int extra)
Set the extra margin.
Definition mathplot.h:4347
bool m_cacheDirty
Indicate that the cached buffer m_buff_bmp need to be re-created.
Definition mathplot.h:4775
int GetMarginRight(const bool minusExtra=false) const
Get the right margin.
Definition mathplot.h:4298
void FitX(void)
Similar to Fit() but only fit in X.
mpOptional_int m_mouseYAxisID
Indicate which ID of Y-axis the mouse was on during zoom/pan.
Definition mathplot.h:4785
bool m_fullscreen
Boolean value indicating that we are in fullscreen mode (default false)
Definition mathplot.h:4743
wxPoint GetMousePosition() const
Returns current mouse position in window.
Definition mathplot.h:4589
bool GetMPScrollbars() const
Get scrollbars status.
Definition mathplot.h:4168
void SetMagnetize(const bool mag)
Enable or disable mouse-position magnet lines (cross-hairs) in the plot area.
Definition mathplot.h:4562
void Fit() override
Set view to fit global bounding box of all plot layers and refresh display with UpdateAll().
wxCoord y2p(const double y, const int yAxisID=0)
Converts graph (floating point) coordinates into mpWindow (screen) pixel coordinates,...
Definition mathplot.h:3952
mpRect m_plotBoundariesMargin
The size of the plot with the margins. Calculated.
Definition mathplot.h:4768
int m_extraMargin
Extra margin around the plot. Default 8.
Definition mathplot.h:4763
int GetMarginRightOuter() const
Get the right outer margin, exluding Y-axis.
Definition mathplot.h:4307
bool ShouldDrawYAxis(const mpScaleY &yAxis)
void UpdateMargins()
Update margins if e.g.
Definition mathplot.h:4267
void UnSetOnDeleteLayer()
Remove the 'delete layer event' callback.
Definition mathplot.h:4483
int GetMarginLeftOuter() const
Get the left outer margin, exluding Y-axis.
Definition mathplot.h:4360
void FitY(int yAxisID)
Similar to Fit() but only fit in Y and only one Y-axis, specified by ID.
mpInfoLegend * m_InfoLegend
Pointer to the optional info legend layer.
Definition mathplot.h:4790
void DoScrollCalc(const int position, const int orientation)
Update scrolling state from a scrollbar position/orientation pair.
virtual bool UpdateBBox()
Set bounding box 'm_bound' to contain all visible plots of this mpWindow.
mpInfoCoords * m_InfoCoords
Pointer to the optional info coords layer.
Definition mathplot.h:4789
mpFXYVector * GetXYSeries(unsigned int n, const wxString &name=_T("Serie "), bool create=true)
virtual void OnScrollTop(wxScrollWinEvent &event)
Scroll to top.
wxString m_wildcard
For loadfile() function when we use wxFileDialog.
Definition mathplot.h:4798
int m_scrX
Current view's X dimension in DC units, including all scales, margins.
Definition mathplot.h:4756
void SetMarginLeft(const int left)
Set the left margin.
Definition mathplot.h:4330
double p2y(const wxCoord pixelCoordY, const int yAxisID=0)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition mathplot.h:3933
int m_last_ly
Last logical Y origin, used for double buffering.
Definition mathplot.h:4772
mpScaleX * GetLayerXAxis() const
Create a wxColour id is the number of the colour : blue, red, green, ...
Definition mathplot.h:5365
wxIndexColour(const unsigned int id)
Constructor.
Definition mathplot.h:5371
@ mpID_LOAD_FILE
Load a file.
Definition mathplot.h:627
@ mpID_FIT
Fit view to match bounding box of all layers.
Definition mathplot.h:616
@ mpID_LOCKASPECT
Lock x/y scaling aspect.
Definition mathplot.h:620
@ mpID_FULLSCREEN
Toggle fullscreen only if parent is a frame windows.
Definition mathplot.h:629
@ mpID_ZOOM_IN
Zoom into view at clickposition / window center.
Definition mathplot.h:617
@ mpID_TOGGLE_GRID
Show/Hide grids.
Definition mathplot.h:621
@ mpID_CENTER
Center view on click position.
Definition mathplot.h:619
@ mpID_SCREENSHOT
Copy a screen shot to the clipboard.
Definition mathplot.h:623
@ mpID_TOGGLE_COORD
Show/Hide info coord.
Definition mathplot.h:622
@ mpID_HELP_MOUSE
Shows information about the mouse commands.
Definition mathplot.h:628
@ mpID_ZOOM_OUT
Zoom out.
Definition mathplot.h:618
std::map< int, mpAxisData > mpAxisList
Define the type for the list of axis.
Definition mathplot.h:3387
enum __XAxis_Align_Type mpXAxis_Align
Alignment for X axis.
__mp_Style_Type
Style for the Legend layer.
Definition mathplot.h:678
@ mpLegendSquare
Show legend items with small square with the same color of referred mpLayer.
Definition mathplot.h:680
@ mpLegendSymbol
Show legend items with symbol used with the referred mpLayer.
Definition mathplot.h:681
@ mpLegendLine
Show legend items with line with the same pen of referred mpLayer.
Definition mathplot.h:679
enum __Chart_Type mpChartType
sub_type values for mpLAYER_CHART
__Chart_Type
sub_type values for mpLAYER_CHART
Definition mathplot.h:748
@ mpcAllType
sub type for all layers who are chart.
Definition mathplot.h:752
@ mpcBarChart
sub type for mpBarChart
Definition mathplot.h:750
@ mpcPieChart
sub type for mpPieChart
Definition mathplot.h:751
@ mpcChartNone
sub type not defined (should be never used)
Definition mathplot.h:749
__mp_Location_Type
Location for the Info layer.
Definition mathplot.h:634
@ mpMarginBottomCenter
Align the info in margin center-bottom.
Definition mathplot.h:641
@ mpMarginTopLeft
Align the info in margin top-left.
Definition mathplot.h:636
@ mpMarginBottomLeft
Align the info in margin bottom-left.
Definition mathplot.h:640
@ mpMarginTopCenter
Align the info in margin center-top.
Definition mathplot.h:637
@ mpMarginBottomRight
Align the info in margin bottom-right.
Definition mathplot.h:642
@ mpMarginRightCenter
Align the info in margin center-right.
Definition mathplot.h:639
@ mpMarginTopRight
Align the info in margin top-right.
Definition mathplot.h:638
@ mpMarginLeftCenter
Align the info in margin center-left.
Definition mathplot.h:635
@ mpCursor
only for mpInfoCoords
Definition mathplot.h:644
@ mpMarginUser
User defined position. Can be change by mouse drag.
Definition mathplot.h:643
enum __mp_Colour mpColour
Enumeration of classic colour.
std::optional< unsigned int > mpOptional_uint
Shortcut to optional unsigned integer type.
Definition mathplot.h:106
enum __Symbol_Type mpSymbol
Displaying a symbol instead of a point in the plot function.
__mp_Layer_Type
Major type of an mpLayer (detail is in subtype)
Definition mathplot.h:792
@ mpLAYER_TEXT
Text box type layer.
Definition mathplot.h:797
@ mpLAYER_CHART
Chart type layer (bar chart)
Definition mathplot.h:800
@ mpLAYER_INFO
Info box type layer.
Definition mathplot.h:796
@ mpLAYER_BITMAP
Bitmap type layer.
Definition mathplot.h:798
@ mpLAYER_LINE
Line (horizontal or vertical) type layer.
Definition mathplot.h:799
@ mpLAYER_UNDEF
Layer type undefined; SHOULD NOT BE USED.
Definition mathplot.h:793
@ mpLAYER_AXIS
Axis type layer.
Definition mathplot.h:794
@ mpLAYER_PLOT
Plot type layer.
Definition mathplot.h:795
__Info_Type
sub_type values for mpLAYER_INFO
Definition mathplot.h:709
@ mpiLegend
sub type for mpInfoLegend layer
Definition mathplot.h:713
@ mpiInfo
sub type for mpInfoLayer layer
Definition mathplot.h:711
@ mpiNone
sub type not defined (should be never used)
Definition mathplot.h:710
@ mpiCoords
sub type for mpInfoCoords layer
Definition mathplot.h:712
__YAxis_Align_Type
Alignment for Y axis.
Definition mathplot.h:659
@ mpALIGN_LEFT
Align the y-axis towards left plot.
Definition mathplot.h:661
@ mpALIGN_BORDER_LEFT
Align the y-axis towards left border.
Definition mathplot.h:660
@ mpALIGN_RIGHT
Align the y-axis towards right plot.
Definition mathplot.h:663
@ mpALIGN_BORDER_RIGHT
Align the y-axis towards right border.
Definition mathplot.h:664
@ mpALIGN_CENTERY
Align the y-axis center plot.
Definition mathplot.h:662
__Text_Type
sub_type values for mpLAYER_TEXT
Definition mathplot.h:718
@ mptText
sub type for mpText layer
Definition mathplot.h:720
@ mptTitle
sub type for mpTitle layer
Definition mathplot.h:721
@ mptNone
sub type not defined (should be never used)
Definition mathplot.h:719
std::function< void(void *Sender, const wxString &classname, bool &cancel)> mpOnDeleteLayer
Define an event for when we delete a layer.
Definition mathplot.h:3410
__mp_Delete_Action
Action to do with the object associated to the layer when we delete it.
Definition mathplot.h:827
@ mpYesDelete
Delete the object if CanDelete is true and remove it from the layer list.
Definition mathplot.h:829
@ mpForceDelete
Delete the object regardless of the CanDelete value and remove it from the layer list.
Definition mathplot.h:830
@ mpNoDelete
Keep the object, just remove the layer from the layer list.
Definition mathplot.h:828
enum __mp_Layer_Type mpLayerType
Major type of an mpLayer (detail is in subtype)
#define DECLARE_DYNAMIC_CLASS_MATHPLOT(mp_class)
Definition for RTTI.
Definition mathplot.h:189
#define MP_Y_BORDER_SEPARATION
Default minimum separation in pixels between Y axes and the plot border.
Definition mathplot.h:164
mpAxisUpdate
Define the axis we want to update.
Definition mathplot.h:3395
__mp_Direction_Type
Direction for the Legend layer.
Definition mathplot.h:686
@ mpVertical
each visible plot is described on its own line, one above the other
Definition mathplot.h:687
@ mpHorizontal
legend components follow each other horizontally on a single line
Definition mathplot.h:688
enum __mp_Layer_ZOrder mpLayerZOrder
Z order for drawing layer Background is the deeper (bitmap layer) Then draw axis, custom layer,...
enum __mp_Style_Type mpLegendStyle
Style for the Legend layer.
#define MP_EPSILON
An epsilon for float comparison to 0.
Definition mathplot.h:174
enum __mp_Direction_Type mpLegendDirection
Direction for the Legend layer.
mpMouseButtonAction
enum for left button mouse action: box zoom or drag
Definition mathplot.h:757
@ mpMouseBoxZoom
Mouse action draw a box to zoom inside.
Definition mathplot.h:758
@ mpMouseDragZoom
Mouse action drag the plot.
Definition mathplot.h:759
std::deque< mpLayer * > mpLayerList
Define the type for the list of layers inside mpWindow.
Definition mathplot.h:3357
#define WXDLLIMPEXP_MATHPLOT
Definition uses windows dll to export function.
Definition mathplot.h:90
enum __Text_Type mpTextType
sub_type values for mpLAYER_TEXT
std::function< void(void *Sender, wxMouseEvent &event, bool &cancel)> mpOnUserMouseAction
Define an event for when we have a mouse click Use like this : your_plot->SetOnUserMouseAction([this]...
Definition mathplot.h:3418
enum __YAxis_Align_Type mpYAxis_Align
Alignment for Y axis.
#define MP_X_RAWTIME
Shortcut for MP_X_UTCTIME.
Definition mathplot.h:171
#define MP_ZOOM_AROUND_CENTER
Default value for zoom around a point (default -1 is no zoom)
Definition mathplot.h:182
enum __mp_Location_Type mpLocation
Location for the Info layer.
enum __Plot_Align_Name_Type mpPlot_Align
Plot alignment (which corner should plot be placed)
__XAxis_Align_Type
Alignment for X axis.
Definition mathplot.h:649
@ mpALIGN_BORDER_BOTTOM
Align the x-axis towards bottom border.
Definition mathplot.h:650
@ mpALIGN_TOP
Align the x-axis towards top plot.
Definition mathplot.h:653
@ mpALIGN_BORDER_TOP
Align the x-axis towards top border.
Definition mathplot.h:654
@ mpALIGN_CENTERX
Align the x-axis center plot.
Definition mathplot.h:652
@ mpALIGN_BOTTOM
Align the x-axis towards bottom plot.
Definition mathplot.h:651
mpLabelType
enum for label for grid
Definition mathplot.h:764
@ mpLabel_AUTO
Set label for axis in auto mode, automatically switch between decimal and scientific notation.
Definition mathplot.h:766
@ mpLabel_SCIENTIFIC
Set label for axis in scientific notation.
Definition mathplot.h:770
@ mpLabel_USER
Set label user defined.
Definition mathplot.h:781
@ mpLabel_DATETIME
Set label for axis in datetime mode: the value is always represented as yyyy-mm-ddThh:mm:ss.
Definition mathplot.h:779
@ mpLabel_DATE
Set label for axis in date mode: the value is always represented as yyyy-mm-dd.
Definition mathplot.h:777
@ mpLabel_HOURS
Set label for axis in hours mode: the value is always represented as hours:minutes:seconds.
Definition mathplot.h:775
@ mpLabel_TIME
Set label for axis in time mode: the value is represented as minutes:seconds.milliseconds if time is ...
Definition mathplot.h:773
@ mpLabel_DECIMAL
Set label for axis in decimal notation, with number of decimals automatically calculated based on zoo...
Definition mathplot.h:768
@ mpLabel_NONE
Set no label for axis (useful for bar)
Definition mathplot.h:783
enum __Scale_Type mpScaleType
sub_type values for mpLAYER_AXIS
__Scale_Type
sub_type values for mpLAYER_AXIS
Definition mathplot.h:739
@ mpsAllType
sub type for all layers who are scale.
Definition mathplot.h:743
@ mpsScaleY
sub type for mpScaleY
Definition mathplot.h:742
@ mpsScaleX
sub type for mpScaleX
Definition mathplot.h:741
@ mpsScaleNone
sub type not defined (should be never used)
Definition mathplot.h:740
__mp_Layer_ZOrder
Z order for drawing layer Background is the deeper (bitmap layer) Then draw axis, custom layer,...
Definition mathplot.h:809
@ mpZIndex_BACKGROUND
Bitmap type layer.
Definition mathplot.h:810
@ mpZIndex_TEXT
Text box type layer.
Definition mathplot.h:816
@ mpZIndex_END
Just the end of ZOrder.
Definition mathplot.h:817
@ mpZIndex_AXIS
Axis type layer.
Definition mathplot.h:811
@ mpZIndex_PLOT
Plot (function) type layer.
Definition mathplot.h:813
@ mpZIndex_INFO
Info box type layer.
Definition mathplot.h:815
@ mpZIndex_LINE
Line (horizontal or vertical) type layer.
Definition mathplot.h:812
@ mpZIndex_CHART
Chart type layer.
Definition mathplot.h:814
__mp_Colour
Enumeration of classic colour.
Definition mathplot.h:5348
#define MP_ISNOTNULL(x)
Nullity test. Old solution is to test according small epsilon: (fabs(x) > MP_EPSILON)
Definition mathplot.h:176
enum __Info_Type mpInfoType
sub_type values for mpLAYER_INFO
enum __mp_Delete_Action mpDeleteAction
Action to do with the object associated to the layer when we delete it.
__Plot_Align_Name_Type
Plot alignment (which corner should plot be placed)
Definition mathplot.h:669
@ mpALIGN_NW
Align the plot label towards the northwest.
Definition mathplot.h:670
@ mpALIGN_SE
Align the plot label towards the southeast.
Definition mathplot.h:672
@ mpALIGN_SW
Align the plot label towards the southwest.
Definition mathplot.h:673
@ mpALIGN_NE
Align the plot label towards the northeast.
Definition mathplot.h:671
__Symbol_Type
Displaying a symbol instead of a point in the plot function.
Definition mathplot.h:693
@ mpsDownTriangle
Draw a triangle down oriented.
Definition mathplot.h:698
@ mpsSquare
Draw a square.
Definition mathplot.h:696
@ mpsCircle
Draw a circle.
Definition mathplot.h:695
@ mpsUpTriangle
Draw a triangle up oriented.
Definition mathplot.h:697
@ mpsPlus
Draw a plus +.
Definition mathplot.h:700
@ mpsNone
No symbol is drawing.
Definition mathplot.h:694
@ mpsCross
Draw a cross X.
Definition mathplot.h:699
enum __Function_Type mpFunctionType
sub_type values for mpLAYER_PLOT and mpLAYER_LINE
std::optional< int > mpOptional_int
Shortcut to optional integer type..
Definition mathplot.h:108
__Function_Type
sub_type values for mpLAYER_PLOT and mpLAYER_LINE
Definition mathplot.h:726
@ mpfAllType
sub type for all layers who are function.
Definition mathplot.h:734
@ mpfFX
sub type for mpFX function
Definition mathplot.h:728
@ mpfLine
sub type for mpLine function
Definition mathplot.h:733
@ mpfMovable
sub type for mpMovableObject function
Definition mathplot.h:732
@ mpfFY
sub type for mpFY function
Definition mathplot.h:729
@ mpfFXYVector
sub type for mpFXYVector function
Definition mathplot.h:731
@ mpfNone
sub type not defined (should be never used)
Definition mathplot.h:727
@ mpfFXY
sub type for mpFXY function
Definition mathplot.h:730
Represents all the informations needed for plotting a layer in one direction (X or Y) This struct hol...
Definition mathplot.h:3369
double pos
Position.
Definition mathplot.h:3372
mpRange< double > desired
Desired range min and max.
Definition mathplot.h:3374
mpRange< double > lastDesired
Last desired ranged, used for check if desired has changed.
Definition mathplot.h:3375
double scale
Scale.
Definition mathplot.h:3371
mpRange< double > bound
Range min and max.
Definition mathplot.h:3373
bool operator==(const mpAxisData &other) const
Compare axis data while ignoring the axis pointer itself.
Definition mathplot.h:3379
A structure for computation of bounds in real units (not in screen pixel) X refer to X axis Y refer t...
Definition mathplot.h:445
mpFloatRect(mpWindow &w)
Construct a new mpFloatRect using it's parent mpWindow to obtain the number of Y-scales to use.
mpRange< double > x
range over x direction
Definition mathplot.h:446
mpFloatRect()=delete
Only allow constructor with mpWindow supplied.
bool IsNotSet(mpWindow &w) const
Is mpFloatRect set ?
Definition mathplot.h:515
void UpdateBoundingBoxToInclude(const double px, const double py, const size_t yAxisID=0)
Update bounding box to include this point.
Definition mathplot.h:489
std::vector< mpRange< double > > y
array of range over all y directions
Definition mathplot.h:447
bool operator==(const mpFloatRect &rect) const
Equal operator.
Definition mathplot.h:522
bool PointIsInside(const double px, const double py, const size_t yAxisID=0) const
Is point inside this bounding box?
Definition mathplot.h:466
void InitializeBoundingBox(const double px, const double py, const size_t yAxisID=0)
Initialize bounding box with an initial point.
Definition mathplot.h:506
Define a simple rectangular box X refer to X axis Y refer to Y axis.
Definition mathplot.h:561
mpFloatRectSimple(const mpRange< double > x_, const mpRange< double > y_)
Construct a simple rectangular box.
Definition mathplot.h:570
void InitializeBoundingBox(const double px, const double py)
Initialize bounding box with an initial point.
Definition mathplot.h:596
mpRange< double > y
range over y direction
Definition mathplot.h:563
bool PointIsInside(const double px, const double py) const
Is point inside this bounding box?
Definition mathplot.h:577
mpRange< double > x
range over x direction
Definition mathplot.h:562
void UpdateBoundingBoxToInclude(const double px, const double py)
Update bounding box (X and Y axis) to include this point.
Definition mathplot.h:586
Result of mpWindow::GetClosestPlot: the colour and data-space coordinates of the plot point closest t...
Definition mathplot.h:606
wxRealPoint coords
data-space (x, y) of the closest point
Definition mathplot.h:608
wxColour colour
pen colour of the matched plot layer
Definition mathplot.h:607
Represents a numeric range with minimum and maximum values.
Definition mathplot.h:270
void Update(T min_, T max_)
Update range with new min and max values if this expand the range If min_ < min then min = min_ and i...
Definition mathplot.h:362
mpRange(T value1, T value2)
Create range with the 2 values.
Definition mathplot.h:282
bool PointIsInside(T point) const
Return true if the point is inside the range (min and max included)
Definition mathplot.h:418
void Update(mpRange range)
Update range with new range values if this expand the range.
Definition mathplot.h:372
T Length(void) const
Length of the range.
Definition mathplot.h:393
bool IsSet() const
Check if this mpRange has been assigned any values.
Definition mathplot.h:342
void Update(T value)
Update range according new value: Expand the range to include the value.
Definition mathplot.h:351
mpRange()
Default constructor.
Definition mathplot.h:275
void Set(T min_, T max_)
Set min, max function.
Definition mathplot.h:304
bool operator!=(const mpRange &other) const
Compare two ranges for inequality.
Definition mathplot.h:432
bool operator==(const mpRange &other) const
Compare two ranges for equality.
Definition mathplot.h:427
T GetCenter(void) const
Center of the range.
Definition mathplot.h:399
T max
The max value of the range.
Definition mathplot.h:272
void Check(void)
Check to always have a range. If min = max then introduce the 0 to make a range.
Definition mathplot.h:381
T min
The min value of the range.
Definition mathplot.h:271
T GetMaxAbs(void) const
Max absolute value of the range.
Definition mathplot.h:405
void SetMin(T min_)
Set min function, correct max.
Definition mathplot.h:311
void ToLog(void)
Convert to log range.
Definition mathplot.h:411
void Assign(T value1, T value2)
Assign values to min and max.
Definition mathplot.h:327
void SetMax(T max_)
Set max function, correct min.
Definition mathplot.h:319
void Set(T value_)
Initialize min and max.
Definition mathplot.h:297
A rectangle structure in several (integer) flavors.
Definition mathplot.h:227
wxRect GetRect(void) const
Create standard wxWidgets rectangle defined by this object's start and end points.
Definition mathplot.h:256
Group of properties, derived from the axis step size and range, that control how scale labels are for...
Definition mathplot.h:2861