14 #ifndef MATHPLOT_H_INCLUDED 15 #define MATHPLOT_H_INCLUDED 59 #ifdef mathplot_EXPORTS 60 #define WXDLLIMPEXP_MATHPLOT WXEXPORT 61 #define WXDLLIMPEXP_DATA_MATHPLOT(type) WXEXPORT type 62 #else // not making DLL 63 #define WXDLLIMPEXP_MATHPLOT 64 #define WXDLLIMPEXP_DATA_MATHPLOT(type) type 67 #if defined(__GNUG__) && !defined(__APPLE__) && !defined(__INTEL_CLANG_COMPILER) 68 #pragma interface "mathplot.h" 73 #include <unordered_map> 79 #include <wx/scrolwin.h> 81 #include <wx/dynarray.h> 83 #include <wx/dcmemory.h> 84 #include <wx/string.h> 98 #if defined(MP_USER_INCLUDE) 99 #define header MP_USER_INCLUDE.h 101 #define str(x) xstr(x) 107 #ifdef ENABLE_MP_CONFIG 108 #include "MathPlotConfig.h" 109 #endif // ENABLE_MP_CONFIG 116 #ifdef ENABLE_MP_NAMESPACE 118 #endif // ENABLE_MP_NAMESPACE 120 #ifdef ENABLE_MP_DEBUG 125 #define DEBUG_NEW new(_NORMAL_BLOCK ,__FILE__, __LINE__) 127 #define DEBUG_NEW new 130 #endif // ENABLE_MP_DEBUG 133 #define X_BORDER_SEPARATION 40 134 #define Y_BORDER_SEPARATION 60 137 #define mpX_LOCALTIME 0x10 139 #define mpX_UTCTIME 0x20 140 #define mpX_RAWTIME mpX_UTCTIME 144 #define ISNOTNULL(x) (fabs(x) > EPSILON) 147 #define EXTRA_MARGIN 8 149 #define ZOOM_AROUND_CENTER -1 155 class WXDLLIMPEXP_MATHPLOT
mpLayer;
157 class WXDLLIMPEXP_MATHPLOT
mpLine;
160 class WXDLLIMPEXP_MATHPLOT
mpFX;
161 class WXDLLIMPEXP_MATHPLOT
mpFY;
162 class WXDLLIMPEXP_MATHPLOT
mpFXY;
165 class WXDLLIMPEXP_MATHPLOT
mpChart;
167 class WXDLLIMPEXP_MATHPLOT
mpScale;
168 class WXDLLIMPEXP_MATHPLOT
mpScaleX;
169 class WXDLLIMPEXP_MATHPLOT
mpScaleY;
173 class WXDLLIMPEXP_MATHPLOT
mpWindow;
174 class WXDLLIMPEXP_MATHPLOT
mpText;
175 class WXDLLIMPEXP_MATHPLOT
mpTitle;
182 #ifdef ENABLE_MP_CONFIG 184 #endif // ENABLE_MP_CONFIG 246 void Set(
double _min,
double _max)
253 void Assign(
double value1,
double value2)
270 return ((min != 0.0f) || (max != 0.0f));
328 return (min + max) / 2;
334 return std::max(fabs(min), fabs(max));
340 min = (min > 0) ? log10(min) : 0;
341 max = (max > 0) ? log10(max) : 0;
347 return ((point >= min) && (point <= max));
350 #if (defined(__cplusplus) && (__cplusplus > 201703L)) // C++20 or newer 351 bool operator==(
const mpRange&)
const =
default;
353 bool operator==(
const mpRange &other)
const 355 return (min == other.min) && (max == other.max);
357 bool operator!=(
const mpRange& other)
const 359 return !(*
this == other);
369 struct [[
deprecated("No more used, X and Y are now separated")]] mpFloatRect
372 std::vector<mpRange> y;
383 mpFloatRect() =
delete;
386 bool PointIsInside(
double px,
double py,
size_t yAxisID = 0)
const {
387 if (yAxisID < y.size())
389 if( (px < x.min || px > x.max) ||
390 (py < y[yAxisID].min || py > y[yAxisID].max))
403 void UpdateBoundingBoxToInclude(
double px,
double py,
size_t yAxisID = 0) {
404 assert(yAxisID < y.size());
405 if (yAxisID < y.size())
407 if (px < x.min ) x.min = px;
408 else if (px > x.max ) x.max = px;
409 if (py < y[yAxisID].min ) y[yAxisID].min = py;
410 else if (py > y[yAxisID].max ) y[yAxisID].max = py;
414 void InitializeBoundingBox(
double px,
double py,
size_t yAxisID = 0) {
415 assert(yAxisID < y.size());
416 if (yAxisID < y.size())
419 y[yAxisID].min = y[yAxisID].max = py;
423 bool IsNotSet(
mpWindow& w)
const {
const mpFloatRect def(w);
return *
this==def; }
425 #if (defined(__cplusplus) && (__cplusplus > 201703L)) // C++ > C++17 (MSVC requires <AdditionalOptions>/Zc:__cplusplus</AdditionalOptions> 426 bool operator==(
const mpFloatRect&)
const =
default;
430 bool operator==(
const mpFloatRect& rect)
const 432 auto Same = [](
double a,
double b) {
433 return std::fabs(a - b) < EPSILON;
437 if (!Same(x.min, rect.x.min) || !Same(x.max, rect.x.max))
443 if (y.size() != rect.y.size())
449 for (
size_t i = 0; i < y.size(); ++i)
451 if (!Same(y[i].min, rect.y[i].min) ||
452 !Same(y[i].max, rect.y[i].max) )
485 void UpdateBoundingBoxToInclude(
double px,
double py)
495 void InitializeBoundingBox(
double px,
double py)
515 #ifdef ENABLE_MP_CONFIG 517 #endif // ENABLE_MP_CONFIG 532 mpMarginBottomCenter,
541 mpALIGN_BORDER_BOTTOM = 10,
551 mpALIGN_BORDER_LEFT = 20,
582 typedef enum __Symbol_Type
614 typedef enum __Function_Type
626 typedef enum __Scale_Type
634 typedef enum __Chart_Type
642 enum mpMouseButtonAction
727 class WXDLLIMPEXP_MATHPLOT
mpLayer:
public wxObject
730 mpLayer(mpLayerType layerType);
778 virtual bool IsLayerType(mpLayerType typeOfInterest,
int *subtype)
780 *subtype = m_subtype;
781 return (m_type == typeOfInterest);
896 m_fontcolour = colour;
927 if (brush == wxNullBrush)
928 m_brush = *wxTRANSPARENT_BRUSH;
958 m_drawOutsideMargins = drawModeOutside;
965 return m_drawOutsideMargins;
972 wxBitmap GetColourSquare(
int side = 16);
1020 m_CanDelete = canDelete;
1057 void UpdateContext(wxDC &dc)
const;
1063 virtual void DoPlot(wxDC &dc,
mpWindow &w) = 0;
1080 void CheckLog(
double *x,
double *y,
int yAxisID);
1086 wxDECLARE_DYNAMIC_CLASS(
mpLayer);
1108 mpInfoLayer(wxRect rect,
const wxBrush &brush = *wxTRANSPARENT_BRUSH, mpLocation location = mpMarginNone);
1115 virtual void SetVisible(
bool show);
1121 virtual void UpdateInfo(
mpWindow &w, wxEvent &event);
1133 virtual void ErasePlot(wxDC &dc,
mpWindow &w);
1138 virtual bool Inside(
const wxPoint &point);
1142 virtual void Move(wxPoint delta);
1145 virtual void UpdateReference();
1151 return m_dim.GetPosition();
1158 return m_dim.GetSize();
1172 m_location = location;
1194 virtual void DoPlot(wxDC &dc,
mpWindow &w);
1198 void SetInfoRectangle(
mpWindow &w,
int width = 0,
int height = 0);
1220 mpInfoCoords(wxRect rect,
const wxBrush &brush = *wxTRANSPARENT_BRUSH, mpLocation location = mpMarginNone);
1231 virtual void UpdateInfo(
mpWindow &w, wxEvent &event);
1233 virtual void ErasePlot(wxDC &dc,
mpWindow &w);
1240 m_timeConv = time_conv;
1247 m_series_coord = show;
1254 return m_series_coord;
1262 virtual wxString GetInfoCoordsText(
mpWindow &w,
double xVal, std::unordered_map<int, double> yValList);
1274 unsigned int m_timeConv;
1277 bool m_series_coord;
1284 virtual void DoPlot(wxDC &dc,
mpWindow &w);
1304 mpInfoLegend(wxRect rect,
const wxBrush &brush = *wxWHITE_BRUSH, mpLocation location = mpMarginNone);
1314 m_needs_update =
true;
1317 mpLegendStyle GetItemMode()
const 1326 m_item_direction = mode;
1327 m_needs_update =
true;
1330 mpLegendDirection GetItemDirection()
const 1332 return m_item_direction;
1335 void SetNeedUpdate()
1337 m_needs_update =
true;
1341 int GetPointed(
mpWindow &w, wxPoint eventPoint);
1344 mpLegendStyle m_item_mode;
1345 mpLegendDirection m_item_direction;
1351 virtual void DoPlot(wxDC &dc,
mpWindow &w);
1357 unsigned int layerIdx;
1361 std::vector<LegendDetail> m_LegendDetailList;
1362 bool m_needs_update;
1373 void UpdateBitmap(wxDC &dc,
mpWindow &w);
1394 mpFunction(mpLayerType layerType =
mpLAYER_PLOT,
const wxString &name = wxEmptyString,
unsigned int yAxisID = 0);
1401 m_continuous = continuity;
1409 return m_continuous;
1444 m_symbolSize = size;
1445 m_symbolSize2 = size / 2;
1452 return m_symbolSize;
1458 virtual bool DrawSymbol(wxDC &dc, wxCoord x, wxCoord y);
1473 m_yAxisID = yAxisID;
1492 mpLine(
double value,
const wxPen &pen = *wxGREEN_PEN);
1520 return m_IsHorizontal;
1525 bool m_IsHorizontal;
1527 wxDECLARE_DYNAMIC_CLASS(
mpLine);
1535 mpHorizontalLine(
double yvalue,
const wxPen &pen = *wxGREEN_PEN,
unsigned int yAxisID = 0);
1547 virtual void DoPlot(wxDC &dc,
mpWindow &w);
1569 virtual void DoPlot(wxDC &dc,
mpWindow &w);
1595 mpFX(
const wxString &name = wxEmptyString,
int flags = mpALIGN_RIGHT,
unsigned int yAxisID = 0);
1602 virtual double GetY(
double x) = 0;
1608 double DoGetY(
double x);
1614 void DefineDoGetY(
void);
1619 double (
mpFX::*pDoGetY)(
double x);
1625 virtual void DoPlot(wxDC &dc,
mpWindow &w);
1630 double NormalDoGetY(
double x);
1631 double LogDoGetY(
double x);
1633 wxDECLARE_DYNAMIC_CLASS(
mpFX);
1648 mpFY(
const wxString &name = wxEmptyString,
int flags = mpALIGN_TOP,
unsigned int yAxisID = 0);
1655 virtual double GetX(
double y) = 0;
1661 double DoGetX(
double y);
1667 void DefineDoGetX(
void);
1672 double (
mpFY::*pDoGetX)(
double y);
1678 virtual void DoPlot(wxDC &dc,
mpWindow &w);
1683 double NormalDoGetX(
double y);
1684 double LogDoGetX(
double y);
1686 wxDECLARE_DYNAMIC_CLASS(
mpFY);
1704 mpFXY(
const wxString &name = wxEmptyString,
int flags = mpALIGN_NE,
bool viewAsBar =
false,
unsigned int yAxisID = 0);
1709 virtual void Rewind() = 0;
1733 virtual bool GetNextXY(
double *x,
double *y) = 0;
1738 bool DoGetNextXY(
double *x,
double *y);
1743 void SetViewMode(
bool asBar);
1764 wxCoord maxDrawX, minDrawX, maxDrawY, minDrawY;
1767 double m_deltaX, m_deltaY;
1773 bool m_ViewAsBar =
false;
1779 virtual void DoPlot(wxDC &dc,
mpWindow &w);
1785 void UpdateViewBoundary(wxCoord xnew, wxCoord ynew);
1787 wxDECLARE_DYNAMIC_CLASS(
mpFXY);
1819 mpFXYVector(
const wxString &name = wxEmptyString,
int flags = mpALIGN_NE,
bool viewAsBar =
false,
unsigned int yAxisID = 0);
1832 void SetData(
const std::vector<double> &xs,
const std::vector<double> &ys);
1855 bool AddData(
const double x,
const double y,
bool updatePlot);
1864 m_reserveXY = reserve;
1865 m_xs.reserve(m_reserveXY);
1866 m_ys.reserve(m_reserveXY);
1891 double m_minX, m_maxX, m_minY, m_maxY, m_lastX, m_lastY;
1906 virtual bool GetNextXY(
double *x,
double *y);
1910 void DrawAddedPoint(
double x,
double y);
1919 return m_minX - (m_deltaX / 2);
1941 return m_maxX + (m_deltaX / 2);
1959 void First_Point(
double x,
double y);
1963 void Check_Limit(
double val,
double *min,
double *max,
double *last,
double *delta);
1982 mpProfile(
const wxString &name = wxEmptyString,
int flags = mpALIGN_TOP);
1989 virtual double GetY(
double x) = 0;
1997 virtual void DoPlot(wxDC &dc,
mpWindow &w);
2011 mpChart(
const wxString &name = wxEmptyString);
2021 void SetChartValues(
const std::vector<double> &data);
2025 void SetChartLabels(
const std::vector<std::string> &labelArray);
2031 void AddData(
const double &data,
const std::string &label);
2036 virtual void Clear();
2040 return (values.size() > 0);
2044 std::vector<double> values;
2045 std::vector<std::string> labels;
2048 double m_total_value;
2050 wxDECLARE_DYNAMIC_CLASS(
mpChart);
2057 #define mpBAR_NONE 0 2058 #define mpBAR_AXIS_H 1 2059 #define mpBAR_AXIS_V 2 2060 #define mpBAR_INSIDE 3 2069 mpBarChart(
const wxString &name = wxEmptyString,
double width = 0.5);
2077 void SetBarColour(
const wxColour &colour);
2079 void SetColumnWidth(
const double colWidth)
2085 void SetBarLabelPosition(
int position);
2090 virtual double GetMinX();
2095 virtual double GetMaxX();
2100 virtual double GetMinY();
2105 virtual double GetMaxY();
2110 wxColour m_barColour;
2112 double m_labelAngle;
2118 virtual void DoPlot(wxDC &dc,
mpWindow &w);
2130 mpPieChart(
const wxString &name = wxEmptyString,
double radius = 20);
2157 void SetPieColours(
const std::vector<wxColour> &colourArray);
2164 return m_center.x - m_radius;
2172 return m_center.x + m_radius;
2180 return m_center.y - m_radius;
2188 return m_center.y + m_radius;
2195 std::vector<wxColour> colours;
2201 virtual void DoPlot(wxDC &dc,
mpWindow &w);
2203 const wxColour& GetColour(
unsigned int id);
2287 m_labelFormat = format;
2288 if (updateLabelMode)
2304 m_timeConv = time_conv;
2311 return m_labelFormat;
2335 m_auto = automaticScalingIsEnabled;
2346 void SetMinScale(
double min)
2351 double GetMinScale()
const 2356 void SetMaxScale(
double max)
2361 double GetMaxScale()
const 2366 void SetScale(
double min,
double max)
2372 void GetScale(
double *min,
double *max)
const 2400 virtual void SetLogAxis(
bool log)
2406 static const wxCoord kTickSize = 4;
2407 static const wxCoord kAxisExtraSpace = 6;
2420 virtual int GetOrigin(
mpWindow &w) = 0;
2428 double GetStep(
double scale,
int minLabelSpacing);
2429 virtual void DrawScaleName(wxDC &dc,
mpWindow &w,
int origin,
int labelSize) = 0;
2437 wxString FormatLabelValue(
double value,
double maxAxisValue,
double step);
2443 wxString FormatLogValue(
double n);
2452 int GetLabelWidth(
double value, wxDC &dc,
double maxAxisValue,
double step);
2458 bool UseScientific(
double maxAxisValue);
2465 int GetSignificantDigits(
double step,
double maxAxisValue);
2471 int GetDecimalDigits(
double step);
2473 wxDECLARE_DYNAMIC_CLASS(
mpScale);
2491 mpScale(name, flags, grids, type)
2493 m_subtype = mpsScaleX;
2498 return ((GetAlign() == mpALIGN_BORDER_TOP) || (GetAlign() == mpALIGN_TOP));
2503 return ((GetAlign() == mpALIGN_BORDER_BOTTOM) || (GetAlign() == mpALIGN_BOTTOM));
2510 virtual void DoPlot(wxDC &dc,
mpWindow &w);
2512 virtual int GetOrigin(
mpWindow &w);
2513 virtual void DrawScaleName(wxDC &dc,
mpWindow &w,
int origin,
int labelSize);
2531 mpScaleY(
const wxString &name = _T(
"Y"),
int flags = mpALIGN_CENTERY,
bool grids =
false, std::optional<unsigned int> yAxisID = std::nullopt,
mpLabelType labelType =
mpLabel_AUTO) :
2532 mpScale(name, flags, grids, labelType, yAxisID)
2534 m_subtype = mpsScaleY;
2535 m_axisWidth = Y_BORDER_SEPARATION;
2550 return ((GetAlign() == mpALIGN_BORDER_LEFT) || (GetAlign() == mpALIGN_LEFT));
2555 return ((GetAlign() == mpALIGN_BORDER_RIGHT) || (GetAlign() == mpALIGN_RIGHT));
2558 bool IsInside(wxCoord xPixel)
2560 if ( (IsLeftAxis() || IsRightAxis()) && (xPixel >= m_xPos) && (xPixel <= (m_xPos + m_axisWidth)) )
2573 virtual void DoPlot(wxDC &dc,
mpWindow &w);
2575 virtual int GetOrigin(
mpWindow &w);
2576 virtual void DrawScaleName(wxDC &dc,
mpWindow &w,
int origin,
int labelSize);
2589 #define mpMOUSEMODE_DRAG 0 2591 #define mpMOUSEMODE_ZOOMBOX 1 2617 bool operator==(
const mpAxisData& other)
const 2619 return (scale == other.
scale) && (pos == other.
pos) &&
2648 typedef std::function<void(void *Sender, const wxString &classname, bool &cancel)>
mpOnDeleteLayer;
2668 m_rightClick =
false;
2669 m_IsWasDrawn =
false;
2675 void UpdateBox(wxCoord left, wxCoord top, wxCoord width, wxCoord height)
2677 m_domain = wxRect(left, top, width, height);
2678 m_plot_size = wxRect(left, top, width + left, height + top);
2680 void UpdateBox(
const wxRect &size)
2683 m_plot_size = wxRect(size.GetLeft(), size.GetTop(),
2684 size.GetWidth() + size.GetLeft(), size.GetHeight() + size.GetTop());
2686 void Plot(wxClientDC &dc,
const wxPoint &mousePos);
2687 void ClearPlot(wxClientDC &dc);
2688 void UpdatePlot(wxClientDC &dc,
const wxPoint &mousePos);
2689 void SaveDrawState(
void)
2691 m_IsWasDrawn = m_IsDrawn;
2696 void SetRightClick(
void)
2698 m_rightClick =
true;
2704 wxPoint m_mousePosition;
2708 void DrawCross(wxClientDC &dc)
const;
2740 mpWindow(wxWindow *parent, wxWindowID
id = wxID_ANY,
const wxPoint &pos = wxDefaultPosition,
const wxSize &size = wxDefaultSize,
2761 bool AddLayer(
mpLayer *layer,
bool refreshDisplay =
true,
bool refreshConfig =
true);
2775 bool DelLayer(
mpLayer *layer, mpDeleteAction alsoDeleteObject,
bool refreshDisplay =
true,
bool refreshConfig =
true);
2782 void DelAllLayers(mpDeleteAction alsoDeleteObject,
bool refreshDisplay =
true);
2790 void DelAllPlot(mpDeleteAction alsoDeleteObject, mpFunctionType func = mpfAllType,
bool refreshDisplay =
true);
2798 void DelAllYAxisAfterID(mpDeleteAction alsoDeleteObject,
int yAxisID = 0,
bool refreshDisplay =
true);
2805 mpLayer* GetLayer(
int position);
2811 int GetLayerPosition(
mpLayer* layer);
2819 mpLayer* GetLayersType(
int position, mpLayerType type);
2826 mpLayer* GetLayerPlot(
int position, mpFunctionType func = mpfAllType);
2830 mpLayer* GetLayerAxis(
int position, mpScaleType scale = mpsAllType);
2836 mpFXYVector* GetXYSeries(
unsigned int n,
const wxString &name = _T(
"Serie "),
bool create =
true);
2841 mpLayer* GetClosestPlot(wxCoord ix, wxCoord iy,
double *xnear,
double *ynear);
2847 mpLayer* GetLayerByName(
const wxString &name);
2853 mpLayer* GetLayerByClassName(
const wxString &name);
2858 void RefreshLegend(
void);
2864 bool IsYAxisUsed(
int yAxisID);
2874 mpScaleY* GetLayerYAxis(
int yAxisID);
2881 if (ISNOTNULL(scaleX))
2883 m_AxisDataX.scale = scaleX;
2884 UpdateDesiredBoundingBox(uXAxis);
2895 return m_AxisDataX.scale;
2904 assert(m_AxisDataYList.count(yAxisID) != 0);
2905 if (ISNOTNULL(scaleY))
2907 m_AxisDataYList[yAxisID].scale = scaleY;
2908 UpdateDesiredBoundingBox(uYAxis);
2920 assert(m_AxisDataYList.count(yAxisID) != 0);
2921 return m_AxisDataYList[yAxisID].scale;
2924 [[
deprecated(
"Incomplete, use UpdateBBox instead")]]
2932 return m_AxisDataX.bound;
2938 return m_AxisDataX.desired;
2946 assert(m_AxisDataYList.count(yAxisID) != 0);
2947 return m_AxisDataYList[yAxisID].bound;
2955 assert(m_AxisDataYList.count(yAxisID) != 0);
2956 return m_AxisDataYList[yAxisID].desired;
2965 std::unordered_map<int, mpRange> yRange;
2966 for (
auto& [yID, yData] : m_AxisDataYList)
2968 yRange[yID] = yData.bound;
2979 std::unordered_map<int, mpRange> yRange;
2980 for (
auto& [yID, yData] : m_AxisDataYList)
2982 yRange[yID] = yData.desired;
2992 m_AxisDataX.pos = posX;
2993 UpdateDesiredBoundingBox(uXAxis);
3003 return m_AxisDataX.pos;
3010 void SetPosY(std::unordered_map<int, double>& posYList)
3012 for (
auto& [yID, yData] : m_AxisDataYList)
3014 yData.pos = posYList[yID];
3016 UpdateDesiredBoundingBox(uYAxis);
3027 assert(m_AxisDataYList.count(yAxisID) != 0);
3028 return m_AxisDataYList[yAxisID].pos;
3036 return (
int)m_AxisDataYList.size();
3044 return m_AxisDataYList;
3052 return std::map<int, mpAxisData>(m_AxisDataYList.begin(), m_AxisDataYList.end());
3064 m_plotWidth = m_scrX - (m_margin.left + m_margin.right);
3065 m_plotHeight = m_scrY - (m_margin.top + m_margin.bottom);
3067 m_plotBoundaries.endPx = m_scrX;
3068 m_plotBoundariesMargin.endPx = m_scrX - m_margin.right;
3069 m_plotBoundaries.endPy = m_scrY;
3070 m_plotBoundariesMargin.endPy = m_scrY - m_margin.bottom;
3072 m_PlotArea = wxRect(m_margin.left - m_extraMargin, m_margin.top - m_extraMargin,
3073 m_plotWidth + 2*m_extraMargin, m_plotHeight + 2*m_extraMargin);
3075 m_magnet.UpdateBox(m_PlotArea);
3105 void SetPos(
const double posX, std::unordered_map<int, double>& posYList)
3107 m_AxisDataX.pos = posX;
3114 inline double p2x(
const wxCoord pixelCoordX)
const 3116 return m_AxisDataX.pos + (pixelCoordX / m_AxisDataX.scale);
3122 inline double p2y(
const wxCoord pixelCoordY,
int yAxisID = 0)
3124 assert(m_AxisDataYList.count(yAxisID) != 0);
3125 if (m_AxisDataYList.count(yAxisID) == 0)
3127 return m_AxisDataYList[yAxisID].pos - (pixelCoordY / m_AxisDataYList[yAxisID].scale);
3133 inline wxCoord
x2p(
const double x)
const 3135 return (wxCoord)((x - m_AxisDataX.pos) * m_AxisDataX.scale);
3141 inline wxCoord
y2p(
const double y,
int yAxisID = 0)
3143 assert(m_AxisDataYList.count(yAxisID) != 0);
3144 if (m_AxisDataYList.count(yAxisID) == 0)
3146 return (wxCoord)((m_AxisDataYList[yAxisID].pos - y) * m_AxisDataYList[yAxisID].scale);
3153 m_enableDoubleBuffer = enabled;
3160 m_enableMouseNavigation = enabled;
3168 void LockAspect(
bool enable =
true);
3176 return m_lockaspect;
3185 return m_repainting;
3200 void Fit(
const mpRange &rangeX, std::unordered_map<int, mpRange> rangeY, wxCoord *printSizeX = NULL, wxCoord *printSizeY = NULL);
3211 void FitY(
int yAxisID);
3217 void ZoomIn(
const wxPoint ¢erPoint = wxDefaultPosition);
3223 void ZoomOut(
const wxPoint ¢erPoint = wxDefaultPosition);
3233 void ZoomInY(std::optional<int> yAxisID = std::nullopt);
3237 void ZoomOutY(std::optional<int> yAxisID = std::nullopt);
3240 void ZoomRect(wxPoint p0, wxPoint p1);
3250 unsigned int CountLayers();
3256 return (
unsigned int)m_layers.size();
3262 unsigned int CountLayersType(mpLayerType type);
3263 unsigned int CountLayersFXYPlot();
3278 if (update & uXAxis)
3280 m_AxisDataX.desired.Set(m_AxisDataX.pos + (m_margin.left / m_AxisDataX.scale),
3281 m_AxisDataX.pos + ((m_margin.left + m_plotWidth) / m_AxisDataX.scale));
3285 if (update & uYAxis)
3287 for (
auto& [yID, yData] : m_AxisDataYList)
3289 yData.desired.Set(yData.pos - ((m_margin.top + m_plotHeight) / yData.scale),
3290 yData.pos - (m_margin.top / yData.scale));
3302 assert(m_AxisDataYList.count(yAxisID) != 0);
3304 return mpFloatRectSimple(m_AxisDataX.desired, m_AxisDataYList[yAxisID].desired);
3314 return m_AxisDataX.desired.min;
3323 return m_AxisDataX.desired.max;
3333 assert(m_AxisDataYList.count(yAxisID) != 0);
3334 return m_AxisDataYList[yAxisID].desired.min;
3344 assert(m_AxisDataYList.count(yAxisID) != 0);
3345 return m_AxisDataYList[yAxisID].desired.max;
3351 if (m_AxisDataYList.count(yAxisID) == 0)
3353 *boundX = m_AxisDataX.bound;
3354 *boundY = m_AxisDataYList[yAxisID].bound;
3359 bool PointIsInsideBound(
double px,
double py,
int yAxisID)
3361 if (m_AxisDataYList.count(yAxisID) == 0)
3364 return m_AxisDataX.bound.
PointIsInside(px) && GetBoundY(yAxisID).PointIsInside(py);
3373 void UpdateBoundingBoxToInclude(
double px,
double py,
int yAxisID)
3375 if (m_AxisDataYList.count(yAxisID) == 0)
3378 m_AxisDataX.bound.Update(px);
3379 m_AxisDataYList[yAxisID].bound.Update(py);
3387 void InitializeBoundingBox(
double px,
double py,
int yAxisID)
3389 if (m_AxisDataYList.count(yAxisID) == 0)
3392 m_AxisDataX.bound.Set(px, px);
3393 m_AxisDataYList[yAxisID].bound.Set(py, py);
3398 void SetMPScrollbars(
bool status);
3404 return m_enableScrollBars;
3412 bool SaveScreenshot(
const wxString &filename,
int type = wxBITMAP_TYPE_BMP, wxSize imageSize = wxDefaultSize,
bool fit =
false);
3417 wxBitmap* BitmapScreenshot(wxSize imageSize = wxDefaultSize,
bool fit =
false);
3422 void ClipboardScreenshot(wxSize imageSize = wxDefaultSize,
bool fit =
false);
3429 m_wildcard = wildcard;
3447 bool LoadFile(
const wxString &filename = wxEmptyString);
3459 void SetMargins(
int top,
int right,
int bottom,
int left);
3464 SetMargins(m_marginOuter.top, m_marginOuter.right, m_marginOuter.bottom, m_marginOuter.left);
3470 SetMargins(top, m_marginOuter.right, m_marginOuter.bottom, m_marginOuter.left);
3479 return m_margin.top - m_extraMargin;
3481 return m_margin.top;
3487 SetMargins(m_marginOuter.top, right, m_marginOuter.bottom, m_marginOuter.left);
3496 return m_margin.right - m_extraMargin;
3498 return m_margin.right;
3504 return m_marginOuter.right;
3510 SetMargins(m_marginOuter.top, m_marginOuter.right, bottom, m_marginOuter.left);
3519 return m_margin.bottom - m_extraMargin;
3521 return m_margin.bottom;
3527 SetMargins(m_marginOuter.top, m_marginOuter.right, m_marginOuter.bottom, left);
3536 return m_margin.left - m_extraMargin;
3538 return m_margin.left;
3544 m_extraMargin = extra;
3545 SetMargins(m_marginOuter.top, m_marginOuter.right, m_marginOuter.bottom, m_marginOuter.left);
3551 return m_extraMargin;
3557 return m_marginOuter.left;
3569 return m_plotHeight;
3580 bond = m_plotBoundariesMargin;
3582 bond = m_plotBoundaries;
3583 bond.startPx -= m_extraMargin;
3584 bond.endPx += m_extraMargin;
3585 bond.startPy -= m_extraMargin;
3586 bond.endPy += m_extraMargin;
3593 int GetLeftYAxesWidth(std::optional<int> yAxisID = std::nullopt);
3598 int GetRightYAxesWidth(std::optional<int> yAxisID = std::nullopt);
3603 m_drawBox = drawbox;
3615 std::optional<int> IsInsideYAxis(
const wxPoint &point);
3620 mpInfoLayer* IsInsideInfoLayer(
const wxPoint &point);
3625 void SetLayerVisible(
const wxString &name,
bool viewable);
3630 bool IsLayerVisible(
const wxString &name);
3635 bool IsLayerVisible(
const unsigned int position);
3640 void SetLayerVisible(
const unsigned int position,
bool viewable);
3646 void SetColourTheme(
const wxColour &bgColour,
const wxColour &drawColour,
const wxColour &axesColour);
3655 const wxColour& GetbgColour()
const 3660 void SetbgColour(
const wxColour &colour)
3662 m_bgColour = colour;
3672 m_OnDeleteLayer = event;
3678 m_OnDeleteLayer = NULL;
3687 m_OnUserMouseAction = userMouseEventHandler;
3693 m_OnUserMouseAction = NULL;
3703 if (m_AxisDataX.axis)
3704 return ((
mpScaleX *)m_AxisDataX.axis)->IsLogAxis();
3714 assert(m_AxisDataYList.count(yAxisID) != 0);
3715 mpScaleY* yAxis = GetLayerYAxis(yAxisID);
3717 return yAxis->IsLogAxis();
3722 void SetLogXaxis(
bool log)
3724 if (m_AxisDataX.axis)
3725 ((
mpScaleX *)m_AxisDataX.axis)->SetLogAxis(log);
3733 mpScaleY* yAxis = GetLayerYAxis(yAxisID);
3735 yAxis->SetLogAxis(log);
3748 void SetMagnetize(
bool mag)
3759 m_mouseLeftDownAction = action;
3768 return m_mouseLeftDownAction;
3771 #ifdef ENABLE_MP_CONFIG 3772 void RefreshConfigWindow();
3778 #endif // ENABLE_MP_CONFIG 3781 virtual void BindEvents(
void);
3782 virtual void OnPaint(wxPaintEvent &event);
3783 virtual void OnSize(wxSizeEvent &event);
3784 virtual void OnShowPopupMenu(wxMouseEvent &event);
3785 virtual void OnCenter(wxCommandEvent &event);
3786 virtual void OnFit(wxCommandEvent &event);
3787 virtual void OnToggleGrids(wxCommandEvent &event);
3788 virtual void OnToggleCoords(wxCommandEvent &event);
3789 virtual void OnScreenShot(wxCommandEvent &event);
3790 virtual void OnFullScreen(wxCommandEvent &event);
3791 #ifdef ENABLE_MP_CONFIG 3792 virtual void OnConfiguration(wxCommandEvent &event);
3793 #endif // ENABLE_MP_CONFIG 3794 virtual void OnLoadFile(wxCommandEvent &event);
3795 virtual void OnZoomIn(wxCommandEvent &event);
3796 virtual void OnZoomOut(wxCommandEvent &event);
3797 virtual void OnLockAspect(wxCommandEvent &event);
3798 virtual void OnMouseHelp(wxCommandEvent &event);
3799 virtual void OnMouseLeftDown(wxMouseEvent &event);
3800 virtual void OnMouseRightDown(wxMouseEvent &event);
3801 virtual void OnMouseMove(wxMouseEvent &event);
3802 virtual void OnMouseLeftRelease(wxMouseEvent &event);
3803 virtual void OnMouseWheel(wxMouseEvent &event);
3804 virtual void OnMouseLeave(wxMouseEvent &event);
3805 bool CheckUserMouseAction(wxMouseEvent &event);
3806 virtual void OnScrollThumbTrack(wxScrollWinEvent &event);
3807 virtual void OnScrollPageUp(wxScrollWinEvent &event);
3808 virtual void OnScrollPageDown(wxScrollWinEvent &event);
3809 virtual void OnScrollLineUp(wxScrollWinEvent &event);
3810 virtual void OnScrollLineDown(wxScrollWinEvent &event);
3811 virtual void OnScrollTop(wxScrollWinEvent &event);
3812 virtual void OnScrollBottom(wxScrollWinEvent &event);
3814 void DoScrollCalc(
const int position,
const int orientation);
3820 void DoZoomXCalc(
bool zoomIn, wxCoord staticXpixel = ZOOM_AROUND_CENTER);
3828 void DoZoomYCalc(
bool zoomIn, wxCoord staticYpixel = ZOOM_AROUND_CENTER, std::optional<int> = std::nullopt);
3834 void SetScaleXAndCenter(
double scaleX);
3841 void SetScaleYAndCenter(
double scaleY,
int yAxisID);
3843 void Zoom(
bool zoomIn,
const wxPoint ¢erPoint);
3847 virtual bool UpdateBBox();
3849 void InitParameters();
3851 wxTopLevelWindow* m_parent;
3886 bool m_mouseMovedAfterRightClick;
3892 bool m_enableScrollBars;
3893 int m_scrollX, m_scrollY;
3897 bool m_InInfoLegend;
3901 wxRect m_zoom_oldDim;
3910 #ifdef ENABLE_MP_CONFIG 3912 #endif // ENABLE_MP_CONFIG 3914 mpOnDeleteLayer m_OnDeleteLayer = NULL;
3915 mpOnUserMouseAction m_OnUserMouseAction = NULL;
3924 void CheckAndReportDesiredBoundsChanges();
3930 unsigned int GetNewAxisDataID(
void)
3933 for (
auto& [yID, yData] : m_AxisDataYList)
3938 newID = std::max(newID, yID + 1);
3968 m_subtype = mptText;
3972 m_location = mpMarginNone;
3979 mpText(
const wxString &name,
int offsetx,
int offsety);
3984 mpText(
const wxString &name, mpLocation marginLocation);
3997 m_location = location;
4025 mpLocation m_location;
4029 virtual void DoPlot(wxDC &dc,
mpWindow &w);
4031 wxDECLARE_DYNAMIC_CLASS(
mpText);
4047 mpText(name, mpMarginTopCenter)
4049 m_subtype = mptTitle;
4050 SetPen(*wxWHITE_PEN);
4051 SetBrush(*wxWHITE_BRUSH);
4056 wxDECLARE_DYNAMIC_CLASS(
mpTitle);
4077 mpPrintout(
mpWindow *drawWindow,
const wxString &title = _T(
"wxMathPlot print output"),
int factor = 2);
4083 void SetDrawState(
bool drawState)
4088 bool OnPrintPage(
int page);
4089 bool HasPage(
int page);
4095 stretch_factor = factor;
4124 m_reference_x(0), m_reference_y(0), m_reference_phi(0), m_shape_xs(0), m_shape_ys(0)
4127 m_subtype = mpfMovable;
4128 m_bbox_min_x = m_bbox_max_x = 0;
4129 m_bbox_min_y = m_bbox_max_y = 0;
4140 phi = m_reference_phi;
4149 m_reference_phi = phi;
4150 m_flags = mpALIGN_NE;
4156 return m_trans_shape_xs.size() != 0;
4163 return m_bbox_min_x;
4170 return m_bbox_max_x;
4177 return m_bbox_min_y;
4184 return m_bbox_max_y;
4193 virtual void DoPlot(wxDC &dc,
mpWindow &w);
4197 void TranslatePoint(
double x,
double y,
double &out_x,
double &out_y)
const;
4216 void ShapeUpdated();
4241 mpCovarianceEllipse(
double cov_00 = 1,
double cov_11 = 1,
double cov_01 = 0,
double quantiles = 2,
int segments = 32,
4243 m_cov_00(cov_00), m_cov_11(cov_11), m_cov_01(cov_01), m_quantiles(quantiles), m_segments(segments)
4245 m_continuous =
true;
4255 double GetQuantiles()
const 4268 void SetSegments(
int segments)
4270 m_segments = segments;
4273 int GetSegments()
const 4309 void RecalculateShape();
4328 m_continuous =
true;
4342 void setPoints(
const std::vector<double> &points_xs,
const std::vector<double> &points_ys,
bool closedShape =
true);
4363 m_min_x = m_max_x = 0;
4364 m_min_y = m_max_y = 0;
4366 m_bitmapChanged =
false;
4367 m_scaledBitmap_offset_x = m_scaledBitmap_offset_y = 0;
4377 void GetBitmapCopy(wxImage &outBmp)
const;
4386 void SetBitmap(
const wxImage &inBmp,
double x,
double y,
double lx,
double ly);
4421 wxBitmap m_scaledBitmap;
4422 wxCoord m_scaledBitmap_offset_x, m_scaledBitmap_offset_y;
4424 bool m_bitmapChanged;
4430 virtual void DoPlot(wxDC &dc,
mpWindow &w);
4438 typedef enum __mp_Colour
4463 this->Set(0, 0, 255);
4466 this->Set(255, 0, 0);
4469 this->Set(0, 128, 0);
4472 this->Set(128, 0, 128);
4475 this->Set(255, 255, 0);
4478 this->Set(255, 0, 255);
4481 this->Set(0, 255, 0);
4484 this->Set(0, 255, 255);
4487 this->Set(128, 128, 0);
4490 this->Set((ChannelType)((rand() * 255) / RAND_MAX), (ChannelType)((rand() * 255) / RAND_MAX),
4491 (ChannelType)((rand() * 255) / RAND_MAX));
4499 #ifdef ENABLE_MP_NAMESPACE 4502 #endif // ENABLE_MP_NAMESPACE 4504 #endif // MATHPLOT_H_INCLUDED int m_offsety
Holds offset for Y in percentage.
Definition: mathplot.h:4024
const wxString & GetLabelFormat() const
Get axis Label format (used for mpLabel_AUTO draw mode).
Definition: mathplot.h:2309
std::function< void(void *Sender, const wxString &classname, bool &cancel)> mpOnDeleteLayer
Define an event for when we delete a layer Sender the mpWindow classname the class name of the obje...
Definition: mathplot.h:2648
bool IsHorizontal(void) const
Get if is horizontal line.
Definition: mathplot.h:1518
__mp_Location_Type
Location for the Info layer.
Definition: mathplot.h:524
int GetAxisID(void)
Return the ID of the Axis.
Definition: mathplot.h:2239
void SetValue(const double value)
Set x or y.
Definition: mathplot.h:1511
mpInfoLegend * m_InfoLegend
pointer to the optional info legend layer
Definition: mathplot.h:3896
enum __YAxis_Align_Type mpYAxis_Align
Alignment for Y axis.
Show legend items with small square with the same color of referred mpLayer.
Definition: mathplot.h:571
double m_min_x
The shape of the bitmap:
Definition: mathplot.h:4428
mpRect m_marginOuter
Margin around the plot exluding Y-axis. Default 50.
Definition: mathplot.h:3871
bool m_isLog
Is the axis a log axis ?
Definition: mathplot.h:2418
void Set(double _min, double _max)
Set min, max function.
Definition: mathplot.h:246
void EnableDoubleBuffer(const bool enabled)
Enable/disable the double-buffering of the window, eliminating the flicker (default=enabled).
Definition: mathplot.h:3151
void SetBrush(const wxBrush &brush)
Set layer brush.
Definition: mathplot.h:925
bool IsLogYaxis(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:3712
Bitmap type layer.
Definition: mathplot.h:694
bool m_showName
States whether the name of the layer must be shown. Default : false.
Definition: mathplot.h:1046
Plot type layer.
Definition: mathplot.h:679
int GetScreenX(void) const
Get current view's X dimension in device context units.
Definition: mathplot.h:3084
virtual double GetMaxY()
Get inclusive top border of bounding box.
Definition: mathplot.h:4411
void SetLabelMode(mpLabelType mode, unsigned int time_conv=0x20)
Set X axis label view mode.
Definition: mathplot.h:1237
void UnSetOnDeleteLayer()
Remove the 'delete layer event' callback.
Definition: mathplot.h:3676
void SetXValue(const double xvalue)
Set x.
Definition: mathplot.h:1562
void SetYAxisID(unsigned int yAxisID)
Set the ID of the Y axis used by the function.
Definition: mathplot.h:1471
std::unordered_map< int, mpRange > GetAllDesiredY()
Returns the desired bounds for all Y-axes.
Definition: mathplot.h:2977
An arbitrary polygon, descendant of mpMovableObject.
Definition: mathplot.h:4321
void SetScaleX(const double scaleX)
Set current view's X scale and refresh display.
Definition: mathplot.h:2879
virtual double GetMinY()
Get inclusive bottom border of bounding box.
Definition: mathplot.h:803
A rectangle structure in several (integer) flavors.
Definition: mathplot.h:187
A class providing graphs functionality for a 2D plot (either continuous or a set of points)...
Definition: mathplot.h:1813
int m_clickedX
Last mouse click X position, for centering and zooming the view.
Definition: mathplot.h:3867
Show legend items with line with the same pen of referred mpLayer.
Definition: mathplot.h:570
__mp_Layer_Type
Definition: mathplot.h:675
Show/Hide grids.
Definition: mathplot.h:512
A layer that allows you to have a bitmap image printed in the mpWindow.
Definition: mathplot.h:4356
int m_axisID
Unique ID that identify this axis. Default -1 mean that axis is not used.
Definition: mathplot.h:2409
bool m_magnetize
For mouse magnetization.
Definition: mathplot.h:3903
mpLabelType
Definition: mathplot.h:648
virtual double GetMinY()
Get inclusive bottom border of bounding box.
Definition: mathplot.h:2178
wxPoint m_mouseRClick
For the right button "drag" feature.
Definition: mathplot.h:3887
virtual double GetMinX()
Get inclusive left border of bounding box.
Definition: mathplot.h:2162
mpPolygon(const wxString &layerName=_T(""))
Default constructor.
Definition: mathplot.h:4326
bool GetShowGrids() const
Get axis grids.
Definition: mathplot.h:2276
std::unordered_map< int, mpAxisData > mpAxisList
Define the type for the list of axis.
Definition: mathplot.h:2625
wxCoord y2p(const double y, int yAxisID=0)
Converts graph (floating point) coordinates into mpWindow (screen) pixel coordinates, using current mpWindow position and scale.
Definition: mathplot.h:3141
enum __Plot_Align_Name_Type mpPlot_Align
Plot alignment (which corner should plot be placed)
Layer type undefined; SHOULD NOT BE USED.
Definition: mathplot.h:677
enum __mp_Direction_Type mpLegendDirection
Direction for the Legend layer.
__mp_Delete_Action
Action to do with the object associated to the layer when we delete it.
Definition: mathplot.h:710
wxString m_name
Layer's name.
Definition: mathplot.h:1045
const mpLayerType m_type
Layer type mpLAYER_*.
Definition: mathplot.h:1038
mpRange bound
Range min and max.
Definition: mathplot.h:2612
virtual bool HasBBox() override
Check whether this layer has a bounding box.
Definition: mathplot.h:1495
Lock x/y scaling aspect.
Definition: mathplot.h:511
void SetItemMode(mpLegendStyle mode)
Set item mode (the element on the left of text representing the plot line may be line, square, or line with symbol).
Definition: mathplot.h:1311
wxString m_wildcard
For loadfile() function when we use wxFileDialog.
Definition: mathplot.h:3908
Info box type layer.
Definition: mathplot.h:699
int m_offsetx
Holds offset for X in percentage.
Definition: mathplot.h:4023
void SetLabelMode(mpLabelType mode, unsigned int time_conv=0x20)
Set axis label view mode.
Definition: mathplot.h:2301
Abstract class providing a line.
Definition: mathplot.h:1489
Abstract class providing an vertical line.
Definition: mathplot.h:1554
bool GetShowTicks() const
Get axis ticks.
Definition: mathplot.h:2262
void SetCenter(const wxPoint center)
Set the center of the pie chart.
Definition: mathplot.h:2142
mpRange lastDesired
Last desired ranged, used for check if desired has changed.
Definition: mathplot.h:2614
Canvas for plotting mpLayer implementations.
Definition: mathplot.h:2732
double GetMaxAbs(void) const
Returns max absolute value of the range.
Definition: mathplot.h:332
enum __Info_Type mpInfoType
sub_type values for mpLAYER_INFO
wxPen m_gridpen
Grid's pen. Default Colour = LIGHT_GREY, width = 1, style = wxPENSTYLE_DOT.
Definition: mathplot.h:2410
int GetNOfYAxis(void) const
Get the number of Y axis.
Definition: mathplot.h:3034
double p2y(const wxCoord pixelCoordY, int yAxisID=0)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates, using current mpWindow position and scale.
Definition: mathplot.h:3122
void SetExtraMargin(int extra)
Set the extra margin.
Definition: mathplot.h:3542
wxBitmap * m_info_bmp
The bitmap that contain the info.
Definition: mathplot.h:1185
void SetCoordinateBase(double x, double y, double phi=0)
Set the coordinate transformation (phi in radians, 0 means no rotation).
Definition: mathplot.h:4145
double Length(void) const
Length of the range.
Definition: mathplot.h:320
Chart type layer (bar chart)
Definition: mathplot.h:684
double GetPosY(int yAxisID)
Get current view's Y position.
Definition: mathplot.h:3025
const wxColour & GetFontColour() const
Get font foreground colour set for this layer.
Definition: mathplot.h:902
bool IsAspectLocked() const
Checks whether the X/Y scale aspect is locked.
Definition: mathplot.h:3174
int m_winY
Holds the mpWindow size. Used to rescale position when window is resized.
Definition: mathplot.h:1187
std::optional< int > m_mouseYAxisID
Indicate which ID of Y-axis the mouse was on during zoom/pan.
Definition: mathplot.h:3891
~mpBarChart()
Destructor.
Definition: mathplot.h:2072
double p2x(const wxCoord pixelCoordX) const
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates, using current mpWindow position and scale.
Definition: mathplot.h:3114
mpLayerZOrder m_ZIndex
The index in Z-Order to draw the layer.
Definition: mathplot.h:1053
wxPoint m_mouseLClick
Starting coords for rectangular zoom selection.
Definition: mathplot.h:3888
virtual void DesiredBoundsHaveChanged()
To be notified of displayed bounds changes (after user zoom etc), override this callback in your deri...
Definition: mathplot.h:3920
void SetPen(const wxPen &pen)
Set layer pen.
Definition: mathplot.h:910
int m_flags
Holds label alignment. Default : mpALIGN_NE.
Definition: mathplot.h:1050
virtual bool HasBBox()
Text Layer has not bounding box.
Definition: mathplot.h:3988
virtual double GetMinX()
Get inclusive left border of bounding box.
Definition: mathplot.h:787
wxPoint GetPosition() const
Returns the position of the upper left corner of the box (in pixels)
Definition: mathplot.h:1149
void SetPenSeries(const wxPen &pen)
Pen series for tractable.
Definition: mathplot.h:1266
void SetDrawOutsideMargins(bool drawModeOutside)
Set Draw mode: inside or outside margins.
Definition: mathplot.h:956
~mpPieChart()
Destructor.
Definition: mathplot.h:2133
int m_symbolSize
Size of the symbol. Default 6.
Definition: mathplot.h:1479
int GetPlotWidth() const
Get the width of the plot.
Definition: mathplot.h:3561
int m_subtype
Layer sub type, set in constructors.
Definition: mathplot.h:1040
Just the end of ZOrder.
Definition: mathplot.h:701
virtual double GetMinY()
Get inclusive bottom border of bounding box.
Definition: mathplot.h:4175
__mp_Layer_ZOrder
Z order for drawing layer Background is the deeper (bitmap layer) Then draw axis, custom layer...
Definition: mathplot.h:692
void SetMarginRight(int right)
Set the right margin.
Definition: mathplot.h:3485
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:3451
void SetContinuity(bool continuity)
Set the 'continuity' property of the layer.
Definition: mathplot.h:1399
int GetMarginLeftOuter() const
Get the left outer margin, exluding Y-axis.
Definition: mathplot.h:3555
void SetMouseLeftDownAction(mpMouseButtonAction action)
Set the type of action for the left mouse button.
Definition: mathplot.h:3757
wxMenu m_popmenu
Canvas' context menu.
Definition: mathplot.h:3858
double m_mouseScaleX
Store current X-scale, used as reference during drag zooming.
Definition: mathplot.h:3889
Abstract base class providing plot and labeling functionality for functions F:Y->X.
Definition: mathplot.h:1642
Abstract base class providing plot and labeling functionality for a locus plot F:N->X,Y.
Definition: mathplot.h:1698
enum __mp_Style_Type mpLegendStyle
Style for the Legend layer.
wxColour m_axColour
Axes Colour.
Definition: mathplot.h:3862
bool m_visible
Toggles layer visibility. Default : true.
Definition: mathplot.h:1048
mpRect m_plotBoundaries
The full size of the plot. Calculated.
Definition: mathplot.h:3876
void GetCoordinateBase(double &x, double &y, double &phi) const
Get the current coordinate transformation.
Definition: mathplot.h:4136
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:2656
void ToLog(void)
Convert to log range.
Definition: mathplot.h:338
mpRange GetDesiredBoundX(void) const
Get desired bounding box for X axis.
Definition: mathplot.h:2936
Implements the legend to be added to the plot This layer allows you to add a legend to describe the p...
Definition: mathplot.h:1293
Plot layer implementing a x-scale ruler.
Definition: mathplot.h:2482
bool m_tractable
Is the layer tractable.
Definition: mathplot.h:1049
void SetLocation(mpLocation location)
Set the location of the box.
Definition: mathplot.h:3995
virtual bool HasBBox()
Check whether this layer has a bounding box.
Definition: mathplot.h:2038
void EnableMousePanZoom(const bool enabled)
Enable/disable the feature of pan/zoom with the mouse (default=enabled)
Definition: mathplot.h:3158
bool m_drawBox
Draw box of the plot bound. Default true.
Definition: mathplot.h:3863
Plot (function) type layer.
Definition: mathplot.h:697
void UpdateDesiredBoundingBox(mpAxisUpdate update)
Draws the mpWindow on a page for printing.
Definition: mathplot.h:3275
const wxPen & GetGridPen() const
Get pen set for this axis.
Definition: mathplot.h:2325
bool m_CanDelete
Is the layer can be deleted.
Definition: mathplot.h:1052
mpSymbol GetSymbol() const
Get symbol.
Definition: mathplot.h:1435
void SetWindow(mpWindow &w)
Set the wxWindow handle.
Definition: mathplot.h:739
wxFont m_font
Layer's font.
Definition: mathplot.h:1041
bool GetCanDelete(void) const
Get CanDelete for plot.
Definition: mathplot.h:1025
Axis type layer.
Definition: mathplot.h:695
Implementing MathPlotConfigDialogBuilder.
Definition: MathPlotConfig.h:75
virtual double GetMaxY()
Get inclusive top border of bounding box.
Definition: mathplot.h:2186
bool m_auto
Flag to autosize grids. Default true.
Definition: mathplot.h:2413
Axis type layer.
Definition: mathplot.h:678
void SetCanDelete(bool canDelete)
Set CanDelete for plot.
Definition: mathplot.h:1018
virtual double GetMinX()
Get inclusive left border of bounding box.
Definition: mathplot.h:4390
bool GetMagnetize() const
Magnetize the position of the mouse in the plot ie draw a vertical and horizontal line...
Definition: mathplot.h:3743
mpInfoLayer * m_movingInfoLayer
For moving info layers over the window area.
Definition: mathplot.h:3894
mpLabelType m_labelType
Select labels mode: mpLabel_AUTO for normal labels, mpLabel_TIME for time axis in hours...
Definition: mathplot.h:2415
~mpInfoCoords()
Default destructor.
Definition: mathplot.h:1223
void ShowGrids(bool grids)
Set axis grids.
Definition: mathplot.h:2269
const wxColour & GetAxesColour() const
Get axes draw colour.
Definition: mathplot.h:3650
const wxBrush & GetBrush() const
Get brush set for this layer.
Definition: mathplot.h:935
std::deque< mpLayer * > mpLayerList
Define the type for the list of layers inside mpWindow.
Definition: mathplot.h:2596
virtual double GetMaxY()
Returns the actual maximum Y data (loaded in SetData).
Definition: mathplot.h:1951
mpRange GetBoundX(void) const
Get bounding box for X axis.
Definition: mathplot.h:2930
mpText(const wxString &name=wxEmptyString)
Default constructor.
Definition: mathplot.h:3966
wxImage m_bitmap
The internal copy of the Bitmap:
Definition: mathplot.h:4420
void SetOnUserMouseAction(const mpOnUserMouseAction &userMouseEventHandler)
On user mouse action event Allows the user to perform certain actions before normal event processing...
Definition: mathplot.h:3685
each visible plot is described on its own line, one above the other
Definition: mathplot.h:578
void SetPosX(const double posX)
Set current view's X position and refresh display.
Definition: mathplot.h:2990
mpLayerZOrder GetZIndex(void) const
Get the ZIndex of the plot.
Definition: mathplot.h:1032
Set label for axis in auto mode, automatically switch between decimal and scientific notation...
Definition: mathplot.h:651
int GetPlotHeight() const
Get the height of the plot.
Definition: mathplot.h:3567
bool IsSeriesCoord() const
Return if we show the series coordinates.
Definition: mathplot.h:1252
__Info_Type
sub_type values for mpLAYER_INFO
Definition: mathplot.h:598
size_t m_index
The internal counter for the "GetNextXY" interface.
Definition: mathplot.h:1887
virtual double GetMaxX()
Get inclusive right border of bounding box.
Definition: mathplot.h:4397
Show/Hide info coord.
Definition: mathplot.h:513
bool GetShowName() const
Get Name visibility.
Definition: mathplot.h:949
void SetCovarianceMatrix(double cov_00, double cov_01, double cov_11)
Changes the covariance matrix:
Definition: mathplot.h:4289
Printout class used by mpWindow to draw in the objects to be printed.
Definition: mathplot.h:4067
int m_last_ly
For double buffering.
Definition: mathplot.h:3881
struct deprecated("No more used, X and Y are now separated")]] mpFloatRect
A structure for computation of bounds in real units (not in screen pixel) X refer to X axis Y refer t...
Definition: mathplot.h:369
mpMagnet m_magnet
For mouse magnetization.
Definition: mathplot.h:3904
wxSize GetSize() const
Returns the size of the box (in pixels)
Definition: mathplot.h:1156
Chart type layer.
Definition: mathplot.h:698
bool m_grids
Flag to show grids. Default false.
Definition: mathplot.h:2412
Set label for axis in scientific notation.
Definition: mathplot.h:655
enum __mp_Location_Type mpLocation
Location for the Info layer.
void Check(void)
Check to always have a range. If min = max then introduce the 0 to make a range.
Definition: mathplot.h:308
wxRect m_dim
The bounding rectangle of the mpInfoLayer box (may be resized dynamically by the Plot method)...
Definition: mathplot.h:1183
Copy a screen shot to the clipboard.
Definition: mathplot.h:514
Fit view to match bounding box of all layers.
Definition: mathplot.h:507
mpLocation GetLocation() const
Returns the location of the box.
Definition: mathplot.h:4002
bool PointIsInside(double px, double py) const
Is point inside this bounding box?
Definition: mathplot.h:476
Toggle fullscreen only if parent is a frame windows.
Definition: mathplot.h:520
wxBitmap * m_buff_bmp
For double buffering.
Definition: mathplot.h:3882
Center view on click position.
Definition: mathplot.h:510
unsigned int m_step
Step to get point to be draw. Default : 1.
Definition: mathplot.h:1481
virtual ~mpFXYVector()
destrutor
Definition: mathplot.h:1823
__XAxis_Align_Type
Alignment for X axis.
Definition: mathplot.h:539
This virtual class represents objects that can be moved to an arbitrary 2D location+rotation.
Definition: mathplot.h:4118
__Text_Type
sub_type values for mpLAYER_TEXT
Definition: mathplot.h:607
mpRange desired
Desired range min and max.
Definition: mathplot.h:2613
mpAxisList m_AxisDataYList
List of axis data for the Y direction.
Definition: mathplot.h:3856
virtual int GetSize()
Return the number of points in the series.
Definition: mathplot.h:1722
std::vector< double > m_shape_xs
This contains the object points, in local coordinates (to be transformed by the current transformatio...
Definition: mathplot.h:4201
virtual bool IsLogAxis()
Logarithmic axis.
Definition: mathplot.h:2395
void SetSymbolSize(int size)
Set symbol size.
Definition: mathplot.h:1442
mpScaleX(const wxString &name=_T("X"), int flags=mpALIGN_CENTERX, bool grids=false, mpLabelType type=mpLabel_AUTO)
Full constructor.
Definition: mathplot.h:2490
Create a wxColour id is the number of the colour : blue, red, green, ...
Definition: mathplot.h:4455
int m_yAxisID
The ID of the Y axis used by the function. Equal 0 if no axis.
Definition: mathplot.h:1482
bool GetContinuity() const
Gets the 'continuity' property of the layer.
Definition: mathplot.h:1407
int m_extraMargin
Extra margin around the plot. Default 8.
Definition: mathplot.h:3872
Layer for bar chart.
Definition: mathplot.h:2065
mpFloatRectSimple GetBoundingBox(bool desired, unsigned int yAxisID=0)
Return a bounding box for an y-axis ID.
Definition: mathplot.h:3300
double m_max
Min and max axis values when autosize is false.
Definition: mathplot.h:2414
wxPen m_pen
Layer's pen. Default Colour = Black, width = 1, style = wxPENSTYLE_SOLID.
Definition: mathplot.h:1043
wxString m_content
string holding the coordinates to be drawn.
Definition: mathplot.h:1272
abstract Layer for chart (bar and pie).
Definition: mathplot.h:2007
Show legend items with symbol used with the referred mpLayer.
Definition: mathplot.h:572
Define a simple rectangular box X refer to X axis Y refer to Y axis.
Definition: mathplot.h:468
bool GetBoundingBox(mpRange *boundX, mpRange *boundY, int yAxisID)
Return the bounding box coordinates for the Y axis of ID yAxisID.
Definition: mathplot.h:3349
const wxPen & GetPen() const
Get pen set for this layer.
Definition: mathplot.h:918
void SetLabelFormat(const wxString &format, bool updateLabelMode=false)
Set axis Label format (used for mpLabel_AUTO draw mode).
Definition: mathplot.h:2285
const wxRect & GetRectangle() const
Returns the current rectangle coordinates.
Definition: mathplot.h:1163
double m_bbox_min_x
The precomputed bounding box:
Definition: mathplot.h:4211
double GetDesiredXmin() const
Returns the left-border layer coordinate that the user wants the mpWindow to show (it may be not exac...
Definition: mathplot.h:3312
Set label for axis in decimal notation, with number of decimals automatically calculated based on zoo...
Definition: mathplot.h:653
__Plot_Align_Name_Type
Plot alignment (which corner should plot be placed)
Definition: mathplot.h:559
mpSymbol m_symbol
A symbol for the plot in place of point. Default mpNone.
Definition: mathplot.h:1478
double GetDesiredYmin(int yAxisID)
Return the bottom-border layer coordinate that the user wants the mpWindow to show (it may be not exa...
Definition: mathplot.h:3331
void SetMarginBottom(int bottom)
Set the bottom margin.
Definition: mathplot.h:3508
virtual int GetSize()
Return the number of points in the series We assume that size of m_xs equals size of m_ys...
Definition: mathplot.h:1843
int m_symbolSize2
Size of the symbol div 2.
Definition: mathplot.h:1480
virtual double GetMinY()
Get inclusive bottom border of bounding box.
Definition: mathplot.h:4404
bool GetAuto() const
Is automatic scaling enabled for this axis?
Definition: mathplot.h:2341
virtual double GetMinX()
Returns the actual minimum X data (loaded in SetData).
Definition: mathplot.h:1914
int GetMarginRight(bool minusExtra=false) const
Get the right margin.
Definition: mathplot.h:3493
void SetYValue(const double yvalue)
Set y.
Definition: mathplot.h:1540
void SetReserve(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:1862
int GetReserve() const
Get memory reserved for m_xs and m_ys.
Definition: mathplot.h:1871
double GetDesiredYmax(int yAxisID)
Return the top layer-border coordinate that the user wants the mpWindow to show (it may be not exactl...
Definition: mathplot.h:3342
Text box type layer.
Definition: mathplot.h:681
mpMouseButtonAction GetMouseLeftDownAction()
Returns the type of action for the left mouse button.
Definition: mathplot.h:3766
double pos
Position.
Definition: mathplot.h:2611
void UpdateMargins()
Update margins if e.g.
Definition: mathplot.h:3462
__YAxis_Align_Type
Alignment for Y axis.
Definition: mathplot.h:549
wxRect m_PlotArea
The full size of the plot with m_extraMargin.
Definition: mathplot.h:3878
Base class to create small rectangular info boxes mpInfoLayer is the base class to create a small rec...
Definition: mathplot.h:1098
Load a file.
Definition: mathplot.h:518
virtual bool HasBBox()
Check whether this layer has a bounding box.
Definition: mathplot.h:751
void GetOffset(int *offX, int *offY) const
Get the offset.
Definition: mathplot.h:4016
wxCoord m_plotWidth
Width of the plot = m_scrX - (m_margin.left + m_margin.right)
Definition: mathplot.h:3873
virtual bool HasBBox()
mpInfoLayer has not bounding box.
Definition: mathplot.h:1125
mpLayerType GetLayerType() const
Get layer type: a Layer can be of different types: plot, lines, axis, info boxes, etc...
Definition: mathplot.h:760
Line (horizontal or vertical) type layer.
Definition: mathplot.h:696
wxBitmap * m_zoom_bmp
For zoom selection.
Definition: mathplot.h:3899
Implements an overlay box which shows the mouse coordinates in plot units.
Definition: mathplot.h:1207
std::unordered_map< int, mpRange > GetAllBoundY()
Returns the bounds for all Y-axes.
Definition: mathplot.h:2963
bool GetMPScrollbars() const
Get scrollbars status.
Definition: mathplot.h:3402
int m_scrY
Current view's Y dimension.
Definition: mathplot.h:3866
wxCoord x2p(const double x) const
Converts graph (floating point) coordinates into mpWindow (screen) pixel coordinates, using current mpWindow position and scale.
Definition: mathplot.h:3133
void SetStep(unsigned int step)
Set step for plot.
Definition: mathplot.h:1414
mpAxisData m_AxisDataX
Axis data for the X direction.
Definition: mathplot.h:3855
~mpInfoLegend()
Default destructor.
Definition: mathplot.h:1307
wxRect m_oldDim
Keep the old values of m_dim.
Definition: mathplot.h:1184
Set label for axis in date mode: the value is always represented as yyyy-mm-dd.
Definition: mathplot.h:662
wxColour m_bgColour
Background Colour.
Definition: mathplot.h:3860
bool IsLogXaxis()
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:3701
void SetScreen(const int scrX, const int scrY)
Set current view's dimensions in device context units.
Definition: mathplot.h:3060
int GetBarWidth(void) const
return the width of the bar
Definition: mathplot.h:1748
void SetOnDeleteLayer(const mpOnDeleteLayer &event)
On delete layer event Allows the user to perform certain actions before deleting the layer...
Definition: mathplot.h:3670
void SetSeriesCoord(bool show)
Set the series coordinates of the mouse position (if tractable set)
Definition: mathplot.h:1245
void SetAxisID(unsigned int yAxisID)
Set an ID to the axis.
Definition: mathplot.h:2248
virtual double GetMaxX()
Returns the actual maximum X data (loaded in SetData).
Definition: mathplot.h:1936
void SetDrawBox(bool drawbox)
Set the draw of the box around the plot.
Definition: mathplot.h:3601
bool m_enableDoubleBuffer
For double buffering. Default enabled.
Definition: mathplot.h:3883
Plot layer implementing an abstract function plot class.
Definition: mathplot.h:1389
Abstract base class providing plot and labeling functionality for functions F:X->Y.
Definition: mathplot.h:1589
wxPoint GetCenter(void) const
Get the center of the pie chart.
Definition: mathplot.h:2149
mpTitle(const wxString &name)
Definition: mathplot.h:4046
Plot layer implementing a simple title.
Definition: mathplot.h:4037
Set no label for axis (useful for bar)
Definition: mathplot.h:668
Plot layer implementing a y-scale ruler.
Definition: mathplot.h:2524
enum __mp_Layer_ZOrder mpLayerZOrder
Z order for drawing layer Background is the deeper (bitmap layer) Then draw axis, custom layer...
virtual bool HasBBox()
Check whether this layer has a bounding box.
Definition: mathplot.h:4154
bool ViewAsBar(void) const
return true if XY series is plotted with bar
Definition: mathplot.h:1756
mpLocation m_location
Location of the box in the margin. Default mpMarginNone = use coordinates.
Definition: mathplot.h:1188
virtual void SetVisible(bool show)
Sets layer visibility.
Definition: mathplot.h:983
double GetCenter(void) const
Center of the range.
Definition: mathplot.h:326
mpRect GetPlotBoundaries(bool with_margin) const
Get the boundaries of the plot.
Definition: mathplot.h:3576
double GetPosX(void) const
Get current view's X position.
Definition: mathplot.h:3001
int GetAlign() const
Get X/Y alignment.
Definition: mathplot.h:1011
bool m_drawOutsideMargins
Select if the layer should draw only inside margins or over all DC. Default : false.
Definition: mathplot.h:1047
std::vector< double > m_trans_shape_xs
The buffer for the translated & rotated points (to avoid recomputing them with each mpWindow refresh)...
Definition: mathplot.h:4206
int GetExtraMargin() const
Get the extra margin.
Definition: mathplot.h:3549
void Assign(double value1, double value2)
Assign values to min and max.
Definition: mathplot.h:253
void SetAuto(bool automaticScalingIsEnabled)
Enable/Disable automatic scaling for this axis.
Definition: mathplot.h:2333
virtual void Clear()
Clears all the data, leaving the layer empty.
Definition: mathplot.h:1714
enum __XAxis_Align_Type mpXAxis_Align
Alignment for X axis.
bool m_continuous
Specify if the layer will be plotted as a continuous line or a set of points. Default false...
Definition: mathplot.h:1477
void UnSetOnUserMouseAction()
Remove the 'user mouse action event' callback.
Definition: mathplot.h:3691
std::vector< double > m_xs
The internal copy of the set of data to draw.
Definition: mathplot.h:1879
mpRange GetBoundY(int yAxisID)
Get bounding box for Y axis of ID yAxisID.
Definition: mathplot.h:2944
~mpChart()
Destructor.
Definition: mathplot.h:2014
Abstract class providing an horizontal line.
Definition: mathplot.h:1532
Zoom into view at clickposition / window center.
Definition: mathplot.h:508
int GetMarginLeft(bool minusExtra=false) const
Get the left margin.
Definition: mathplot.h:3533
mpRange(double value1, double value2)
Create range with the 2 values.
Definition: mathplot.h:231
bool m_lockaspect
Scale aspect is locked or not.
Definition: mathplot.h:3859
int m_segments
The number of line segments that build up the ellipse.
Definition: mathplot.h:4305
double scale
Scale.
Definition: mathplot.h:2610
void Rewind()
Rewind value enumeration with mpFXY::GetNextXY.
Definition: mathplot.h:1896
Zoom out.
Definition: mathplot.h:509
Plot layer implementing an abstract scale ruler.
Definition: mathplot.h:2219
enum __mp_Layer_Type mpLayerType
Major type of an mpLayer (detail is in subtype)
void SetFont(const wxFont &font)
Set layer font.
Definition: mathplot.h:878
Class for drawing mouse magnetization Draw an horizontal and a vertical line at the mouse position...
Definition: mathplot.h:2662
mpScaleY(const wxString &name=_T("Y"), int flags=mpALIGN_CENTERY, bool grids=false, std::optional< unsigned int > yAxisID=std::nullopt, mpLabelType labelType=mpLabel_AUTO)
Full constructor.
Definition: mathplot.h:2531
void Update(mpRange range)
Update range with new range values if this expand the range.
Definition: mathplot.h:299
int m_reserveXY
Memory reserved for m_xs and m_ys.
Definition: mathplot.h:1883
__mp_Direction_Type
Direction for the Legend layer.
Definition: mathplot.h:576
mpRange GetDesiredBoundY(int yAxisID)
Get desired bounding box for Y axis of ID yAxisID.
Definition: mathplot.h:2953
void Update(double _min, double _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:289
A 2D ellipse, described by a 2x2 covariance matrix.
Definition: mathplot.h:4235
mpLabelType GetLabelMode() const
Get axis label view mode.
Definition: mathplot.h:2294
int GetMarginTop(bool minusExtra=false) const
Get the top margin.
Definition: mathplot.h:3476
double m_minX
Loaded at SetData.
Definition: mathplot.h:1891
mpInfoCoords * m_InfoCoords
pointer to the optional info coords layer
Definition: mathplot.h:3895
double GetDesiredXmax() const
Return the right-border layer coordinate that the user wants the mpWindow to show (it may be not exac...
Definition: mathplot.h:3321
Set label for axis in hours mode: the value is always represented as hours:minutes:seconds.
Definition: mathplot.h:660
Represents all the informations needed for plotting a layer in one direction (X or Y) This struct hol...
Definition: mathplot.h:2607
__mp_Style_Type
Style for the Legend layer.
Definition: mathplot.h:568
Layer for pie chart.
Definition: mathplot.h:2126
void SetFontColour(const wxColour &colour)
Set layer font foreground colour.
Definition: mathplot.h:894
Set label user defined.
Definition: mathplot.h:666
mpCovarianceEllipse(double cov_00=1, double cov_11=1, double cov_01=0, double quantiles=2, int segments=32, const wxString &layerName=_T(""))
Default constructor.
Definition: mathplot.h:4241
const wxFont & GetFont() const
Get font set for this layer.
Definition: mathplot.h:886
bool m_enableMouseNavigation
For pan/zoom with the mouse.
Definition: mathplot.h:3884
wxColour m_fontcolour
Layer's font foreground colour.
Definition: mathplot.h:1042
void SetPosY(std::unordered_map< int, double > &posYList)
Set current view's Y position and refresh display.
Definition: mathplot.h:3010
Set label for axis in time mode: the value is represented as minutes:seconds.milliseconds if time is ...
Definition: mathplot.h:658
Set label for axis in datetime mode: the value is always represented as yyyy-mm-ddThh:mm:ss.
Definition: mathplot.h:664
void GetCovarianceMatrix(double &cov_00, double &cov_01, double &cov_11) const
Returns the elements of the current covariance matrix:
Definition: mathplot.h:4280
mpRange GetScale() const
Return m_min and m_max scale as a mpRange.
Definition: mathplot.h:2387
Bitmap type layer.
Definition: mathplot.h:682
void SetLocation(mpLocation location)
Set the location of the mpInfoLayer box.
Definition: mathplot.h:1170
bool IsVisible() const
Checks whether the layer is visible or not.
Definition: mathplot.h:976
mpRange()
Default constructor.
Definition: mathplot.h:224
void ShowTicks(bool ticks)
Set axis ticks.
Definition: mathplot.h:2255
int GetLayerSubType() const
Get layer subtype: each layer type can have several flavors.
Definition: mathplot.h:768
virtual void SetTractable(bool track)
Sets layer tractability.
Definition: mathplot.h:997
bool IsSet()
Check if this mpRange has been assigned any values.
Definition: mathplot.h:268
int GetSymbolSize() const
Get symbol size.
Definition: mathplot.h:1450
unsigned int m_timeConv
Selects if time has to be converted to local time or not.
Definition: mathplot.h:2416
const wxString & GetWildcard(void) const
Get wildcard.
Definition: mathplot.h:3435
mpMovableObject()
Default constructor (sets mpMovableObject location and rotation to (0,0,0))
Definition: mathplot.h:4123
enum __mp_Delete_Action mpDeleteAction
Action to do with the object associated to the layer when we delete it.
Info box type layer.
Definition: mathplot.h:680
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:3105
int GetScreenY(void) const
Get current view's Y dimension in device context units.
Definition: mathplot.h:3095
mpAxisList GetAxisDataYList(void) const
Get the Y-axis data map.
Definition: mathplot.h:3042
virtual bool DoBeforePlot()
This is the only case where we don't need and Y axis So no need to test m_yAxisID.
Definition: mathplot.h:1575
virtual double GetMaxY()
Get inclusive top border of bounding box.
Definition: mathplot.h:811
Plot layer implementing a text string.
Definition: mathplot.h:3961
virtual bool IsLayerType(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:778
wxCoord m_plotHeight
Height of the plot = m_scrY - (m_margin.top + m_margin.bottom)
Definition: mathplot.h:3874
virtual double GetMaxY()
Get inclusive top border of bounding box.
Definition: mathplot.h:4182
bool GetDrawBox() const
Get the draw of the box around the plot.
Definition: mathplot.h:3607
bool GetDrawOutsideMargins() const
Get Draw mode: inside or outside margins.
Definition: mathplot.h:963
wxBrush m_brush
Layer's brush. Default wxTRANSPARENT_BRUSH.
Definition: mathplot.h:1044
int GetMarginRightOuter() const
Get the right outer margin, exluding Y-axis.
Definition: mathplot.h:3502
virtual double GetMaxX()
Get inclusive right border of bounding box.
Definition: mathplot.h:795
wxPoint m_reference
Holds the reference point for movements.
Definition: mathplot.h:1186
int GetMarginBottom(bool minusExtra=false) const
Get the bottom margin.
Definition: mathplot.h:3516
Shows information about the mouse commands.
Definition: mathplot.h:519
void SetLogYaxis(int yAxisID, bool log)
Set the log property (true or false) for a Y layer (Y axis) given by is ID.
Definition: mathplot.h:3731
void SetMarginTop(int top)
Set the top margin.
Definition: mathplot.h:3468
double GetScaleX(void) const
Get current view's X scale.
Definition: mathplot.h:2893
wxColour m_fgColour
Foreground Colour.
Definition: mathplot.h:3861
wxBitmap * m_Screenshot_bmp
For clipboard, save and print.
Definition: mathplot.h:3906
legend components follow each other horizontally on a single line
Definition: mathplot.h:579
void SetItemDirection(mpLegendDirection mode)
Set item direction (may be vertical or horizontal)
Definition: mathplot.h:1324
enum __Text_Type mpTextType
sub_type values for mpLAYER_TEXT
void SetQuantiles(double q)
Set how many "quantiles" to draw, that is, the confidence interval of the ellipse (see above)...
Definition: mathplot.h:4262
int GetYAxisID() const
Get the ID of the Y axis used by the function.
Definition: mathplot.h:1463
int m_clickedY
Last mouse click Y position, for centering and zooming the view.
Definition: mathplot.h:3868
Represents a numeric range with minimum and maximum values.
Definition: mathplot.h:218
void Update(double value)
Update range according new value: Expand the range to include the value.
Definition: mathplot.h:277
bool PointIsInside(double point) const
Return true if the point is inside the range (min and max included)
Definition: mathplot.h:345
double m_reference_x
The coordinates of the object (orientation "phi" is in radians).
Definition: mathplot.h:4191
double GetScaleY(int yAxisID)
Get current view's Y scale.
Definition: mathplot.h:2918
virtual double GetMaxX()
Get inclusive right border of bounding box.
Definition: mathplot.h:2170
unsigned int GetStep() const
Get step for plot.
Definition: mathplot.h:1421
virtual double GetMinX()
Get inclusive left border of bounding box.
Definition: mathplot.h:4161
Plot layer, abstract base class.
Definition: mathplot.h:727
mpRect m_plotBoundaries
The boundaries for plotting curve calculated by mpWindow.
Definition: mathplot.h:1051
double GetValue() const
Set x or y.
Definition: mathplot.h:1503
void SetOffset(int offX, int offY)
Set offset.
Definition: mathplot.h:4009
void SetFactor(int factor)
Definition: mathplot.h:4093
void SetName(const wxString &name)
Set layer name.
Definition: mathplot.h:862
mpWindow * m_win
The wxWindow handle.
Definition: mathplot.h:1039
wxString m_labelFormat
Format string used to print labels.
Definition: mathplot.h:2417
int m_scrX
Current view's X dimension in DC units, including all scales, margins.
Definition: mathplot.h:3865
std::unordered_map< int, double > m_mouseScaleYList
Store current Y-scales, used as reference during drag zooming.
Definition: mathplot.h:3890
void SetShowName(bool show)
Set Name visibility.
Definition: mathplot.h:942
const wxString & GetName() const
Get layer name.
Definition: mathplot.h:870
virtual bool DoBeforePlot()
If we need to do something before plot like reinitialize some parameters ...
Definition: mathplot.h:1069
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:4300
void SetMarginLeft(int left)
Set the left margin.
Definition: mathplot.h:3525
mpLayerList m_layers
List of attached plot layers.
Definition: mathplot.h:3854
bool m_ticks
Flag to show ticks. Default true.
Definition: mathplot.h:2411
std::map< int, mpAxisData > GetSortedAxisDataYList(void) const
Get a sorted version of the Y-axis data map.
Definition: mathplot.h:3050
mpRect m_margin
Margin around the plot including Y-axis.
Definition: mathplot.h:3870
Abstract base class providing plot and labeling functionality for functions F:Y->X.
Definition: mathplot.h:1976
mpLocation GetLocation() const
Return the location of the mpInfoLayer box.
Definition: mathplot.h:1177
void SetWildcard(const wxString &wildcard)
Set wildcard for LoadFile() function when we use wxFileDialog.
Definition: mathplot.h:3427
mpMouseButtonAction m_mouseLeftDownAction
Type of action for left mouse button.
Definition: mathplot.h:3885
mpRect m_plotBoundariesMargin
The size of the plot with the margins. Calculated.
Definition: mathplot.h:3877
bool IsTractable() const
Checks whether the layer is tractable or not.
Definition: mathplot.h:990
virtual bool HasBBox()
Check whether this layer has a bounding box.
Definition: mathplot.h:2231
virtual double GetMaxX()
Get inclusive right border of bounding box.
Definition: mathplot.h:4168
bool IsRepainting() const
Checks if we are repainting.
Definition: mathplot.h:3183
unsigned int CountAllLayers()
Counts the number of plot layers, whether or not they have a bounding box.
Definition: mathplot.h:3254
void SetGridPen(const wxPen &pen)
Set grid pen.
Definition: mathplot.h:2317
void SetSymbol(mpSymbol symbol)
Set symbol.
Definition: mathplot.h:1428
mpBitmapLayer()
Default constructor.
Definition: mathplot.h:4361
void SetScaleY(const double scaleY, int yAxisID)
Set current view's Y scale and refresh display.
Definition: mathplot.h:2902
mpAxisUpdate
Define the axis we want to update.
Definition: mathplot.h:2633
Text box type layer.
Definition: mathplot.h:700
wxMenu * GetPopupMenu()
Get reference to context menu of the plot canvas.
Definition: mathplot.h:2748
void SetAlign(int align)
Set X/Y alignment.
Definition: mathplot.h:1004
Line (horizontal or vertical) type layer.
Definition: mathplot.h:683
virtual double GetMinY()
Returns the actual minimum Y data (loaded in SetData).
Definition: mathplot.h:1929