KiCad PCB EDA Suite
mpWindow Class Reference

Canvas for plotting mpLayer implementations. More...

#include <mathplot.h>

Inheritance diagram for mpWindow:
SIM_PLOT_PANEL

Public Member Functions

 mpWindow ()
 
 mpWindow (wxWindow *parent, wxWindowID id, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long flags=0)
 
 ~mpWindow ()
 
wxMenu * GetPopupMenu ()
 Get reference to context menu of the plot canvas. More...
 
bool AddLayer (mpLayer *layer, bool refreshDisplay=true)
 Add a plot layer to the canvas. More...
 
bool DelLayer (mpLayer *layer, bool alsoDeleteObject=false, bool refreshDisplay=true)
 Remove a plot layer from the canvas. More...
 
void DelAllLayers (bool alsoDeleteObject, bool refreshDisplay=true)
 Remove all layers from the plot. More...
 
mpLayerGetLayer (int position)
 
mpLayerGetLayerByName (const wxString &name)
 
double GetXscl ()
 Get current view's X scale. More...
 
double GetScaleX (void) const
 
double GetYscl () const
 Get current view's Y scale. More...
 
double GetScaleY (void) const
 
double GetXpos () const
 Get current view's X position. More...
 
double GetPosX (void) const
 
double GetYpos () const
 Get current view's Y position. More...
 
double GetPosY (void) const
 
int GetScrX (void) const
 Get current view's X dimension in device context units. More...
 
int GetXScreen (void) const
 
int GetScrY (void) const
 Get current view's Y dimension in device context units. More...
 
int GetYScreen (void) const
 
void SetScaleX (double scaleX)
 Set current view's X scale and refresh display. More...
 
void SetScaleY (double scaleY)
 Set current view's Y scale and refresh display. More...
 
void SetPosX (double posX)
 Set current view's X position and refresh display. More...
 
void SetPosY (double posY)
 Set current view's Y position and refresh display. More...
 
void SetPos (double posX, double posY)
 Set current view's X and Y position and refresh display. More...
 
void SetScr (int scrX, int scrY)
 Set current view's dimensions in device context units. More...
 
double p2x (wxCoord pixelCoordX)
 Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates, using current mpWindow position and scale. More...
 
double p2y (wxCoord pixelCoordY)
 Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates, using current mpWindow position and scale. More...
 
wxCoord x2p (double x)
 Converts graph (floating point) coordinates into mpWindow (screen) pixel coordinates, using current mpWindow position and scale. More...
 
wxCoord y2p (double y)
 Converts graph (floating point) coordinates into mpWindow (screen) pixel coordinates, using current mpWindow position and scale. More...
 
void EnableDoubleBuffer (bool enabled)
 Enable/disable the double-buffering of the window, eliminating the flicker (default=disabled). More...
 
void EnableMousePanZoom (bool enabled)
 Enable/disable the feature of pan/zoom with the mouse (default=enabled) More...
 
void LockAspect (bool enable=TRUE)
 Enable or disable X/Y scale aspect locking for the view. More...
 
bool IsAspectLocked ()
 Checks whether the X/Y scale aspect is locked. More...
 
void Fit () override
 Set view to fit global bounding box of all plot layers and refresh display. More...
 
void Fit (double xMin, double xMax, double yMin, double yMax, wxCoord *printSizeX=NULL, wxCoord *printSizeY=NULL)
 Set view to fit a given bounding box and refresh display. More...
 
void ZoomIn (const wxPoint &centerPoint=wxDefaultPosition)
 Zoom into current view and refresh display. More...
 
void ZoomOut (const wxPoint &centerPoint=wxDefaultPosition)
 Zoom out current view and refresh display. More...
 
void ZoomInX ()
 Zoom in current view along X and refresh display. More...
 
void ZoomOutX ()
 Zoom out current view along X and refresh display. More...
 
void ZoomInY ()
 Zoom in current view along Y and refresh display. More...
 
void ZoomOutY ()
 Zoom out current view along Y and refresh display. More...
 
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) More...
 
void UpdateAll ()
 Refresh display. More...
 
unsigned int CountLayers ()
 Counts the number of plot layers, excluding axes or text: this is to count only the layers which have a bounding box. More...
 
unsigned int CountAllLayers ()
 Counts the number of plot layers, whether or not they have a bounding box. More...
 
double GetDesiredXmin ()
 Returns the left-border layer coordinate that the user wants the mpWindow to show (it may be not exactly the actual shown coordinate in the case of locked aspect ratio). More...
 
double GetDesiredXmax ()
 Returns the right-border layer coordinate that the user wants the mpWindow to show (it may be not exactly the actual shown coordinate in the case of locked aspect ratio). More...
 
double GetDesiredYmin ()
 Returns the bottom-border layer coordinate that the user wants the mpWindow to show (it may be not exactly the actual shown coordinate in the case of locked aspect ratio). More...
 
double GetDesiredYmax ()
 Returns the top layer-border coordinate that the user wants the mpWindow to show (it may be not exactly the actual shown coordinate in the case of locked aspect ratio). More...
 
void GetBoundingBox (double *bbox)
 Returns the bounding box coordinates. More...
 
void SetMPScrollbars (bool status)
 Enable/disable scrollbars. More...
 
bool GetMPScrollbars ()
 Get scrollbars status. More...
 
bool SaveScreenshot (const wxString &filename, wxBitmapType type=wxBITMAP_TYPE_BMP, wxSize imageSize=wxDefaultSize, bool fit=false)
 Draw the window on a wxBitmap, then save it to a file. More...
 
void SetMargins (int top, int right, int bottom, int left)
 Set window margins, creating a blank area where some kinds of layers cannot draw. More...
 
void SetMarginTop (int top)
 Set the top margin. More...
 
void SetMarginRight (int right)
 Set the right margin. More...
 
void SetMarginBottom (int bottom)
 Set the bottom margin. More...
 
void SetMarginLeft (int left)
 Set the left margin. More...
 
int GetMarginTop ()
 
int GetMarginRight ()
 
int GetMarginBottom ()
 
int GetMarginLeft ()
 
mpInfoLayerIsInsideInfoLayer (wxPoint &point)
 Check if a given point is inside the area of a mpInfoLayer and eventually returns its pointer. More...
 
void SetLayerVisible (const wxString &name, bool viewable)
 Sets the visibility of a layer by its name. More...
 
bool IsLayerVisible (const wxString &name)
 Check whether a layer with given name is visible. More...
 
void SetLayerVisible (const unsigned int position, bool viewable)
 Sets the visibility of a layer by its position in layer list. More...
 
bool IsLayerVisible (const unsigned int position)
 Check whether the layer at given position is visible. More...
 
void SetColourTheme (const wxColour &bgColour, const wxColour &drawColour, const wxColour &axesColour)
 Set Color theme. More...
 
const wxColour & GetAxesColour ()
 Get axes draw colour. More...
 
void LimitView (bool aEnable)
 Limit zooming & panning to the area used by the plots. More...
 

Static Public Attributes

static double zoomIncrementalFactor = 1.5
 This value sets the zoom steps whenever the user clicks "Zoom in/out" or performs zoom with the mouse wheel. More...
 

Protected Member Functions

void OnPaint (wxPaintEvent &event)
 
void OnSize (wxSizeEvent &event)
 
void OnShowPopupMenu (wxMouseEvent &event)
 
void OnMouseMiddleDown (wxMouseEvent &event)
 
void OnCenter (wxCommandEvent &event)
 
void OnFit (wxCommandEvent &event)
 
void OnZoomIn (wxCommandEvent &event)
 
void OnZoomOut (wxCommandEvent &event)
 
void OnLockAspect (wxCommandEvent &event)
 
void OnMouseWheel (wxMouseEvent &event)
 
void OnMouseMove (wxMouseEvent &event)
 
void OnMouseLeftDown (wxMouseEvent &event)
 
void OnMouseLeftRelease (wxMouseEvent &event)
 
void OnScrollThumbTrack (wxScrollWinEvent &event)
 
void OnScrollPageUp (wxScrollWinEvent &event)
 
void OnScrollPageDown (wxScrollWinEvent &event)
 
void OnScrollLineUp (wxScrollWinEvent &event)
 
void OnScrollLineDown (wxScrollWinEvent &event)
 
void OnScrollTop (wxScrollWinEvent &event)
 
void OnScrollBottom (wxScrollWinEvent &event)
 
void DoScrollCalc (const int position, const int orientation)
 
void DoZoomInXCalc (const int staticXpixel)
 
void DoZoomInYCalc (const int staticYpixel)
 
void DoZoomOutXCalc (const int staticXpixel)
 
void DoZoomOutYCalc (const int staticYpixel)
 
bool CheckXLimits (double &desiredMax, double &desiredMin) const
 
bool CheckYLimits (double &desiredMax, double &desiredMin) const
 
void AdjustLimitedView ()
 
virtual bool UpdateBBox ()
 Recalculate global layer bounding box, and save it in m_minX,... More...
 
virtual bool SetXView (double pos, double desiredMax, double desiredMin)
 Applies new X view coordinates depending on the settings. More...
 
virtual bool SetYView (double pos, double desiredMax, double desiredMin)
 Applies new Y view coordinates depending on the settings. More...
 

Protected Attributes

wxLayerList m_layers
 
wxMenu m_popmenu
 
bool m_lockaspect
 
wxColour m_bgColour
 
wxColour m_fgColour
 
wxColour m_axColour
 
double m_minX
 
double m_maxX
 
double m_minY
 
double m_maxY
 
double m_scaleX
 
double m_scaleY
 
double m_posX
 
double m_posY
 
int m_scrX
 
int m_scrY
 
int m_clickedX
 
int m_clickedY
 
double m_desiredXmin
 These are updated in Fit() only, and may be different from the real borders (layer coordinates) only if lock aspect ratio is true. More...
 
double m_desiredXmax
 
double m_desiredYmin
 
double m_desiredYmax
 
int m_marginTop
 
int m_marginRight
 
int m_marginBottom
 
int m_marginLeft
 
int m_last_lx
 
int m_last_ly
 
wxMemoryDC m_buff_dc
 
wxBitmap * m_buff_bmp
 
bool m_enableDoubleBuffer
 
bool m_enableMouseNavigation
 
bool m_enableLimitedView
 
wxPoint m_mouseMClick
 
wxPoint m_mouseLClick
 
bool m_enableScrollBars
 
wxPoint m_scroll
 
mpInfoLayerm_movingInfoLayer
 
bool m_zooming
 
wxRect m_zoomRect
 

Detailed Description

Canvas for plotting mpLayer implementations.

This class defines a zoomable and moveable 2D plot canvas. Any number of mpLayer implementations (scale rulers, function plots, ...) can be attached using mpWindow::AddLayer.

The canvas window provides a context menu with actions for navigating the view. The context menu can be retrieved with mpWindow::GetPopupMenu, e.g. for extending it externally.

Since wxMathPlot version 0.03, the mpWindow incorporates the following features:

  • DoubleBuffering (Default=disabled): Can be set with EnableDoubleBuffer
  • Mouse based pan/zoom (Default=enabled): Can be set with EnableMousePanZoom.

The mouse commands can be visualized by the user through the popup menu, and are:

  • Mouse Move+CTRL: Pan (Move)
  • Mouse Wheel: Vertical scroll
  • Mouse Wheel+SHIFT: Horizontal scroll
  • Mouse Wheel UP+CTRL: Zoom in
  • Mouse Wheel DOWN+CTRL: Zoom out

Definition at line 1043 of file mathplot.h.

Constructor & Destructor Documentation

◆ mpWindow() [1/2]

mpWindow::mpWindow ( )
inline

Definition at line 1046 of file mathplot.h.

1046 {}

◆ mpWindow() [2/2]

mpWindow::mpWindow ( wxWindow *  parent,
wxWindowID  id,
const wxPoint &  pos = wxDefaultPosition,
const wxSize &  size = wxDefaultSize,
long  flags = 0 
)

◆ ~mpWindow()

mpWindow::~mpWindow ( )

Definition at line 1776 of file mathplot.cpp.

1777 {
1778  // Free all the layers:
1779  DelAllLayers( true, false );
1780 
1781  if( m_buff_bmp )
1782  {
1783  delete m_buff_bmp;
1784  m_buff_bmp = NULL;
1785  }
1786 }
void DelAllLayers(bool alsoDeleteObject, bool refreshDisplay=true)
Remove all layers from the plot.
Definition: mathplot.cpp:2499
wxBitmap * m_buff_bmp
Definition: mathplot.h:1503

References DelAllLayers(), and m_buff_bmp.

Member Function Documentation

◆ AddLayer()

bool mpWindow::AddLayer ( mpLayer layer,
bool  refreshDisplay = true 
)

Add a plot layer to the canvas.

Parameters
layerPointer to layer. The mpLayer object will get under control of mpWindow, i.e. it will be delete'd on mpWindow destruction
refreshDisplayStates whether to refresh the display (UpdateAll) after adding the layer.
Return values
TRUESuccess
FALSEFailure due to out of memory.

Definition at line 2455 of file mathplot.cpp.

2456 {
2457  if( layer != NULL )
2458  {
2459  m_layers.push_back( layer );
2460 
2461  if( refreshDisplay )
2462  UpdateAll();
2463 
2464  return true;
2465  }
2466 
2467  ;
2468  return false;
2469 }
wxLayerList m_layers
Definition: mathplot.h:1474
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803

References m_layers, and UpdateAll().

Referenced by SIM_PLOT_PANEL::AddTrace(), SIM_PLOT_PANEL::EnableCursor(), and SIM_PLOT_PANEL::SIM_PLOT_PANEL().

◆ AdjustLimitedView()

void mpWindow::AdjustLimitedView ( )
protected

Definition at line 2166 of file mathplot.cpp.

2167 {
2168  if( !m_enableLimitedView )
2169  return;
2170 
2171  const double xMin = m_minX - m_marginLeft / m_scaleX;
2172  const double xMax = m_maxX - m_marginRight / m_scaleX;
2173  const double yMin = m_minY + m_marginTop / m_scaleY;
2174  const double yMax = m_maxY + m_marginBottom / m_scaleY;
2175 
2176  if( m_desiredXmin < xMin )
2177  {
2178  double diff = xMin - m_desiredXmin;
2179  m_posX += diff;
2180  m_desiredXmax += diff;
2181  m_desiredXmin = xMin;
2182  }
2183 
2184  if( m_desiredXmax > xMax )
2185  {
2186  double diff = m_desiredXmax - xMax;
2187  m_posX -= diff;
2188  m_desiredXmin -= diff;
2189  m_desiredXmax = xMax;
2190  }
2191 
2192  if( m_desiredYmin < yMin )
2193  {
2194  double diff = yMin - m_desiredYmin;
2195  m_posY += diff;
2196  m_desiredYmax += diff;
2197  m_desiredYmin = yMin;
2198  }
2199 
2200  if( m_desiredYmax > yMax )
2201  {
2202  double diff = m_desiredYmax - yMax;
2203  m_posY -= diff;
2204  m_desiredYmin -= diff;
2205  m_desiredYmax = yMax;
2206  }
2207 }
int m_marginRight
Definition: mathplot.h:1499
int m_marginLeft
Definition: mathplot.h:1499
double m_desiredXmax
Definition: mathplot.h:1497
double m_scaleY
Definition: mathplot.h:1487
double m_posX
Definition: mathplot.h:1488
double m_minY
Definition: mathplot.h:1484
double m_scaleX
Definition: mathplot.h:1486
double m_desiredYmax
Definition: mathplot.h:1497
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1497
double m_posY
Definition: mathplot.h:1489
int m_marginTop
Definition: mathplot.h:1499
double m_minX
Definition: mathplot.h:1482
double m_desiredYmin
Definition: mathplot.h:1497
int m_marginBottom
Definition: mathplot.h:1499
bool m_enableLimitedView
Definition: mathplot.h:1506
double m_maxX
Definition: mathplot.h:1483
double m_maxY
Definition: mathplot.h:1485

References m_desiredXmax, m_desiredXmin, m_desiredYmax, m_desiredYmin, m_enableLimitedView, m_marginBottom, m_marginLeft, m_marginRight, m_marginTop, m_maxX, m_maxY, m_minX, m_minY, m_posX, m_posY, m_scaleX, and m_scaleY.

Referenced by SetXView(), SetYView(), ZoomIn(), and ZoomRect().

◆ CheckXLimits()

bool mpWindow::CheckXLimits ( double &  desiredMax,
double &  desiredMin 
) const
inlineprotected

Definition at line 1442 of file mathplot.h.

1443  {
1444  return !( m_enableLimitedView
1445  && (desiredMax > m_maxX - m_marginRight / m_scaleX
1446  || desiredMin < m_minX - m_marginLeft / m_scaleX) );
1447  }
int m_marginRight
Definition: mathplot.h:1499
int m_marginLeft
Definition: mathplot.h:1499
double m_scaleX
Definition: mathplot.h:1486
double m_minX
Definition: mathplot.h:1482
bool m_enableLimitedView
Definition: mathplot.h:1506
double m_maxX
Definition: mathplot.h:1483

Referenced by ZoomOut().

◆ CheckYLimits()

bool mpWindow::CheckYLimits ( double &  desiredMax,
double &  desiredMin 
) const
inlineprotected

Definition at line 1449 of file mathplot.h.

1450  {
1451  return !( m_enableLimitedView
1452  && (desiredMax > m_maxY + m_marginBottom / m_scaleY
1453  || desiredMin < m_minY + m_marginTop / m_scaleY) );
1454  }
double m_scaleY
Definition: mathplot.h:1487
double m_minY
Definition: mathplot.h:1484
int m_marginTop
Definition: mathplot.h:1499
int m_marginBottom
Definition: mathplot.h:1499
bool m_enableLimitedView
Definition: mathplot.h:1506
double m_maxY
Definition: mathplot.h:1485

Referenced by ZoomOut().

◆ CountAllLayers()

unsigned int mpWindow::CountAllLayers ( )
inline

Counts the number of plot layers, whether or not they have a bounding box.

Returns
The number of layers in the mpWindow.

Definition at line 1276 of file mathplot.h.

1276 { return m_layers.size(); };
wxLayerList m_layers
Definition: mathplot.h:1474

Referenced by mpPrintout::OnPrintPage(), and mpInfoLegend::Plot().

◆ CountLayers()

unsigned int mpWindow::CountLayers ( )

Counts the number of plot layers, excluding axes or text: this is to count only the layers which have a bounding box.

Returns
The number of profiles plotted.

Definition at line 2986 of file mathplot.cpp.

2987 {
2988  // wxNode *node = m_layers.GetFirst();
2989  unsigned int layerNo = 0;
2990 
2991  for( wxLayerList::iterator li = m_layers.begin(); li != m_layers.end(); li++ ) // while(node)
2992  {
2993  if( (*li)->HasBBox() )
2994  layerNo++;
2995 
2996  // node = node->GetNext();
2997  }
2998 
2999  ;
3000  return layerNo;
3001 }
wxLayerList m_layers
Definition: mathplot.h:1474

References m_layers.

◆ DelAllLayers()

void mpWindow::DelAllLayers ( bool  alsoDeleteObject,
bool  refreshDisplay = true 
)

Remove all layers from the plot.

Parameters
alsoDeleteObjectIf set to true, the mpLayer objects will be also "deleted", not just removed from the internal list.
refreshDisplayStates whether to refresh the display (UpdateAll) after removing the layers.

Definition at line 2499 of file mathplot.cpp.

2500 {
2501  while( m_layers.size()>0 )
2502  {
2503  // Also delete the object?
2504  if( alsoDeleteObject )
2505  delete m_layers[0];
2506 
2507  m_layers.erase( m_layers.begin() ); // this deleted the reference only
2508  }
2509 
2510  if( refreshDisplay )
2511  UpdateAll();
2512 }
wxLayerList m_layers
Definition: mathplot.h:1474
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803

References m_layers, and UpdateAll().

Referenced by ~mpWindow().

◆ DelLayer()

bool mpWindow::DelLayer ( mpLayer layer,
bool  alsoDeleteObject = false,
bool  refreshDisplay = true 
)

Remove a plot layer from the canvas.

Parameters
layerPointer to layer. The mpLayer object will be destructed using delete.
alsoDeleteObjectIf set to true, the mpLayer object will be also "deleted", not just removed from the internal list.
refreshDisplayStates whether to refresh the display (UpdateAll) after removing the layer.
Returns
true if layer is deleted correctly

N.B. Only the layer reference in the mpWindow is deleted, the layer object still exists!

Definition at line 2472 of file mathplot.cpp.

2475 {
2476  wxLayerList::iterator layIt;
2477 
2478  for( layIt = m_layers.begin(); layIt != m_layers.end(); layIt++ )
2479  {
2480  if( *layIt == layer )
2481  {
2482  // Also delete the object?
2483  if( alsoDeleteObject )
2484  delete *layIt;
2485 
2486  m_layers.erase( layIt ); // this deleted the reference only
2487 
2488  if( refreshDisplay )
2489  UpdateAll();
2490 
2491  return true;
2492  }
2493  }
2494 
2495  return false;
2496 }
wxLayerList m_layers
Definition: mathplot.h:1474
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803

References m_layers, and UpdateAll().

Referenced by SIM_PLOT_PANEL::AddTrace(), SIM_PLOT_PANEL::DeleteTrace(), and SIM_PLOT_PANEL::EnableCursor().

◆ DoScrollCalc()

void mpWindow::DoScrollCalc ( const int  position,
const int  orientation 
)
protected

Definition at line 2850 of file mathplot.cpp.

2851 {
2852  if( orientation == wxVERTICAL )
2853  {
2854  // Y axis
2855  // Get top margin in coord units
2856  double topMargin = m_marginTop / m_scaleY;
2857  // Calculate maximum Y coord to be shown in the graph
2858  double maxY = m_desiredYmax > m_maxY ? m_desiredYmax : m_maxY;
2859  // Set new position
2860  SetPosY( ( maxY - (position / m_scaleY) ) + topMargin );
2861  }
2862  else
2863  {
2864  // X Axis
2865  // Get left margin in coord units
2866  double leftMargin = m_marginLeft / m_scaleX;
2867  // Calculate minimum X coord to be shown in the graph
2868  double minX = (m_desiredXmin < m_minX) ? m_desiredXmin : m_minX;
2869  // Set new position
2870  SetPosX( ( minX + (position / m_scaleX) ) - leftMargin );
2871  }
2872 }
int m_marginLeft
Definition: mathplot.h:1499
double m_scaleY
Definition: mathplot.h:1487
double m_scaleX
Definition: mathplot.h:1486
void SetPosX(double posX)
Set current view's X position and refresh display.
Definition: mathplot.h:1162
void SetPosY(double posY)
Set current view's Y position and refresh display.
Definition: mathplot.h:1167
double m_desiredYmax
Definition: mathplot.h:1497
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1497
int m_marginTop
Definition: mathplot.h:1499
double m_minX
Definition: mathplot.h:1482
double m_maxY
Definition: mathplot.h:1485

References m_desiredXmin, m_desiredYmax, m_marginLeft, m_marginTop, m_maxY, m_minX, m_scaleX, m_scaleY, SetPosX(), and SetPosY().

Referenced by OnScrollBottom(), OnScrollLineDown(), OnScrollLineUp(), OnScrollPageDown(), OnScrollPageUp(), OnScrollThumbTrack(), and OnScrollTop().

◆ DoZoomInXCalc()

void mpWindow::DoZoomInXCalc ( const int  staticXpixel)
protected

Definition at line 2086 of file mathplot.cpp.

2087 {
2088  // Preserve the position of the clicked point:
2089  double staticX = p2x( staticXpixel );
2090 
2091  // Zoom in:
2093  // Adjust the new m_posx
2094  m_posX = staticX - (staticXpixel / m_scaleX);
2095  // Adjust desired
2098 #ifdef MATHPLOT_DO_LOGGING
2099  wxLogMessage(
2100  "mpWindow::DoZoomInXCalc() prior X coord: (%f), new X coord: (%f) SHOULD BE EQUAL!!",
2101  staticX, p2x( staticXpixel ) );
2102 #endif
2103 }
int m_marginRight
Definition: mathplot.h:1499
int m_marginLeft
Definition: mathplot.h:1499
double p2x(wxCoord pixelCoordX)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1185
double m_desiredXmax
Definition: mathplot.h:1497
double m_posX
Definition: mathplot.h:1488
double m_scaleX
Definition: mathplot.h:1486
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1497
static double zoomIncrementalFactor
This value sets the zoom steps whenever the user clicks "Zoom in/out" or performs zoom with the mouse...
Definition: mathplot.h:1327
int m_scrX
Definition: mathplot.h:1490

References m_desiredXmax, m_desiredXmin, m_marginLeft, m_marginRight, m_posX, m_scaleX, m_scrX, p2x(), and zoomIncrementalFactor.

◆ DoZoomInYCalc()

void mpWindow::DoZoomInYCalc ( const int  staticYpixel)
protected

Definition at line 2106 of file mathplot.cpp.

2107 {
2108  // Preserve the position of the clicked point:
2109  double staticY = p2y( staticYpixel );
2110 
2111  // Zoom in:
2113  // Adjust the new m_posy:
2114  m_posY = staticY + (staticYpixel / m_scaleY);
2115  // Adjust desired
2118 #ifdef MATHPLOT_DO_LOGGING
2119  wxLogMessage(
2120  "mpWindow::DoZoomInYCalc() prior Y coord: (%f), new Y coord: (%f) SHOULD BE EQUAL!!",
2121  staticY, p2y( staticYpixel ) );
2122 #endif
2123 }
double m_scaleY
Definition: mathplot.h:1487
double p2y(wxCoord pixelCoordY)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1190
double m_desiredYmax
Definition: mathplot.h:1497
double m_posY
Definition: mathplot.h:1489
int m_marginTop
Definition: mathplot.h:1499
double m_desiredYmin
Definition: mathplot.h:1497
int m_marginBottom
Definition: mathplot.h:1499
int m_scrY
Definition: mathplot.h:1491
static double zoomIncrementalFactor
This value sets the zoom steps whenever the user clicks "Zoom in/out" or performs zoom with the mouse...
Definition: mathplot.h:1327

References m_desiredYmax, m_desiredYmin, m_marginBottom, m_marginTop, m_posY, m_scaleY, m_scrY, p2y(), and zoomIncrementalFactor.

◆ DoZoomOutXCalc()

void mpWindow::DoZoomOutXCalc ( const int  staticXpixel)
protected

Definition at line 2126 of file mathplot.cpp.

2127 {
2128  // Preserve the position of the clicked point:
2129  double staticX = p2x( staticXpixel );
2130 
2131  // Zoom out:
2133  // Adjust the new m_posx/y:
2134  m_posX = staticX - (staticXpixel / m_scaleX);
2135  // Adjust desired
2138 #ifdef MATHPLOT_DO_LOGGING
2139  wxLogMessage(
2140  "mpWindow::DoZoomOutXCalc() prior X coord: (%f), new X coord: (%f) SHOULD BE EQUAL!!",
2141  staticX, p2x( staticXpixel ) );
2142 #endif
2143 }
int m_marginRight
Definition: mathplot.h:1499
int m_marginLeft
Definition: mathplot.h:1499
double p2x(wxCoord pixelCoordX)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1185
double m_desiredXmax
Definition: mathplot.h:1497
double m_posX
Definition: mathplot.h:1488
double m_scaleX
Definition: mathplot.h:1486
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1497
static double zoomIncrementalFactor
This value sets the zoom steps whenever the user clicks "Zoom in/out" or performs zoom with the mouse...
Definition: mathplot.h:1327
int m_scrX
Definition: mathplot.h:1490

References m_desiredXmax, m_desiredXmin, m_marginLeft, m_marginRight, m_posX, m_scaleX, m_scrX, p2x(), and zoomIncrementalFactor.

◆ DoZoomOutYCalc()

void mpWindow::DoZoomOutYCalc ( const int  staticYpixel)
protected

Definition at line 2146 of file mathplot.cpp.

2147 {
2148  // Preserve the position of the clicked point:
2149  double staticY = p2y( staticYpixel );
2150 
2151  // Zoom out:
2153  // Adjust the new m_posx/y:
2154  m_posY = staticY + (staticYpixel / m_scaleY);
2155  // Adjust desired
2158 #ifdef MATHPLOT_DO_LOGGING
2159  wxLogMessage(
2160  "mpWindow::DoZoomOutYCalc() prior Y coord: (%f), new Y coord: (%f) SHOULD BE EQUAL!!",
2161  staticY, p2y( staticYpixel ) );
2162 #endif
2163 }
double m_scaleY
Definition: mathplot.h:1487
double p2y(wxCoord pixelCoordY)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1190
double m_desiredYmax
Definition: mathplot.h:1497
double m_posY
Definition: mathplot.h:1489
int m_marginTop
Definition: mathplot.h:1499
double m_desiredYmin
Definition: mathplot.h:1497
int m_marginBottom
Definition: mathplot.h:1499
int m_scrY
Definition: mathplot.h:1491
static double zoomIncrementalFactor
This value sets the zoom steps whenever the user clicks "Zoom in/out" or performs zoom with the mouse...
Definition: mathplot.h:1327

References m_desiredYmax, m_desiredYmin, m_marginBottom, m_marginTop, m_posY, m_scaleY, m_scrY, p2y(), and zoomIncrementalFactor.

◆ EnableDoubleBuffer()

void mpWindow::EnableDoubleBuffer ( bool  enabled)
inline

Enable/disable the double-buffering of the window, eliminating the flicker (default=disabled).

Definition at line 1205 of file mathplot.h.

1205 { m_enableDoubleBuffer = enabled; }
bool m_enableDoubleBuffer
Definition: mathplot.h:1504

Referenced by SIM_PLOT_PANEL::SIM_PLOT_PANEL().

◆ EnableMousePanZoom()

void mpWindow::EnableMousePanZoom ( bool  enabled)
inline

Enable/disable the feature of pan/zoom with the mouse (default=enabled)

Definition at line 1209 of file mathplot.h.

1209 { m_enableMouseNavigation = enabled; }
bool m_enableMouseNavigation
Definition: mathplot.h:1505

◆ Fit() [1/2]

void mpWindow::Fit ( )
override

Set view to fit global bounding box of all plot layers and refresh display.

Scale and position will be set to show all attached mpLayers. The X/Y scale aspect lock is taken into account.

Definition at line 1995 of file mathplot.cpp.

1996 {
1997  if( UpdateBBox() )
1998  Fit( m_minX, m_maxX, m_minY, m_maxY );
1999 }
double m_minY
Definition: mathplot.h:1484
void Fit() override
Set view to fit global bounding box of all plot layers and refresh display.
Definition: mathplot.cpp:1995
double m_minX
Definition: mathplot.h:1482
virtual bool UpdateBBox()
Recalculate global layer bounding box, and save it in m_minX,...
Definition: mathplot.cpp:2695
double m_maxX
Definition: mathplot.h:1483
double m_maxY
Definition: mathplot.h:1485

References m_maxX, m_maxY, m_minX, m_minY, and UpdateBBox().

Referenced by LockAspect(), SIM_PLOT_FRAME::menuZoomFit(), OnFit(), mpPrintout::OnPrintPage(), OnSize(), SIM_PLOT_FRAME::removePlot(), SaveScreenshot(), ZoomOut(), and ZoomRect().

◆ Fit() [2/2]

void mpWindow::Fit ( double  xMin,
double  xMax,
double  yMin,
double  yMax,
wxCoord *  printSizeX = NULL,
wxCoord *  printSizeY = NULL 
)

Set view to fit a given bounding box and refresh display.

The X/Y scale aspect lock is taken into account. If provided, the parameters printSizeX and printSizeY are taken as the DC size, and the pixel scales are computed accordingly. Also, in this case the passed borders are not saved as the "desired borders", since this use will be invoked only when printing.

Definition at line 2003 of file mathplot.cpp.

2005 {
2006  // Save desired borders:
2007  m_desiredXmin = xMin; m_desiredXmax = xMax;
2008  m_desiredYmin = yMin; m_desiredYmax = yMax;
2009 
2010  // Give a small margin to plot area
2011  double xExtra = fabs( xMax - xMin ) * 0.00;
2012  double yExtra = fabs( yMax - yMin ) * 0.03;
2013 
2014  xMin -= xExtra;
2015  xMax += xExtra;
2016  yMin -= yExtra;
2017  yMax += yExtra;
2018 
2019  if( printSizeX!=NULL && printSizeY!=NULL )
2020  {
2021  // Printer:
2022  m_scrX = *printSizeX;
2023  m_scrY = *printSizeY;
2024  }
2025  else
2026  {
2027  // Normal case (screen):
2028  GetClientSize( &m_scrX, &m_scrY );
2029  }
2030 
2031  double Ax, Ay;
2032 
2033  Ax = xMax - xMin;
2034  Ay = yMax - yMin;
2035 
2036  m_scaleX = (Ax!=0) ? (m_scrX - m_marginLeft - m_marginRight) / Ax : 1; // m_scaleX = (Ax!=0) ? m_scrX/Ax : 1;
2037  m_scaleY = (Ay!=0) ? (m_scrY - m_marginTop - m_marginBottom) / Ay : 1; // m_scaleY = (Ay!=0) ? m_scrY/Ay : 1;
2038 
2039  if( m_lockaspect )
2040  {
2041 #ifdef MATHPLOT_DO_LOGGING
2042  wxLogMessage( "mpWindow::Fit()(lock) m_scaleX=%f,m_scaleY=%f", m_scaleX, m_scaleY );
2043 #endif
2044  // Keep the lowest "scale" to fit the whole range required by that axis (to actually "fit"!):
2045  double s = m_scaleX < m_scaleY ? m_scaleX : m_scaleY;
2046  m_scaleX = s;
2047  m_scaleY = s;
2048  }
2049 
2050  // Adjusts corner coordinates: This should be simply:
2051  // m_posX = m_minX;
2052  // m_posY = m_maxY;
2053  // But account for centering if we have lock aspect:
2054  m_posX = (xMin + xMax) / 2 - ( (m_scrX - m_marginLeft - m_marginRight) / 2 + m_marginLeft ) /
2055  m_scaleX; // m_posX = (xMin+xMax)/2 - (m_scrX/2)/m_scaleX;
2056  // m_posY = (yMin+yMax)/2 + ((m_scrY - m_marginTop - m_marginBottom)/2 - m_marginTop)/m_scaleY; // m_posY = (yMin+yMax)/2 + (m_scrY/2)/m_scaleY;
2057  m_posY = (yMin + yMax) / 2 + ( (m_scrY - m_marginTop - m_marginBottom) / 2 + m_marginTop ) /
2058  m_scaleY; // m_posY = (yMin+yMax)/2 + (m_scrY/2)/m_scaleY;
2059 
2060 #ifdef MATHPLOT_DO_LOGGING
2061  wxLogMessage(
2062  "mpWindow::Fit() m_desiredXmin=%f m_desiredXmax=%f m_desiredYmin=%f m_desiredYmax=%f",
2063  xMin,
2064  xMax,
2065  yMin,
2066  yMax );
2067  wxLogMessage(
2068  "mpWindow::Fit() m_scaleX = %f , m_scrX = %d,m_scrY=%d, Ax=%f, Ay=%f, m_posX=%f, m_posY=%f",
2069  m_scaleX,
2070  m_scrX,
2071  m_scrY,
2072  Ax,
2073  Ay,
2074  m_posX,
2075  m_posY );
2076 #endif
2077 
2078  // It is VERY IMPORTANT to DO NOT call Refresh if we are drawing to the printer!!
2079  // Otherwise, the DC dimensions will be those of the window instead of the printer device
2080  if( printSizeX==NULL || printSizeY==NULL )
2081  UpdateAll();
2082 }
int m_marginRight
Definition: mathplot.h:1499
int m_marginLeft
Definition: mathplot.h:1499
double m_desiredXmax
Definition: mathplot.h:1497
double m_scaleY
Definition: mathplot.h:1487
double m_posX
Definition: mathplot.h:1488
double m_scaleX
Definition: mathplot.h:1486
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803
double m_desiredYmax
Definition: mathplot.h:1497
bool m_lockaspect
Definition: mathplot.h:1476
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1497
double m_posY
Definition: mathplot.h:1489
int m_marginTop
Definition: mathplot.h:1499
double m_desiredYmin
Definition: mathplot.h:1497
int m_marginBottom
Definition: mathplot.h:1499
int m_scrY
Definition: mathplot.h:1491
int m_scrX
Definition: mathplot.h:1490

References m_desiredXmax, m_desiredXmin, m_desiredYmax, m_desiredYmin, m_lockaspect, m_marginBottom, m_marginLeft, m_marginRight, m_marginTop, m_posX, m_posY, m_scaleX, m_scaleY, m_scrX, m_scrY, and UpdateAll().

◆ GetAxesColour()

const wxColour& mpWindow::GetAxesColour ( )
inline

Get axes draw colour.

Returns
reference to axis colour used in theme

Definition at line 1401 of file mathplot.h.

1401 { return m_axColour; };
wxColour m_axColour
Definition: mathplot.h:1480

Referenced by mpPrintout::OnPrintPage().

◆ GetBoundingBox()

void mpWindow::GetBoundingBox ( double *  bbox)

Returns the bounding box coordinates.

Parameters
bboxPointer to a 6-element double array where to store bounding box coordinates.

Definition at line 3024 of file mathplot.cpp.

3025 {
3026  bbox[0] = m_minX;
3027  bbox[1] = m_maxX;
3028  bbox[2] = m_minY;
3029  bbox[3] = m_maxY;
3030 }
double m_minY
Definition: mathplot.h:1484
double m_minX
Definition: mathplot.h:1482
double m_maxX
Definition: mathplot.h:1483
double m_maxY
Definition: mathplot.h:1485

References m_maxX, m_maxY, m_minX, and m_minY.

◆ GetDesiredXmax()

double mpWindow::GetDesiredXmax ( )
inline

Returns the right-border layer coordinate that the user wants the mpWindow to show (it may be not exactly the actual shown coordinate in the case of locked aspect ratio).

See also
Fit

Definition at line 1293 of file mathplot.h.

1293 { return m_desiredXmax; }
double m_desiredXmax
Definition: mathplot.h:1497

Referenced by mpPrintout::OnPrintPage().

◆ GetDesiredXmin()

double mpWindow::GetDesiredXmin ( )
inline

Returns the left-border layer coordinate that the user wants the mpWindow to show (it may be not exactly the actual shown coordinate in the case of locked aspect ratio).

See also
Fit

Definition at line 1288 of file mathplot.h.

1288 { return m_desiredXmin; }
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1497

Referenced by mpPrintout::OnPrintPage().

◆ GetDesiredYmax()

double mpWindow::GetDesiredYmax ( )
inline

Returns the top layer-border coordinate that the user wants the mpWindow to show (it may be not exactly the actual shown coordinate in the case of locked aspect ratio).

See also
Fit

Definition at line 1303 of file mathplot.h.

1303 { return m_desiredYmax; }
double m_desiredYmax
Definition: mathplot.h:1497

Referenced by mpPrintout::OnPrintPage().

◆ GetDesiredYmin()

double mpWindow::GetDesiredYmin ( )
inline

Returns the bottom-border layer coordinate that the user wants the mpWindow to show (it may be not exactly the actual shown coordinate in the case of locked aspect ratio).

See also
Fit

Definition at line 1298 of file mathplot.h.

1298 { return m_desiredYmin; }
double m_desiredYmin
Definition: mathplot.h:1497

Referenced by mpPrintout::OnPrintPage().

◆ GetLayer()

mpLayer * mpWindow::GetLayer ( int  position)

Get the layer in list position indicated. N.B. You must know the index of the layer inside the list!

Parameters
positionposition of the layer in the layers list
Returns
pointer to mpLayer

Definition at line 3004 of file mathplot.cpp.

3005 {
3006  if( ( position >= (int) m_layers.size() ) || position < 0 )
3007  return NULL;
3008 
3009  return m_layers[position];
3010 }
wxLayerList m_layers
Definition: mathplot.h:1474

References m_layers.

Referenced by IsLayerVisible(), mpPrintout::OnPrintPage(), mpInfoLegend::Plot(), and SetLayerVisible().

◆ GetLayerByName()

mpLayer * mpWindow::GetLayerByName ( const wxString &  name)

Get the layer by its name (case sensitive).

Parameters
nameThe name of the layer to retrieve
Returns
A pointer to the mpLayer object, or NULL if not found.

Definition at line 3013 of file mathplot.cpp.

3014 {
3015  for( wxLayerList::iterator it = m_layers.begin(); it!=m_layers.end(); it++ )
3016  if( !(*it)->GetName().Cmp( name ) )
3017  return *it;
3018 
3019 
3020  return NULL; // Not found
3021 }
wxLayerList m_layers
Definition: mathplot.h:1474
const char * name
Definition: DXF_plotter.cpp:61

References m_layers, and name.

Referenced by IsLayerVisible(), and SetLayerVisible().

◆ GetMarginBottom()

int mpWindow::GetMarginBottom ( )
inline

◆ GetMarginLeft()

int mpWindow::GetMarginLeft ( )
inline

◆ GetMarginRight()

int mpWindow::GetMarginRight ( )
inline

◆ GetMarginTop()

int mpWindow::GetMarginTop ( )
inline

◆ GetMPScrollbars()

bool mpWindow::GetMPScrollbars ( )
inline

Get scrollbars status.

Returns
true if scrollbars are visible

Definition at line 1315 of file mathplot.h.

1315 { return m_enableScrollBars; };
bool m_enableScrollBars
Definition: mathplot.h:1509

◆ GetPopupMenu()

wxMenu* mpWindow::GetPopupMenu ( )
inline

Get reference to context menu of the plot canvas.

Returns
Pointer to menu. The menu can be modified.

Definition at line 1056 of file mathplot.h.

1056 { return &m_popmenu; }
wxMenu m_popmenu
Definition: mathplot.h:1475

◆ GetPosX()

double mpWindow::GetPosX ( void  ) const
inline

Definition at line 1116 of file mathplot.h.

1116 { return m_posX; }
double m_posX
Definition: mathplot.h:1488

Referenced by mpScaleXBase::Plot(), mpMovableObject::Plot(), and mpBitmapLayer::Plot().

◆ GetPosY()

double mpWindow::GetPosY ( void  ) const
inline

Definition at line 1123 of file mathplot.h.

1123 { return m_posY; }
double m_posY
Definition: mathplot.h:1489

Referenced by mpScaleY::Plot(), mpMovableObject::Plot(), and mpBitmapLayer::Plot().

◆ GetScaleX()

double mpWindow::GetScaleX ( void  ) const
inline

Definition at line 1102 of file mathplot.h.

1102 { return m_scaleX; }; // Schaling's method: maybe another method esists with the same name
double m_scaleX
Definition: mathplot.h:1486

Referenced by mpScaleXBase::Plot(), mpMovableObject::Plot(), and mpBitmapLayer::Plot().

◆ GetScaleY()

double mpWindow::GetScaleY ( void  ) const
inline

Definition at line 1109 of file mathplot.h.

1109 { return m_scaleY; } // Schaling's method: maybe another method exists with the same name
double m_scaleY
Definition: mathplot.h:1487

Referenced by mpScaleY::Plot(), mpMovableObject::Plot(), and mpBitmapLayer::Plot().

◆ GetScrX()

int mpWindow::GetScrX ( void  ) const
inline

Get current view's X dimension in device context units.

Usually this is equal to wxDC::GetSize, but it might differ thus mpLayer implementations should rely on the value returned by the function. See rules for coordinate transformation

Returns
X dimension.

Definition at line 1131 of file mathplot.h.

1131 { return m_scrX; }
int m_scrX
Definition: mathplot.h:1490

Referenced by mpScaleXBase::getVisibleDataRange(), mpPrintout::OnPrintPage(), CURSOR::Plot(), mpInfoLayer::Plot(), mpInfoCoords::Plot(), mpInfoLegend::Plot(), mpFX::Plot(), mpFY::Plot(), mpFXY::Plot(), mpProfile::Plot(), mpScaleXBase::Plot(), mpScaleY::Plot(), mpText::Plot(), mpMovableObject::Plot(), and mpBitmapLayer::Plot().

◆ GetScrY()

int mpWindow::GetScrY ( void  ) const
inline

Get current view's Y dimension in device context units.

Usually this is equal to wxDC::GetSize, but it might differ thus mpLayer implementations should rely on the value returned by the function. See rules for coordinate transformation

Returns
Y dimension.

Definition at line 1140 of file mathplot.h.

1140 { return m_scrY; }
int m_scrY
Definition: mathplot.h:1491

Referenced by mpScaleY::getVisibleDataRange(), mpPrintout::OnPrintPage(), CURSOR::Plot(), mpInfoLayer::Plot(), mpInfoCoords::Plot(), mpInfoLegend::Plot(), mpFX::Plot(), mpFY::Plot(), mpFXY::Plot(), mpProfile::Plot(), mpScaleXBase::Plot(), mpScaleY::Plot(), mpText::Plot(), mpMovableObject::Plot(), and mpBitmapLayer::Plot().

◆ GetXpos()

double mpWindow::GetXpos ( ) const
inline

Get current view's X position.

See rules for coordinate transformation

Returns
X Position in layer coordinate system, that corresponds to the center point of the view.

Definition at line 1115 of file mathplot.h.

1115 { return m_posX; }
double m_posX
Definition: mathplot.h:1488

◆ GetXscl()

double mpWindow::GetXscl ( )
inline

Get current view's X scale.

See rules for coordinate transformation

Returns
Scale

Definition at line 1101 of file mathplot.h.

1101 { return m_scaleX; }
double m_scaleX
Definition: mathplot.h:1486

◆ GetXScreen()

int mpWindow::GetXScreen ( void  ) const
inline

Definition at line 1132 of file mathplot.h.

1132 { return m_scrX; }
int m_scrX
Definition: mathplot.h:1490

Referenced by SIM_PLOT_PANEL::EnableCursor().

◆ GetYpos()

double mpWindow::GetYpos ( ) const
inline

Get current view's Y position.

See rules for coordinate transformation

Returns
Y Position in layer coordinate system, that corresponds to the center point of the view.

Definition at line 1122 of file mathplot.h.

1122 { return m_posY; }
double m_posY
Definition: mathplot.h:1489

◆ GetYscl()

double mpWindow::GetYscl ( ) const
inline

Get current view's Y scale.

See rules for coordinate transformation

Returns
Scale

Definition at line 1108 of file mathplot.h.

1108 { return m_scaleY; }
double m_scaleY
Definition: mathplot.h:1487

◆ GetYScreen()

int mpWindow::GetYScreen ( void  ) const
inline

Definition at line 1141 of file mathplot.h.

1141 { return m_scrY; }
int m_scrY
Definition: mathplot.h:1491

◆ IsAspectLocked()

bool mpWindow::IsAspectLocked ( )
inline

Checks whether the X/Y scale aspect is locked.

Return values
TRUELocked
FALSEUnlocked

Definition at line 1222 of file mathplot.h.

1222 { return m_lockaspect; }
bool m_lockaspect
Definition: mathplot.h:1476

◆ IsInsideInfoLayer()

mpInfoLayer * mpWindow::IsInsideInfoLayer ( wxPoint &  point)

Check if a given point is inside the area of a mpInfoLayer and eventually returns its pointer.

Parameters
pointThe position to be checked
Returns
If an info layer is found, returns its pointer, NULL otherwise

Definition at line 3099 of file mathplot.cpp.

3100 {
3101  wxLayerList::iterator li;
3102 
3103  for( li = m_layers.begin(); li != m_layers.end(); li++ )
3104  {
3105 #ifdef MATHPLOT_DO_LOGGING
3106  wxLogMessage( "mpWindow::IsInsideInfoLayer() examinining layer = %p", (*li) );
3107 #endif // MATHPLOT_DO_LOGGING
3108 
3109  if( (*li)->IsInfo() )
3110  {
3111  mpInfoLayer* tmpLyr = (mpInfoLayer*) (*li);
3112 #ifdef MATHPLOT_DO_LOGGING
3113  wxLogMessage( "mpWindow::IsInsideInfoLayer() layer = %p", (*li) );
3114 #endif // MATHPLOT_DO_LOGGING
3115 
3116  if( tmpLyr->Inside( point ) )
3117  {
3118  return tmpLyr;
3119  }
3120  }
3121  }
3122 
3123  return NULL;
3124 }
virtual bool Inside(wxPoint &point)
Checks whether a point is inside the info box rectangle.
Definition: mathplot.cpp:135
wxLayerList m_layers
Definition: mathplot.h:1474
Base class to create small rectangular info boxes mpInfoLayer is the base class to create a small rec...
Definition: mathplot.h:334

References mpInfoLayer::Inside(), and m_layers.

Referenced by OnMouseLeftDown().

◆ IsLayerVisible() [1/2]

bool mpWindow::IsLayerVisible ( const wxString &  name)

Check whether a layer with given name is visible.

Parameters
nameThe layer name
Returns
layer visibility status

Definition at line 3139 of file mathplot.cpp.

3140 {
3141  mpLayer* lx = GetLayerByName( name );
3142 
3143  return (lx) ? lx->IsVisible() : false;
3144 }
bool IsVisible()
Checks whether the layer is visible or not.
Definition: mathplot.h:297
mpLayer * GetLayerByName(const wxString &name)
Definition: mathplot.cpp:3013
const char * name
Definition: DXF_plotter.cpp:61

References GetLayerByName(), mpLayer::IsVisible(), and name.

◆ IsLayerVisible() [2/2]

bool mpWindow::IsLayerVisible ( const unsigned int  position)

Check whether the layer at given position is visible.

Parameters
positionThe layer position in layer list
Returns
layer visibility status

Definition at line 3159 of file mathplot.cpp.

3160 {
3161  mpLayer* lx = GetLayer( position );
3162 
3163  return (lx) ? lx->IsVisible() : false;
3164 }
mpLayer * GetLayer(int position)
Definition: mathplot.cpp:3004
bool IsVisible()
Checks whether the layer is visible or not.
Definition: mathplot.h:297

References GetLayer(), and mpLayer::IsVisible().

◆ LimitView()

void mpWindow::LimitView ( bool  aEnable)
inline

Limit zooming & panning to the area used by the plots.

Definition at line 1404 of file mathplot.h.

1405  {
1406  m_enableLimitedView = aEnable;
1407  }
bool m_enableLimitedView
Definition: mathplot.h:1506

Referenced by SIM_PLOT_PANEL::SIM_PLOT_PANEL().

◆ LockAspect()

void mpWindow::LockAspect ( bool  enable = TRUE)

Enable or disable X/Y scale aspect locking for the view.

Note
Explicit calls to mpWindow::SetScaleX and mpWindow::SetScaleY will set an unlocked aspect, but any other action changing the view scale will lock the aspect again.

Definition at line 2393 of file mathplot.cpp.

2394 {
2395  m_lockaspect = enable;
2396  m_popmenu.Check( mpID_LOCKASPECT, enable );
2397 
2398  // Try to fit again with the new config:
2400 }
double m_desiredXmax
Definition: mathplot.h:1497
double m_desiredYmax
Definition: mathplot.h:1497
bool m_lockaspect
Definition: mathplot.h:1476
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1497
void Fit() override
Set view to fit global bounding box of all plot layers and refresh display.
Definition: mathplot.cpp:1995
double m_desiredYmin
Definition: mathplot.h:1497
wxMenu m_popmenu
Definition: mathplot.h:1475

References Fit(), m_desiredXmax, m_desiredXmin, m_desiredYmax, m_desiredYmin, m_lockaspect, m_popmenu, and mpID_LOCKASPECT.

Referenced by OnLockAspect().

◆ OnCenter()

void mpWindow::OnCenter ( wxCommandEvent &  event)
protected

Definition at line 2423 of file mathplot.cpp.

2424 {
2425  GetClientSize( &m_scrX, &m_scrY );
2426  int centerX = (m_scrX - m_marginLeft - m_marginRight) / 2; // + m_marginLeft; // c.x = m_scrX/2;
2427  int centerY = (m_scrY - m_marginTop - m_marginBottom) / 2; // - m_marginTop; // c.y = m_scrY/2;
2428  SetPos( p2x( m_clickedX - centerX ), p2y( m_clickedY - centerY ) );
2429  // SetPos( p2x(m_clickedX-m_scrX/2), p2y(m_clickedY-m_scrY/2) ); //SetPos( (double)(m_clickedX-m_scrX/2) / m_scaleX + m_posX, (double)(m_scrY/2-m_clickedY) / m_scaleY + m_posY);
2430 }
int m_marginRight
Definition: mathplot.h:1499
int m_marginLeft
Definition: mathplot.h:1499
int m_clickedX
Definition: mathplot.h:1492
double p2x(wxCoord pixelCoordX)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1185
double p2y(wxCoord pixelCoordY)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1190
int m_marginTop
Definition: mathplot.h:1499
void SetPos(double posX, double posY)
Set current view's X and Y position and refresh display.
Definition: mathplot.h:1173
int m_clickedY
Definition: mathplot.h:1493
int m_marginBottom
Definition: mathplot.h:1499
int m_scrY
Definition: mathplot.h:1491
int m_scrX
Definition: mathplot.h:1490

References m_clickedX, m_clickedY, m_marginBottom, m_marginLeft, m_marginRight, m_marginTop, m_scrX, m_scrY, p2x(), p2y(), and SetPos().

◆ OnFit()

void mpWindow::OnFit ( wxCommandEvent &  event)
protected

Definition at line 2417 of file mathplot.cpp.

2418 {
2419  Fit();
2420 }
void Fit() override
Set view to fit global bounding box of all plot layers and refresh display.
Definition: mathplot.cpp:1995

References Fit().

◆ OnLockAspect()

void mpWindow::OnLockAspect ( wxCommandEvent &  event)
protected

Definition at line 2411 of file mathplot.cpp.

2412 {
2414 }
bool m_lockaspect
Definition: mathplot.h:1476
void LockAspect(bool enable=TRUE)
Enable or disable X/Y scale aspect locking for the view.
Definition: mathplot.cpp:2393

References LockAspect(), and m_lockaspect.

◆ OnMouseLeftDown()

void mpWindow::OnMouseLeftDown ( wxMouseEvent &  event)
protected

Definition at line 1942 of file mathplot.cpp.

1943 {
1944  m_mouseLClick.x = event.GetX();
1945  m_mouseLClick.y = event.GetY();
1946  m_zooming = true;
1947 #ifdef MATHPLOT_DO_LOGGING
1948  wxLogMessage( "mpWindow::OnMouseLeftDown() X = %d , Y = %d", event.GetX(), event.GetY() ); /*m_mouseLClick.x, m_mouseLClick.y);*/
1949 #endif
1950  wxPoint pointClicked = event.GetPosition();
1951  m_movingInfoLayer = IsInsideInfoLayer( pointClicked );
1952 
1953  if( m_movingInfoLayer != NULL )
1954  {
1955 #ifdef MATHPLOT_DO_LOGGING
1956  wxLogMessage( "mpWindow::OnMouseLeftDown() started moving layer %lx",
1957  (long int) m_movingInfoLayer ); /*m_mouseLClick.x, m_mouseLClick.y);*/
1958 #endif
1959  }
1960 
1961  event.Skip();
1962 }
bool m_zooming
Definition: mathplot.h:1512
mpInfoLayer * IsInsideInfoLayer(wxPoint &point)
Check if a given point is inside the area of a mpInfoLayer and eventually returns its pointer.
Definition: mathplot.cpp:3099
wxPoint m_mouseLClick
Definition: mathplot.h:1508
mpInfoLayer * m_movingInfoLayer
Definition: mathplot.h:1511

References IsInsideInfoLayer(), m_mouseLClick, m_movingInfoLayer, and m_zooming.

◆ OnMouseLeftRelease()

void mpWindow::OnMouseLeftRelease ( wxMouseEvent &  event)
protected

Definition at line 1965 of file mathplot.cpp.

1966 {
1967  wxPoint release( event.GetX(), event.GetY() );
1968  wxPoint press( m_mouseLClick.x, m_mouseLClick.y );
1969 
1970  m_zooming = false;
1971 
1972  if( m_movingInfoLayer != NULL )
1973  {
1975  m_movingInfoLayer = NULL;
1976  }
1977  else
1978  {
1979  if( release != press )
1980  {
1981  ZoomRect( press, release );
1982  } /*else {
1983  * if (m_coordTooltip) {
1984  * wxString toolTipContent;
1985  * toolTipContent.Printf( "X = %f\nY = %f", p2x(event.GetX()), p2y(event.GetY()));
1986  * SetToolTip(toolTipContent);
1987  * }
1988  * } */
1989  }
1990 
1991  event.Skip();
1992 }
bool m_zooming
Definition: mathplot.h:1512
wxPoint m_mouseLClick
Definition: mathplot.h:1508
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)
Definition: mathplot.cpp:2370
mpInfoLayer * m_movingInfoLayer
Definition: mathplot.h:1511
virtual void UpdateReference()
Updates the rectangle reference point.
Definition: mathplot.cpp:148

References m_mouseLClick, m_movingInfoLayer, m_zooming, mpInfoLayer::UpdateReference(), and ZoomRect().

◆ OnMouseMiddleDown()

void mpWindow::OnMouseMiddleDown ( wxMouseEvent &  event)
protected

Definition at line 1791 of file mathplot.cpp.

1792 {
1793  m_mouseMClick.x = event.GetX();
1794  m_mouseMClick.y = event.GetY();
1795 }
wxPoint m_mouseMClick
Definition: mathplot.h:1507

References m_mouseMClick.

◆ OnMouseMove()

void mpWindow::OnMouseMove ( wxMouseEvent &  event)
protected

Definition at line 1842 of file mathplot.cpp.

1843 {
1845  {
1846  event.Skip();
1847  return;
1848  }
1849 
1850  if( event.m_middleDown )
1851  {
1852  // The change:
1853  int Ax = m_mouseMClick.x - event.GetX();
1854  int Ay = m_mouseMClick.y - event.GetY();
1855 
1856  // For the next event, use relative to this coordinates.
1857  m_mouseMClick.x = event.GetX();
1858  m_mouseMClick.y = event.GetY();
1859 
1860  double Ax_units = Ax / m_scaleX;
1861  double Ay_units = -Ay / m_scaleY;
1862 
1863  bool updateRequired = false;
1864  updateRequired |= SetXView( m_posX + Ax_units,
1865  m_desiredXmax + Ax_units,
1866  m_desiredXmin + Ax_units );
1867  updateRequired |= SetYView( m_posY + Ay_units,
1868  m_desiredYmax + Ay_units,
1869  m_desiredYmin + Ay_units );
1870 
1871  if( updateRequired )
1872  UpdateAll();
1873 
1874 #ifdef MATHPLOT_DO_LOGGING
1875  wxLogMessage( "[mpWindow::OnMouseMove] Ax:%i Ay:%i m_posX:%f m_posY:%f",
1876  Ax,
1877  Ay,
1878  m_posX,
1879  m_posY );
1880 #endif
1881  }
1882  else
1883  {
1884  if( event.m_leftDown )
1885  {
1886  if( m_movingInfoLayer == NULL )
1887  {
1888  wxClientDC dc( this );
1889  wxPen pen( m_fgColour, 1, wxPENSTYLE_DOT );
1890  dc.SetPen( pen );
1891  dc.SetBrush( *wxTRANSPARENT_BRUSH );
1892  dc.DrawRectangle( m_mouseLClick.x, m_mouseLClick.y,
1893  event.GetX() - m_mouseLClick.x, event.GetY() - m_mouseLClick.y );
1894  m_zooming = true;
1895  m_zoomRect.x = m_mouseLClick.x;
1896  m_zoomRect.y = m_mouseLClick.y;
1897  m_zoomRect.width = event.GetX() - m_mouseLClick.x;
1898  m_zoomRect.height = event.GetY() - m_mouseLClick.y;
1899  }
1900  else
1901  {
1902  wxPoint moveVector( event.GetX() - m_mouseLClick.x,
1903  event.GetY() - m_mouseLClick.y );
1904  m_movingInfoLayer->Move( moveVector );
1905  m_zooming = false;
1906  }
1907 
1908  UpdateAll();
1909  }
1910  else
1911  {
1912 #if 0
1913  wxLayerList::iterator li;
1914 
1915  for( li = m_layers.begin(); li != m_layers.end(); li++ )
1916  {
1917  if( (*li)->IsInfo() && (*li)->IsVisible() )
1918  {
1919  mpInfoLayer* tmpLyr = (mpInfoLayer*) (*li);
1920  tmpLyr->UpdateInfo( *this, event );
1921  // UpdateAll();
1922  RefreshRect( tmpLyr->GetRectangle() );
1923  }
1924  }
1925 
1926 #endif
1927  /* if (m_coordTooltip) {
1928  * wxString toolTipContent;
1929  * toolTipContent.Printf( "X = %f\nY = %f", p2x(event.GetX()), p2y(event.GetY()));
1930  * wxTipWindow** ptr = NULL;
1931  * wxRect rectBounds(event.GetX(), event.GetY(), 5, 5);
1932  * wxTipWindow* tip = new wxTipWindow(this, toolTipContent, 100, ptr, &rectBounds);
1933  *
1934  * } */
1935  }
1936  }
1937 
1938  event.Skip();
1939 }
bool m_zooming
Definition: mathplot.h:1512
virtual bool SetYView(double pos, double desiredMax, double desiredMin)
Applies new Y view coordinates depending on the settings.
Definition: mathplot.cpp:2224
double m_desiredXmax
Definition: mathplot.h:1497
double m_scaleY
Definition: mathplot.h:1487
bool m_enableMouseNavigation
Definition: mathplot.h:1505
double m_posX
Definition: mathplot.h:1488
wxPoint m_mouseMClick
Definition: mathplot.h:1507
double m_scaleX
Definition: mathplot.h:1486
wxLayerList m_layers
Definition: mathplot.h:1474
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803
wxPoint m_mouseLClick
Definition: mathplot.h:1508
virtual void Move(wxPoint delta)
Moves the layer rectangle of given pixel deltas.
Definition: mathplot.cpp:141
double m_desiredYmax
Definition: mathplot.h:1497
virtual void UpdateInfo(mpWindow &w, wxEvent &event)
Updates the content of the info box.
Definition: mathplot.cpp:130
Base class to create small rectangular info boxes mpInfoLayer is the base class to create a small rec...
Definition: mathplot.h:334
wxRect m_zoomRect
Definition: mathplot.h:1513
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1497
mpInfoLayer * m_movingInfoLayer
Definition: mathplot.h:1511
wxColour m_fgColour
Definition: mathplot.h:1479
double m_posY
Definition: mathplot.h:1489
const wxRect & GetRectangle()
Returns the current rectangle coordinates.
Definition: mathplot.h:391
double m_desiredYmin
Definition: mathplot.h:1497
virtual bool SetXView(double pos, double desiredMax, double desiredMin)
Applies new X view coordinates depending on the settings.
Definition: mathplot.cpp:2210

References mpInfoLayer::GetRectangle(), m_desiredXmax, m_desiredXmin, m_desiredYmax, m_desiredYmin, m_enableMouseNavigation, m_fgColour, m_layers, m_mouseLClick, m_mouseMClick, m_movingInfoLayer, m_posX, m_posY, m_scaleX, m_scaleY, m_zooming, m_zoomRect, mpInfoLayer::Move(), SetXView(), SetYView(), UpdateAll(), and mpInfoLayer::UpdateInfo().

◆ OnMouseWheel()

void mpWindow::OnMouseWheel ( wxMouseEvent &  event)
protected

Definition at line 1800 of file mathplot.cpp.

1801 {
1803  {
1804  event.Skip();
1805  return;
1806  }
1807 
1808  // Scroll vertically or horizontally (this is SHIFT is hold down).
1809  int change = -event.GetWheelRotation(); // Opposite direction (More intuitive)!
1810  double changeUnitsX = change / m_scaleX;
1811  double changeUnitsY = change / m_scaleY;
1812 
1813  if( event.m_controlDown )
1814  {
1815  // horizontal scroll
1816  SetXView( m_posX + changeUnitsX, m_desiredXmax + changeUnitsX,
1817  m_desiredXmin + changeUnitsX );
1818  }
1819  else if( event.m_shiftDown )
1820  {
1821  // vertical scroll
1822  SetYView( m_posY - changeUnitsY, m_desiredYmax - changeUnitsY,
1823  m_desiredYmin - changeUnitsY );
1824  }
1825  else
1826  {
1827  // zoom in/out
1828  wxPoint clickPt( event.GetX(), event.GetY() );
1829 
1830  if( event.GetWheelRotation() > 0 )
1831  ZoomIn( clickPt );
1832  else
1833  ZoomOut( clickPt );
1834  }
1835 
1836  UpdateAll();
1837 }
void ZoomOut(const wxPoint &centerPoint=wxDefaultPosition)
Zoom out current view and refresh display.
Definition: mathplot.cpp:2295
virtual bool SetYView(double pos, double desiredMax, double desiredMin)
Applies new Y view coordinates depending on the settings.
Definition: mathplot.cpp:2224
double m_desiredXmax
Definition: mathplot.h:1497
double m_scaleY
Definition: mathplot.h:1487
bool m_enableMouseNavigation
Definition: mathplot.h:1505
double m_posX
Definition: mathplot.h:1488
double m_scaleX
Definition: mathplot.h:1486
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803
double m_desiredYmax
Definition: mathplot.h:1497
void ZoomIn(const wxPoint &centerPoint=wxDefaultPosition)
Zoom into current view and refresh display.
Definition: mathplot.cpp:2238
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1497
double m_posY
Definition: mathplot.h:1489
double m_desiredYmin
Definition: mathplot.h:1497
virtual bool SetXView(double pos, double desiredMax, double desiredMin)
Applies new X view coordinates depending on the settings.
Definition: mathplot.cpp:2210

References m_desiredXmax, m_desiredXmin, m_desiredYmax, m_desiredYmin, m_enableMouseNavigation, m_posX, m_posY, m_scaleX, m_scaleY, SetXView(), SetYView(), UpdateAll(), ZoomIn(), and ZoomOut().

◆ OnPaint()

void mpWindow::OnPaint ( wxPaintEvent &  event)
protected

Definition at line 2515 of file mathplot.cpp.

2516 {
2517  wxPaintDC dc( this );
2518 
2519  dc.GetSize( &m_scrX, &m_scrY ); // This is the size of the visible area only!
2520 
2521 #ifdef MATHPLOT_DO_LOGGING
2522  wxLogMessage( "[mpWindow::OnPaint] vis.area: x %i y%i", m_scrX, m_scrY );
2523 #endif
2524 
2525  // Selects direct or buffered draw:
2526  wxDC* trgDc;
2527 
2528  // J.L.Blanco @ Aug 2007: Added double buffer support
2529  if( m_enableDoubleBuffer )
2530  {
2531  if( m_last_lx!=m_scrX || m_last_ly!=m_scrY )
2532  {
2533  if( m_buff_bmp )
2534  delete m_buff_bmp;
2535 
2536  m_buff_bmp = new wxBitmap( m_scrX, m_scrY );
2537  m_buff_dc.SelectObject( *m_buff_bmp );
2538  m_last_lx = m_scrX;
2539  m_last_ly = m_scrY;
2540  }
2541 
2542  trgDc = &m_buff_dc;
2543  }
2544  else
2545  {
2546  trgDc = &dc;
2547  }
2548 
2549  // Draw background:
2550  // trgDc->SetDeviceOrigin(0,0);
2551  trgDc->SetPen( *wxTRANSPARENT_PEN );
2552  wxBrush brush( GetBackgroundColour() );
2553  trgDc->SetBrush( brush );
2554  trgDc->SetTextForeground( m_fgColour );
2555  trgDc->DrawRectangle( 0, 0, m_scrX, m_scrY );
2556 
2557  // Draw all the layers:
2558  // trgDc->SetDeviceOrigin( m_scrX>>1, m_scrY>>1); // Origin at the center
2559  wxLayerList::iterator li;
2560 
2561  for( li = m_layers.begin(); li != m_layers.end(); li++ )
2562  {
2563  (*li)->Plot( *trgDc, *this );
2564  }
2565 
2566  ;
2567 
2568  if( m_zooming )
2569  {
2570  wxPen pen( m_fgColour, 1, wxPENSTYLE_DOT );
2571  trgDc->SetPen( pen );
2572  trgDc->SetBrush( *wxTRANSPARENT_BRUSH );
2573  trgDc->DrawRectangle( m_zoomRect );
2574  }
2575 
2576  // If doublebuffer, draw now to the window:
2577  if( m_enableDoubleBuffer )
2578  {
2579  // trgDc->SetDeviceOrigin(0,0);
2580  // dc.SetDeviceOrigin(0,0); // Origin at the center
2581  dc.Blit( 0, 0, m_scrX, m_scrY, trgDc, 0, 0 );
2582  }
2583 
2584  /* if (m_coordTooltip) {
2585  * wxString toolTipContent;
2586  * wxPoint mousePoint = wxGetMousePosition();
2587  * toolTipContent.Printf( "X = %f\nY = %f", p2x(mousePoint.x), p2y(mousePoint.y));
2588  * SetToolTip(toolTipContent);
2589  * }*/
2590  // If scrollbars are enabled, refresh them
2591  if( m_enableScrollBars )
2592  {
2593  /* m_scroll.x = (int) floor((m_posX - m_minX)*m_scaleX);
2594  * m_scroll.y = (int) floor((m_maxY - m_posY )*m_scaleY);
2595  * Scroll(m_scroll.x, m_scroll.y);*/
2596  // Scroll(x2p(m_posX), y2p(m_posY));
2597  // SetVirtualSize((int) ((m_maxX - m_minX)*m_scaleX), (int) ((m_maxY - m_minY)*m_scaleY));
2598  // int centerX = (m_scrX - m_marginLeft - m_marginRight)/2; // + m_marginLeft; // c.x = m_scrX/2;
2599  // int centerY = (m_scrY - m_marginTop - m_marginBottom)/2; // - m_marginTop; // c.y = m_scrY/2;
2600  /*SetScrollbars(1, 1, (int) ((m_maxX - m_minX)*m_scaleX), (int) ((m_maxY - m_minY)*m_scaleY));*/ // , x2p(m_posX + centerX/m_scaleX), y2p(m_posY - centerY/m_scaleY), true);
2601  }
2602 }
wxMemoryDC m_buff_dc
Definition: mathplot.h:1502
bool m_enableScrollBars
Definition: mathplot.h:1509
bool m_zooming
Definition: mathplot.h:1512
wxLayerList m_layers
Definition: mathplot.h:1474
wxRect m_zoomRect
Definition: mathplot.h:1513
wxColour m_fgColour
Definition: mathplot.h:1479
int m_last_ly
Definition: mathplot.h:1501
int m_last_lx
Definition: mathplot.h:1501
int m_scrY
Definition: mathplot.h:1491
bool m_enableDoubleBuffer
Definition: mathplot.h:1504
int m_scrX
Definition: mathplot.h:1490
wxBitmap * m_buff_bmp
Definition: mathplot.h:1503

References m_buff_bmp, m_buff_dc, m_enableDoubleBuffer, m_enableScrollBars, m_fgColour, m_last_lx, m_last_ly, m_layers, m_scrX, m_scrY, m_zooming, and m_zoomRect.

◆ OnScrollBottom()

void mpWindow::OnScrollBottom ( wxScrollWinEvent &  event)
protected

Definition at line 2961 of file mathplot.cpp.

2962 {
2963  int scrollOrientation = event.GetOrientation();
2964  // Get thumb size
2965  int thumbSize = GetScrollThumb( scrollOrientation );
2966  // Get scroll range
2967  int scrollRange = GetScrollRange( scrollOrientation );
2968 
2969  DoScrollCalc( scrollRange - thumbSize, scrollOrientation );
2970 }
void DoScrollCalc(const int position, const int orientation)
Definition: mathplot.cpp:2850

References DoScrollCalc().

◆ OnScrollLineDown()

void mpWindow::OnScrollLineDown ( wxScrollWinEvent &  event)
protected

Definition at line 2935 of file mathplot.cpp.

2936 {
2937  int scrollOrientation = event.GetOrientation();
2938  // Get position before page up
2939  int position = GetScrollPos( scrollOrientation );
2940  // Get thumb size
2941  int thumbSize = GetScrollThumb( scrollOrientation );
2942  // Get scroll range
2943  int scrollRange = GetScrollRange( scrollOrientation );
2944 
2945  // Need to adjust position by a page
2946  position += mpSCROLL_NUM_PIXELS_PER_LINE;
2947 
2948  if( position > (scrollRange - thumbSize) )
2949  position = scrollRange - thumbSize;
2950 
2951  DoScrollCalc( position, scrollOrientation );
2952 }
#define mpSCROLL_NUM_PIXELS_PER_LINE
Definition: mathplot.cpp:61
void DoScrollCalc(const int position, const int orientation)
Definition: mathplot.cpp:2850

References DoScrollCalc(), and mpSCROLL_NUM_PIXELS_PER_LINE.

◆ OnScrollLineUp()

void mpWindow::OnScrollLineUp ( wxScrollWinEvent &  event)
protected

Definition at line 2919 of file mathplot.cpp.

2920 {
2921  int scrollOrientation = event.GetOrientation();
2922  // Get position before page up
2923  int position = GetScrollPos( scrollOrientation );
2924 
2925  // Need to adjust position by a line
2926  position -= mpSCROLL_NUM_PIXELS_PER_LINE;
2927 
2928  if( position < 0 )
2929  position = 0;
2930 
2931  DoScrollCalc( position, scrollOrientation );
2932 }
#define mpSCROLL_NUM_PIXELS_PER_LINE
Definition: mathplot.cpp:61
void DoScrollCalc(const int position, const int orientation)
Definition: mathplot.cpp:2850

References DoScrollCalc(), and mpSCROLL_NUM_PIXELS_PER_LINE.

◆ OnScrollPageDown()

void mpWindow::OnScrollPageDown ( wxScrollWinEvent &  event)
protected

Definition at line 2899 of file mathplot.cpp.

2900 {
2901  int scrollOrientation = event.GetOrientation();
2902  // Get position before page up
2903  int position = GetScrollPos( scrollOrientation );
2904  // Get thumb size
2905  int thumbSize = GetScrollThumb( scrollOrientation );
2906  // Get scroll range
2907  int scrollRange = GetScrollRange( scrollOrientation );
2908 
2909  // Need to adjust position by a page
2910  position += thumbSize;
2911 
2912  if( position > (scrollRange - thumbSize) )
2913  position = scrollRange - thumbSize;
2914 
2915  DoScrollCalc( position, scrollOrientation );
2916 }
void DoScrollCalc(const int position, const int orientation)
Definition: mathplot.cpp:2850

References DoScrollCalc().

◆ OnScrollPageUp()

void mpWindow::OnScrollPageUp ( wxScrollWinEvent &  event)
protected

Definition at line 2881 of file mathplot.cpp.

2882 {
2883  int scrollOrientation = event.GetOrientation();
2884  // Get position before page up
2885  int position = GetScrollPos( scrollOrientation );
2886  // Get thumb size
2887  int thumbSize = GetScrollThumb( scrollOrientation );
2888 
2889  // Need to adjust position by a page
2890  position -= thumbSize;
2891 
2892  if( position < 0 )
2893  position = 0;
2894 
2895  DoScrollCalc( position, scrollOrientation );
2896 }
void DoScrollCalc(const int position, const int orientation)
Definition: mathplot.cpp:2850

References DoScrollCalc().

◆ OnScrollThumbTrack()

void mpWindow::OnScrollThumbTrack ( wxScrollWinEvent &  event)
protected

Definition at line 2875 of file mathplot.cpp.

2876 {
2877  DoScrollCalc( event.GetPosition(), event.GetOrientation() );
2878 }
void DoScrollCalc(const int position, const int orientation)
Definition: mathplot.cpp:2850

References DoScrollCalc().

◆ OnScrollTop()

void mpWindow::OnScrollTop ( wxScrollWinEvent &  event)
protected

Definition at line 2955 of file mathplot.cpp.

2956 {
2957  DoScrollCalc( 0, event.GetOrientation() );
2958 }
void DoScrollCalc(const int position, const int orientation)
Definition: mathplot.cpp:2850

References DoScrollCalc().

◆ OnShowPopupMenu()

void mpWindow::OnShowPopupMenu ( wxMouseEvent &  event)
protected

Definition at line 2403 of file mathplot.cpp.

2404 {
2405  m_clickedX = event.GetX();
2406  m_clickedY = event.GetY();
2407  PopupMenu( &m_popmenu, event.GetX(), event.GetY() );
2408 }
int m_clickedX
Definition: mathplot.h:1492
int m_clickedY
Definition: mathplot.h:1493
wxMenu m_popmenu
Definition: mathplot.h:1475

References m_clickedX, m_clickedY, and m_popmenu.

◆ OnSize()

void mpWindow::OnSize ( wxSizeEvent &  event)
protected

Definition at line 2445 of file mathplot.cpp.

2446 {
2447  // Try to fit again with the new window size:
2449 #ifdef MATHPLOT_DO_LOGGING
2450  wxLogMessage( "mpWindow::OnSize() m_scrX = %d, m_scrY = %d", m_scrX, m_scrY );
2451 #endif // MATHPLOT_DO_LOGGING
2452 }
double m_desiredXmax
Definition: mathplot.h:1497
double m_desiredYmax
Definition: mathplot.h:1497
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1497
void Fit() override
Set view to fit global bounding box of all plot layers and refresh display.
Definition: mathplot.cpp:1995
double m_desiredYmin
Definition: mathplot.h:1497
int m_scrY
Definition: mathplot.h:1491
int m_scrX
Definition: mathplot.h:1490

References Fit(), m_desiredXmax, m_desiredXmin, m_desiredYmax, m_desiredYmin, m_scrX, and m_scrY.

◆ OnZoomIn()

void mpWindow::OnZoomIn ( wxCommandEvent &  event)
protected

Definition at line 2433 of file mathplot.cpp.

2434 {
2435  ZoomIn( wxPoint( m_mouseMClick.x, m_mouseMClick.y ) );
2436 }
wxPoint m_mouseMClick
Definition: mathplot.h:1507
void ZoomIn(const wxPoint &centerPoint=wxDefaultPosition)
Zoom into current view and refresh display.
Definition: mathplot.cpp:2238

References m_mouseMClick, and ZoomIn().

◆ OnZoomOut()

void mpWindow::OnZoomOut ( wxCommandEvent &  event)
protected

Definition at line 2439 of file mathplot.cpp.

2440 {
2441  ZoomOut();
2442 }
void ZoomOut(const wxPoint &centerPoint=wxDefaultPosition)
Zoom out current view and refresh display.
Definition: mathplot.cpp:2295

References ZoomOut().

◆ p2x()

double mpWindow::p2x ( wxCoord  pixelCoordX)
inline

Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates, using current mpWindow position and scale.

See also
p2y,x2p,y2p

Definition at line 1185 of file mathplot.h.

1185 { return m_posX + pixelCoordX / m_scaleX; }
double m_posX
Definition: mathplot.h:1488
double m_scaleX
Definition: mathplot.h:1486

Referenced by DoZoomInXCalc(), DoZoomOutXCalc(), mpScaleXBase::getVisibleDataRange(), OnCenter(), CURSOR::Plot(), mpFX::Plot(), mpProfile::Plot(), ZoomIn(), ZoomOut(), and ZoomRect().

◆ p2y()

double mpWindow::p2y ( wxCoord  pixelCoordY)
inline

Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates, using current mpWindow position and scale.

See also
p2x,x2p,y2p

Definition at line 1190 of file mathplot.h.

1190 { return m_posY - pixelCoordY / m_scaleY; }
double m_scaleY
Definition: mathplot.h:1487
double m_posY
Definition: mathplot.h:1489

Referenced by DoZoomInYCalc(), DoZoomOutYCalc(), mpScaleY::getVisibleDataRange(), OnCenter(), mpFY::Plot(), ZoomIn(), ZoomOut(), and ZoomRect().

◆ SaveScreenshot()

bool mpWindow::SaveScreenshot ( const wxString &  filename,
wxBitmapType  type = wxBITMAP_TYPE_BMP,
wxSize  imageSize = wxDefaultSize,
bool  fit = false 
)

Draw the window on a wxBitmap, then save it to a file.

Parameters
filenameFile name where to save the screenshot
typeimage type to be saved: see wxImage output file types for flags
imageSizeSet a size for the output image. Default is the same as the screen size
fitDecide whether to fit the plot into the size

Definition at line 3033 of file mathplot.cpp.

3035 {
3036  int sizeX, sizeY;
3037  int bk_scrX, bk_scrY;
3038 
3039  if( imageSize == wxDefaultSize )
3040  {
3041  sizeX = m_scrX;
3042  sizeY = m_scrY;
3043  }
3044  else
3045  {
3046  sizeX = imageSize.x;
3047  sizeY = imageSize.y;
3048  bk_scrX = m_scrX;
3049  bk_scrY = m_scrY;
3050  SetScr( sizeX, sizeY );
3051  }
3052 
3053  wxBitmap screenBuffer( sizeX, sizeY );
3054  wxMemoryDC screenDC;
3055  screenDC.SelectObject( screenBuffer );
3056  screenDC.SetPen( *wxTRANSPARENT_PEN );
3057  wxBrush brush( GetBackgroundColour() );
3058  screenDC.SetBrush( brush );
3059  screenDC.DrawRectangle( 0, 0, sizeX, sizeY );
3060 
3061  if( fit )
3062  {
3063  Fit( m_minX, m_maxX, m_minY, m_maxY, &sizeX, &sizeY );
3064  }
3065  else
3066  {
3068  }
3069 
3070  // Draw all the layers:
3071  wxLayerList::iterator li;
3072 
3073  for( li = m_layers.begin(); li != m_layers.end(); li++ )
3074  (*li)->Plot( screenDC, *this );
3075 
3076  if( imageSize != wxDefaultSize )
3077  {
3078  // Restore dimensions
3079  SetScr( bk_scrX, bk_scrY );
3080  Fit( m_desiredXmin, m_desiredXmax, m_desiredYmin, m_desiredYmax, &bk_scrX, &bk_scrY );
3081  UpdateAll();
3082  }
3083 
3084  // Once drawing is complete, actually save screen shot
3085  wxImage screenImage = screenBuffer.ConvertToImage();
3086  return screenImage.SaveFile( filename, type );
3087 }
double m_desiredXmax
Definition: mathplot.h:1497
double m_minY
Definition: mathplot.h:1484
wxLayerList m_layers
Definition: mathplot.h:1474
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803
double m_desiredYmax
Definition: mathplot.h:1497
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1497
void Fit() override
Set view to fit global bounding box of all plot layers and refresh display.
Definition: mathplot.cpp:1995
double m_minX
Definition: mathplot.h:1482
double m_desiredYmin
Definition: mathplot.h:1497
void SetScr(int scrX, int scrY)
Set current view's dimensions in device context units.
Definition: mathplot.h:1180
int m_scrY
Definition: mathplot.h:1491
double m_maxX
Definition: mathplot.h:1483
int m_scrX
Definition: mathplot.h:1490
double m_maxY
Definition: mathplot.h:1485

References Fit(), m_desiredXmax, m_desiredXmin, m_desiredYmax, m_desiredYmin, m_layers, m_maxX, m_maxY, m_minX, m_minY, m_scrX, m_scrY, SetScr(), and UpdateAll().

Referenced by SIM_PLOT_FRAME::menuSaveImage().

◆ SetColourTheme()

void mpWindow::SetColourTheme ( const wxColour &  bgColour,
const wxColour &  drawColour,
const wxColour &  axesColour 
)

Set Color theme.

Provide colours to set a new colour theme.

Parameters
bgColourBackground colour
drawColourThe colour used to draw all elements in foreground, axes excluded
axesColourThe colour used to draw axes (but not their labels)

Definition at line 3167 of file mathplot.cpp.

3170 {
3171  SetBackgroundColour( bgColour );
3172  SetForegroundColour( drawColour );
3173  m_bgColour = bgColour;
3174  m_fgColour = drawColour;
3175  m_axColour = axesColour;
3176  // cycle between layers to set colours and properties to them
3177  wxLayerList::iterator li;
3178 
3179  for( li = m_layers.begin(); li != m_layers.end(); li++ )
3180  {
3181  if( (*li)->GetLayerType() == mpLAYER_AXIS )
3182  {
3183  wxPen axisPen = (*li)->GetPen(); // Get the old pen to modify only colour, not style or width
3184  axisPen.SetColour( axesColour );
3185  (*li)->SetPen( axisPen );
3186  }
3187 
3188  if( (*li)->GetLayerType() == mpLAYER_INFO )
3189  {
3190  wxPen infoPen = (*li)->GetPen(); // Get the old pen to modify only colour, not style or width
3191  infoPen.SetColour( drawColour );
3192  (*li)->SetPen( infoPen );
3193  }
3194  }
3195 }
wxColour m_axColour
Definition: mathplot.h:1480
wxLayerList m_layers
Definition: mathplot.h:1474
wxColour m_fgColour
Definition: mathplot.h:1479
wxColour m_bgColour
Definition: mathplot.h:1478

References m_axColour, m_bgColour, m_fgColour, m_layers, mpLAYER_AXIS, and mpLAYER_INFO.

Referenced by mpPrintout::OnPrintPage(), and SIM_PLOT_PANEL::SIM_PLOT_PANEL().

◆ SetLayerVisible() [1/2]

void mpWindow::SetLayerVisible ( const wxString &  name,
bool  viewable 
)

Sets the visibility of a layer by its name.

Parameters
nameThe layer name to set visibility
viewablethe view status to be set

Definition at line 3127 of file mathplot.cpp.

3128 {
3129  mpLayer* lx = GetLayerByName( name );
3130 
3131  if( lx )
3132  {
3133  lx->SetVisible( viewable );
3134  UpdateAll();
3135  }
3136 }
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803
void SetVisible(bool show)
Sets layer visibility.
Definition: mathplot.h:301
mpLayer * GetLayerByName(const wxString &name)
Definition: mathplot.cpp:3013
const char * name
Definition: DXF_plotter.cpp:61

References GetLayerByName(), name, mpLayer::SetVisible(), and UpdateAll().

◆ SetLayerVisible() [2/2]

void mpWindow::SetLayerVisible ( const unsigned int  position,
bool  viewable 
)

Sets the visibility of a layer by its position in layer list.

Parameters
positionThe layer position in layer list
viewablethe view status to be set

Definition at line 3147 of file mathplot.cpp.

3148 {
3149  mpLayer* lx = GetLayer( position );
3150 
3151  if( lx )
3152  {
3153  lx->SetVisible( viewable );
3154  UpdateAll();
3155  }
3156 }
mpLayer * GetLayer(int position)
Definition: mathplot.cpp:3004
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803
void SetVisible(bool show)
Sets layer visibility.
Definition: mathplot.h:301

References GetLayer(), mpLayer::SetVisible(), and UpdateAll().

◆ SetMarginBottom()

void mpWindow::SetMarginBottom ( int  bottom)
inline

Set the bottom margin.

Parameters
bottomBottom Margin

Definition at line 1341 of file mathplot.h.

1341 { m_marginBottom = bottom; };
int m_marginBottom
Definition: mathplot.h:1499

◆ SetMarginLeft()

void mpWindow::SetMarginLeft ( int  left)
inline

Set the left margin.

Parameters
leftLeft Margin

Definition at line 1343 of file mathplot.h.

1343 { m_marginLeft = left; };
int m_marginLeft
Definition: mathplot.h:1499

◆ SetMarginRight()

void mpWindow::SetMarginRight ( int  right)
inline

Set the right margin.

Parameters
rightRight Margin

Definition at line 1339 of file mathplot.h.

1339 { m_marginRight = right; };
int m_marginRight
Definition: mathplot.h:1499

◆ SetMargins()

void mpWindow::SetMargins ( int  top,
int  right,
int  bottom,
int  left 
)

Set window margins, creating a blank area where some kinds of layers cannot draw.

This is useful for example to draw axes outside the area where the plots are drawn.

Parameters
topTop border
rightRight border
bottomBottom border
leftLeft border

Definition at line 3090 of file mathplot.cpp.

3091 {
3092  m_marginTop = top;
3093  m_marginRight = right;
3094  m_marginBottom = bottom;
3095  m_marginLeft = left;
3096 }
int m_marginRight
Definition: mathplot.h:1499
int m_marginLeft
Definition: mathplot.h:1499
int m_marginTop
Definition: mathplot.h:1499
int m_marginBottom
Definition: mathplot.h:1499

References m_marginBottom, m_marginLeft, m_marginRight, and m_marginTop.

Referenced by SIM_PLOT_PANEL::SIM_PLOT_PANEL().

◆ SetMarginTop()

void mpWindow::SetMarginTop ( int  top)
inline

Set the top margin.

Parameters
topTop Margin

Definition at line 1337 of file mathplot.h.

1337 { m_marginTop = top; };
int m_marginTop
Definition: mathplot.h:1499

◆ SetMPScrollbars()

void mpWindow::SetMPScrollbars ( bool  status)

Enable/disable scrollbars.

Parameters
statusSet to true to show scrollbars
  • m_scroll.x = (int) floor((m_posX - m_minX)*m_scaleX);

Definition at line 2654 of file mathplot.cpp.

2655 {
2656  // Temporary behaviour: always disable scrollbars
2657  m_enableScrollBars = status; // false;
2658 
2659  if( status == false )
2660  {
2661  SetScrollbar( wxHORIZONTAL, 0, 0, 0 );
2662  SetScrollbar( wxVERTICAL, 0, 0, 0 );
2663  }
2664 
2665  // else the scroll bars will be updated in UpdateAll();
2666  UpdateAll();
2667 
2668  // EnableScrolling(false, false);
2669  // m_enableScrollBars = status;
2670  // EnableScrolling(status, status);
2671  /* m_scroll.x = (int) floor((m_posX - m_minX)*m_scaleX);
2672  * m_scroll.y = (int) floor((m_posY - m_minY)*m_scaleY);*/
2673  // int scrollWidth = (int) floor((m_maxX - m_minX)*m_scaleX) - m_scrX;
2674  // int scrollHeight = (int) floor((m_minY - m_maxY)*m_scaleY) - m_scrY;
2675 
2677  // m_scroll.y = (int) floor((m_maxY - m_posY /*- m_minY*/)*m_scaleY);
2678  // int scrollWidth = (int) floor(((m_maxX - m_minX) - (m_desiredXmax - m_desiredXmin))*m_scaleX);
2679  // int scrollHeight = (int) floor(((m_maxY - m_minY) - (m_desiredYmax - m_desiredYmin))*m_scaleY);
2680  // #ifdef MATHPLOT_DO_LOGGING
2681  // wxLogMessage( "mpWindow::SetMPScrollbars() scrollWidth = %d, scrollHeight = %d", scrollWidth, scrollHeight);
2682  // #endif
2683  // if(status) {
2684  // SetScrollbars(1,
2685  // 1,
2686  // scrollWidth,
2687  // scrollHeight,
2688  // m_scroll.x,
2689  // m_scroll.y);
2691  // }
2692  // Refresh(false);*/
2693 }
bool m_enableScrollBars
Definition: mathplot.h:1509
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803

References m_enableScrollBars, and UpdateAll().

◆ SetPos()

void mpWindow::SetPos ( double  posX,
double  posY 
)
inline

Set current view's X and Y position and refresh display.

Parameters
posXNew position that corresponds to the center point of the view.
posYNew position that corresponds to the center point of the view.

Definition at line 1173 of file mathplot.h.

1173 { m_posX = posX; m_posY = posY; UpdateAll(); }
double m_posX
Definition: mathplot.h:1488
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803
double m_posY
Definition: mathplot.h:1489

Referenced by OnCenter().

◆ SetPosX()

void mpWindow::SetPosX ( double  posX)
inline

Set current view's X position and refresh display.

Parameters
posXNew position that corresponds to the center point of the view.

Definition at line 1162 of file mathplot.h.

1162 { m_posX = posX; UpdateAll(); }
double m_posX
Definition: mathplot.h:1488
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803

Referenced by DoScrollCalc().

◆ SetPosY()

void mpWindow::SetPosY ( double  posY)
inline

Set current view's Y position and refresh display.

Parameters
posYNew position that corresponds to the center point of the view.

Definition at line 1167 of file mathplot.h.

1167 { m_posY = posY; UpdateAll(); }
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803
double m_posY
Definition: mathplot.h:1489

Referenced by DoScrollCalc().

◆ SetScaleX()

void mpWindow::SetScaleX ( double  scaleX)

Set current view's X scale and refresh display.

Parameters
scaleXNew scale, must not be 0.

Definition at line 2975 of file mathplot.cpp.

2976 {
2977  if( scaleX!=0 )
2978  m_scaleX = scaleX;
2979 
2980  UpdateAll();
2981 }
double m_scaleX
Definition: mathplot.h:1486
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803

References m_scaleX, and UpdateAll().

◆ SetScaleY()

void mpWindow::SetScaleY ( double  scaleY)
inline

Set current view's Y scale and refresh display.

Parameters
scaleYNew scale, must not be 0.

Definition at line 1151 of file mathplot.h.

1152  {
1153  if( scaleY!=0 )
1154  m_scaleY = scaleY;
1155 
1156  UpdateAll();
1157  }
double m_scaleY
Definition: mathplot.h:1487
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803

◆ SetScr()

void mpWindow::SetScr ( int  scrX,
int  scrY 
)
inline

Set current view's dimensions in device context units.

Needed by plotting functions. It doesn't refresh display.

Parameters
scrXNew position that corresponds to the center point of the view.
scrYNew position that corresponds to the center point of the view.

Definition at line 1180 of file mathplot.h.

1180 { m_scrX = scrX; m_scrY = scrY; }
int m_scrY
Definition: mathplot.h:1491
int m_scrX
Definition: mathplot.h:1490

Referenced by SaveScreenshot().

◆ SetXView()

bool mpWindow::SetXView ( double  pos,
double  desiredMax,
double  desiredMin 
)
protectedvirtual

Applies new X view coordinates depending on the settings.

Returns
true if the changes were applied

Definition at line 2210 of file mathplot.cpp.

2211 {
2212  // if(!CheckXLimits(desiredMax, desiredMin))
2213  // return false;
2214 
2215  m_posX = pos;
2216  m_desiredXmax = desiredMax;
2217  m_desiredXmin = desiredMin;
2219 
2220  return true;
2221 }
double m_desiredXmax
Definition: mathplot.h:1497
double m_posX
Definition: mathplot.h:1488
void AdjustLimitedView()
Definition: mathplot.cpp:2166
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1497

References AdjustLimitedView(), m_desiredXmax, m_desiredXmin, and m_posX.

Referenced by OnMouseMove(), and OnMouseWheel().

◆ SetYView()

bool mpWindow::SetYView ( double  pos,
double  desiredMax,
double  desiredMin 
)
protectedvirtual

Applies new Y view coordinates depending on the settings.

Returns
true if the changes were applied

Definition at line 2224 of file mathplot.cpp.

2225 {
2226  // if(!CheckYLimits(desiredMax, desiredMin))
2227  // return false;
2228 
2229  m_posY = pos;
2230  m_desiredYmax = desiredMax;
2231  m_desiredYmin = desiredMin;
2233 
2234  return true;
2235 }
double m_desiredYmax
Definition: mathplot.h:1497
void AdjustLimitedView()
Definition: mathplot.cpp:2166
double m_posY
Definition: mathplot.h:1489
double m_desiredYmin
Definition: mathplot.h:1497

References AdjustLimitedView(), m_desiredYmax, m_desiredYmin, and m_posY.

Referenced by OnMouseMove(), and OnMouseWheel().

◆ UpdateAll()

void mpWindow::UpdateAll ( )

Refresh display.

Definition at line 2803 of file mathplot.cpp.

2804 {
2805  if( UpdateBBox() )
2806  {
2807  if( m_enableScrollBars )
2808  {
2809  int cx, cy;
2810  GetClientSize( &cx, &cy );
2811  // Do x scroll bar
2812  {
2813  // Convert margin sizes from pixels to coordinates
2814  double leftMargin = m_marginLeft / m_scaleX;
2815  // Calculate the range in coords that we want to scroll over
2816  double maxX = (m_desiredXmax > m_maxX) ? m_desiredXmax : m_maxX;
2817  double minX = (m_desiredXmin < m_minX) ? m_desiredXmin : m_minX;
2818 
2819  if( (m_posX + leftMargin) < minX )
2820  minX = m_posX + leftMargin;
2821 
2822  // Calculate scroll bar size and thumb position
2823  int sizeX = (int) ( (maxX - minX) * m_scaleX );
2824  int thumbX = (int) ( ( (m_posX + leftMargin) - minX ) * m_scaleX );
2825  SetScrollbar( wxHORIZONTAL, thumbX, cx - (m_marginRight + m_marginLeft), sizeX );
2826  }
2827  // Do y scroll bar
2828  {
2829  // Convert margin sizes from pixels to coordinates
2830  double topMargin = m_marginTop / m_scaleY;
2831  // Calculate the range in coords that we want to scroll over
2832  double maxY = (m_desiredYmax > m_maxY) ? m_desiredYmax : m_maxY;
2833 
2834  if( (m_posY - topMargin) > maxY )
2835  maxY = m_posY - topMargin;
2836 
2837  double minY = (m_desiredYmin < m_minY) ? m_desiredYmin : m_minY;
2838  // Calculate scroll bar size and thumb position
2839  int sizeY = (int) ( (maxY - minY) * m_scaleY );
2840  int thumbY = (int) ( ( maxY - (m_posY - topMargin) ) * m_scaleY );
2841  SetScrollbar( wxVERTICAL, thumbY, cy - (m_marginTop + m_marginBottom), sizeY );
2842  }
2843  }
2844  }
2845 
2846  Refresh( false );
2847 }
int m_marginRight
Definition: mathplot.h:1499
bool m_enableScrollBars
Definition: mathplot.h:1509
int m_marginLeft
Definition: mathplot.h:1499
double m_desiredXmax
Definition: mathplot.h:1497
double m_scaleY
Definition: mathplot.h:1487
double m_posX
Definition: mathplot.h:1488
double m_minY
Definition: mathplot.h:1484
double m_scaleX
Definition: mathplot.h:1486
double m_desiredYmax
Definition: mathplot.h:1497
void Refresh()
Update the board display after modifying it by a python script (note: it is automatically called by a...
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1497
double m_posY
Definition: mathplot.h:1489
int m_marginTop
Definition: mathplot.h:1499
double m_minX
Definition: mathplot.h:1482
double m_desiredYmin
Definition: mathplot.h:1497
int m_marginBottom
Definition: mathplot.h:1499
virtual bool UpdateBBox()
Recalculate global layer bounding box, and save it in m_minX,...
Definition: mathplot.cpp:2695
double m_maxX
Definition: mathplot.h:1483
double m_maxY
Definition: mathplot.h:1485

References m_desiredXmax, m_desiredXmin, m_desiredYmax, m_desiredYmin, m_enableScrollBars, m_marginBottom, m_marginLeft, m_marginRight, m_marginTop, m_maxX, m_maxY, m_minX, m_minY, m_posX, m_posY, m_scaleX, m_scaleY, Refresh(), and UpdateBBox().

Referenced by AddLayer(), SIM_PLOT_PANEL::AddTrace(), DelAllLayers(), DelLayer(), Fit(), OnMouseMove(), OnMouseWheel(), mpPrintout::OnPrintPage(), SIM_PLOT_FRAME::onSimFinished(), SaveScreenshot(), SetLayerVisible(), SetMPScrollbars(), SetScaleX(), SIM_PLOT_PANEL::ShowGrid(), SIM_PLOT_PANEL::ShowLegend(), SIM_PLOT_PANEL::SIM_PLOT_PANEL(), ZoomIn(), ZoomInX(), ZoomInY(), ZoomOut(), ZoomOutX(), and ZoomOutY().

◆ UpdateBBox()

bool mpWindow::UpdateBBox ( )
protectedvirtual

Recalculate global layer bounding box, and save it in m_minX,...

Returns
true if there is any valid BBox information.

Definition at line 2695 of file mathplot.cpp.

2696 {
2697  m_minX = 0.0;
2698  m_maxX = 1.0;
2699  m_minY = 0.0;
2700  m_maxY = 1.0;
2701 
2702  return true;
2703 
2704 #if 0
2705  bool first = true;
2706 
2707  for( wxLayerList::iterator li = m_layers.begin(); li != m_layers.end(); li++ )
2708  {
2709  mpLayer* f = *li;
2710 
2711  if( f->HasBBox() )
2712  {
2713  if( first )
2714  {
2715  first = false;
2716  m_minX = f->GetMinX(); m_maxX = f->GetMaxX();
2717  m_minY = f->GetMinY(); m_maxY = f->GetMaxY();
2718  }
2719  else
2720  {
2721  if( f->GetMinX()<m_minX )
2722  m_minX = f->GetMinX();
2723 
2724  if( f->GetMaxX()>m_maxX )
2725  m_maxX = f->GetMaxX();
2726 
2727  if( f->GetMinY()<m_minY )
2728  m_minY = f->GetMinY();
2729 
2730  if( f->GetMaxY()>m_maxY )
2731  m_maxY = f->GetMaxY();
2732  }
2733  }
2734 
2735  // node = node->GetNext();
2736  }
2737 
2738 #ifdef MATHPLOT_DO_LOGGING
2739  wxLogDebug( wxT(
2740  "[mpWindow::UpdateBBox] Bounding box: Xmin = %f, Xmax = %f, Ymin = %f, YMax = %f" ), m_minX, m_maxX, m_minY,
2741  m_maxY );
2742 #endif // MATHPLOT_DO_LOGGING
2743 
2744  return first == false;
2745 #endif
2746 }
double m_minY
Definition: mathplot.h:1484
wxLayerList m_layers
Definition: mathplot.h:1474
virtual double GetMaxX()
Get inclusive right border of bounding box.
Definition: mathplot.h:179
virtual double GetMaxY()
Get inclusive top border of bounding box.
Definition: mathplot.h:189
virtual double GetMinX()
Get inclusive left border of bounding box.
Definition: mathplot.h:174
virtual double GetMinY()
Get inclusive bottom border of bounding box.
Definition: mathplot.h:184
double m_minX
Definition: mathplot.h:1482
virtual bool HasBBox()
Check whether this layer has a bounding box.
Definition: mathplot.h:160
double m_maxX
Definition: mathplot.h:1483
double m_maxY
Definition: mathplot.h:1485

References mpLayer::GetMaxX(), mpLayer::GetMaxY(), mpLayer::GetMinX(), mpLayer::GetMinY(), mpLayer::HasBBox(), m_layers, m_maxX, m_maxY, m_minX, and m_minY.

Referenced by Fit(), and UpdateAll().

◆ x2p()

wxCoord mpWindow::x2p ( double  x)
inline

Converts graph (floating point) coordinates into mpWindow (screen) pixel coordinates, using current mpWindow position and scale.

See also
p2x,p2y,y2p

Definition at line 1195 of file mathplot.h.

1195 { return (wxCoord) ( (x - m_posX) * m_scaleX ); }
double m_posX
Definition: mathplot.h:1488
double m_scaleX
Definition: mathplot.h:1486

Referenced by CURSOR::Inside(), CURSOR::Plot(), mpFY::Plot(), mpFXY::Plot(), mpScaleY::Plot(), mpMovableObject::Plot(), mpBitmapLayer::Plot(), and CURSOR::UpdateReference().

◆ y2p()

wxCoord mpWindow::y2p ( double  y)
inline

Converts graph (floating point) coordinates into mpWindow (screen) pixel coordinates, using current mpWindow position and scale.

See also
p2x,p2y,x2p

Definition at line 1200 of file mathplot.h.

1200 { return (wxCoord) ( (m_posY - y) * m_scaleY ); }
double m_scaleY
Definition: mathplot.h:1487
double m_posY
Definition: mathplot.h:1489

Referenced by CURSOR::Inside(), CURSOR::Plot(), mpFX::Plot(), mpFXY::Plot(), mpProfile::Plot(), mpScaleXBase::Plot(), mpMovableObject::Plot(), mpBitmapLayer::Plot(), and CURSOR::UpdateReference().

◆ ZoomIn()

void mpWindow::ZoomIn ( const wxPoint &  centerPoint = wxDefaultPosition)

Zoom into current view and refresh display.

Parameters
centerPointThe point (pixel coordinates) that will stay in the same position on the screen after the zoom (by default, the center of the mpWindow).

Definition at line 2238 of file mathplot.cpp.

2239 {
2240  wxPoint c( centerPoint );
2241 
2242  if( c == wxDefaultPosition )
2243  {
2244  GetClientSize( &m_scrX, &m_scrY );
2245  c.x = (m_scrX - m_marginLeft - m_marginRight) / 2 + m_marginLeft; // c.x = m_scrX/2;
2246  c.y = (m_scrY - m_marginTop - m_marginBottom) / 2 - m_marginTop; // c.y = m_scrY/2;
2247  }
2248  else
2249  {
2250  c.x = std::max( c.x, m_marginLeft );
2251  c.x = std::min( c.x, m_scrX - m_marginRight );
2252  c.y = std::max( c.y, m_marginTop );
2253  c.y = std::min( c.y, m_scrY - m_marginBottom );
2254  }
2255 
2256  // Preserve the position of the clicked point:
2257  double prior_layer_x = p2x( c.x );
2258  double prior_layer_y = p2y( c.y );
2259 
2260  // Zoom in:
2261  const double MAX_SCALE = 1e6;
2262  double newScaleX = m_scaleX * zoomIncrementalFactor;
2263  double newScaleY = m_scaleY * zoomIncrementalFactor;
2264 
2265  // Baaaaad things happen when you zoom in too much..
2266  if( newScaleX <= MAX_SCALE && newScaleY <= MAX_SCALE )
2267  {
2268  m_scaleX = newScaleX;
2269  m_scaleY = newScaleY;
2270  }
2271  else
2272  {
2273  return;
2274  }
2275 
2276  // Adjust the new m_posx/y:
2277  m_posX = prior_layer_x - c.x / m_scaleX;
2278  m_posY = prior_layer_y + c.y / m_scaleY;
2279 
2281  m_desiredXmax = m_posX + (m_scrX - m_marginLeft - m_marginRight) / m_scaleX; // m_desiredXmax = m_posX + m_scrX / m_scaleX;
2283  m_desiredYmin = m_posY - (m_scrY - m_marginTop - m_marginBottom) / m_scaleY; // m_desiredYmin = m_posY - m_scrY / m_scaleY;
2285 
2286 #ifdef MATHPLOT_DO_LOGGING
2287  wxLogMessage( "mpWindow::ZoomIn() prior coords: (%f,%f), new coords: (%f,%f) SHOULD BE EQUAL!!",
2288  prior_layer_x, prior_layer_y, p2x( c.x ), p2y( c.y ) );
2289 #endif
2290 
2291  UpdateAll();
2292 }
int m_marginRight
Definition: mathplot.h:1499
int m_marginLeft
Definition: mathplot.h:1499
double p2x(wxCoord pixelCoordX)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1185
double m_desiredXmax
Definition: mathplot.h:1497
double m_scaleY
Definition: mathplot.h:1487
double m_posX
Definition: mathplot.h:1488
double p2y(wxCoord pixelCoordY)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1190
double m_scaleX
Definition: mathplot.h:1486
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803
double m_desiredYmax
Definition: mathplot.h:1497
void AdjustLimitedView()
Definition: mathplot.cpp:2166
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1497
#define MAX_SCALE
double m_posY
Definition: mathplot.h:1489
int m_marginTop
Definition: mathplot.h:1499
double m_desiredYmin
Definition: mathplot.h:1497
#define max(a, b)
Definition: auxiliary.h:86
int m_marginBottom
Definition: mathplot.h:1499
int m_scrY
Definition: mathplot.h:1491
static double zoomIncrementalFactor
This value sets the zoom steps whenever the user clicks "Zoom in/out" or performs zoom with the mouse...
Definition: mathplot.h:1327
int m_scrX
Definition: mathplot.h:1490
#define min(a, b)
Definition: auxiliary.h:85

References AdjustLimitedView(), m_desiredXmax, m_desiredXmin, m_desiredYmax, m_desiredYmin, m_marginBottom, m_marginLeft, m_marginRight, m_marginTop, m_posX, m_posY, m_scaleX, m_scaleY, m_scrX, m_scrY, max, MAX_SCALE, min, p2x(), p2y(), UpdateAll(), and zoomIncrementalFactor.

Referenced by SIM_PLOT_FRAME::menuZoomIn(), OnMouseWheel(), and OnZoomIn().

◆ ZoomInX()

void mpWindow::ZoomInX ( )

Zoom in current view along X and refresh display.

Definition at line 2342 of file mathplot.cpp.

2343 {
2345  UpdateAll();
2346 }
double m_scaleX
Definition: mathplot.h:1486
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803
static double zoomIncrementalFactor
This value sets the zoom steps whenever the user clicks "Zoom in/out" or performs zoom with the mouse...
Definition: mathplot.h:1327

References m_scaleX, UpdateAll(), and zoomIncrementalFactor.

◆ ZoomInY()

void mpWindow::ZoomInY ( )

Zoom in current view along Y and refresh display.

Definition at line 2356 of file mathplot.cpp.

2357 {
2359  UpdateAll();
2360 }
double m_scaleY
Definition: mathplot.h:1487
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803
static double zoomIncrementalFactor
This value sets the zoom steps whenever the user clicks "Zoom in/out" or performs zoom with the mouse...
Definition: mathplot.h:1327

References m_scaleY, UpdateAll(), and zoomIncrementalFactor.

◆ ZoomOut()

void mpWindow::ZoomOut ( const wxPoint &  centerPoint = wxDefaultPosition)

Zoom out current view and refresh display.

Parameters
centerPointThe point (pixel coordinates) that will stay in the same position on the screen after the zoom (by default, the center of the mpWindow).

Definition at line 2295 of file mathplot.cpp.

2296 {
2297  wxPoint c( centerPoint );
2298 
2299  if( c == wxDefaultPosition )
2300  {
2301  GetClientSize( &m_scrX, &m_scrY );
2302  c.x = (m_scrX - m_marginLeft - m_marginRight) / 2 + m_marginLeft; // c.x = m_scrX/2;
2303  c.y = (m_scrY - m_marginTop - m_marginBottom) / 2 - m_marginTop; // c.y = m_scrY/2;
2304  }
2305 
2306  // Preserve the position of the clicked point:
2307  double prior_layer_x = p2x( c.x );
2308  double prior_layer_y = p2y( c.y );
2309 
2310  // Zoom out:
2313 
2314  // Adjust the new m_posx/y:
2315  m_posX = prior_layer_x - c.x / m_scaleX;
2316  m_posY = prior_layer_y + c.y / m_scaleY;
2317 
2319  m_desiredXmax = m_posX + (m_scrX - m_marginLeft - m_marginRight) / m_scaleX; // m_desiredXmax = m_posX + m_scrX / m_scaleX;
2321  m_desiredYmin = m_posY - (m_scrY - m_marginTop - m_marginBottom) / m_scaleY; // m_desiredYmin = m_posY - m_scrY / m_scaleY;
2322 
2323  // printf("desired xmin %.1f ymin %.1f xmax %.1f ymax %.1f l %d\n", m_desiredXmin, m_desiredYmin, m_desiredXmax, m_desiredYmax, !!m_enableLimitedView);
2324  // printf("current xmin %.1f ymin %.1f xmax %.1f ymax %.1f\n", m_minX, m_minY, m_maxX, m_maxY);
2325 
2328  {
2329  // printf("call fit()\n");
2330  Fit();
2331  }
2332 
2333 #ifdef MATHPLOT_DO_LOGGING
2334  wxLogMessage(
2335  "mpWindow::ZoomOut() prior coords: (%f,%f), new coords: (%f,%f) SHOULD BE EQUAL!!",
2336  prior_layer_x, prior_layer_y, p2x( c.x ), p2y( c.y ) );
2337 #endif
2338  UpdateAll();
2339 }
int m_marginRight
Definition: mathplot.h:1499
int m_marginLeft
Definition: mathplot.h:1499
double p2x(wxCoord pixelCoordX)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1185
double m_desiredXmax
Definition: mathplot.h:1497
double m_scaleY
Definition: mathplot.h:1487
double m_posX
Definition: mathplot.h:1488
double p2y(wxCoord pixelCoordY)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1190
double m_scaleX
Definition: mathplot.h:1486
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803
double m_desiredYmax
Definition: mathplot.h:1497
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1497
bool CheckYLimits(double &desiredMax, double &desiredMin) const
Definition: mathplot.h:1449
double m_posY
Definition: mathplot.h:1489
void Fit() override
Set view to fit global bounding box of all plot layers and refresh display.
Definition: mathplot.cpp:1995
int m_marginTop
Definition: mathplot.h:1499
double m_desiredYmin
Definition: mathplot.h:1497
int m_marginBottom
Definition: mathplot.h:1499
int m_scrY
Definition: mathplot.h:1491
bool CheckXLimits(double &desiredMax, double &desiredMin) const
Definition: mathplot.h:1442
static double zoomIncrementalFactor
This value sets the zoom steps whenever the user clicks "Zoom in/out" or performs zoom with the mouse...
Definition: mathplot.h:1327
int m_scrX
Definition: mathplot.h:1490

References CheckXLimits(), CheckYLimits(), Fit(), m_desiredXmax, m_desiredXmin, m_desiredYmax, m_desiredYmin, m_marginBottom, m_marginLeft, m_marginRight, m_marginTop, m_posX, m_posY, m_scaleX, m_scaleY, m_scrX, m_scrY, p2x(), p2y(), UpdateAll(), and zoomIncrementalFactor.

Referenced by SIM_PLOT_FRAME::menuZoomOut(), OnMouseWheel(), and OnZoomOut().

◆ ZoomOutX()

void mpWindow::ZoomOutX ( )

Zoom out current view along X and refresh display.

Definition at line 2349 of file mathplot.cpp.

2350 {
2352  UpdateAll();
2353 }
double m_scaleX
Definition: mathplot.h:1486
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803
static double zoomIncrementalFactor
This value sets the zoom steps whenever the user clicks "Zoom in/out" or performs zoom with the mouse...
Definition: mathplot.h:1327

References m_scaleX, UpdateAll(), and zoomIncrementalFactor.

◆ ZoomOutY()

void mpWindow::ZoomOutY ( )

Zoom out current view along Y and refresh display.

Definition at line 2363 of file mathplot.cpp.

2364 {
2366  UpdateAll();
2367 }
double m_scaleY
Definition: mathplot.h:1487
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2803
static double zoomIncrementalFactor
This value sets the zoom steps whenever the user clicks "Zoom in/out" or performs zoom with the mouse...
Definition: mathplot.h:1327

References m_scaleY, UpdateAll(), and zoomIncrementalFactor.

◆ ZoomRect()

void mpWindow::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)

Definition at line 2370 of file mathplot.cpp.

2371 {
2372  // Compute the 2 corners in graph coordinates:
2373  double p0x = p2x( p0.x );
2374  double p0y = p2y( p0.y );
2375  double p1x = p2x( p1.x );
2376  double p1y = p2y( p1.y );
2377 
2378  // Order them:
2379  double zoom_x_min = p0x<p1x ? p0x : p1x;
2380  double zoom_x_max = p0x>p1x ? p0x : p1x;
2381  double zoom_y_min = p0y<p1y ? p0y : p1y;
2382  double zoom_y_max = p0y>p1y ? p0y : p1y;
2383 
2384 #ifdef MATHPLOT_DO_LOGGING
2385  wxLogMessage( "Zoom: (%f,%f)-(%f,%f)", zoom_x_min, zoom_y_min, zoom_x_max, zoom_y_max );
2386 #endif
2387 
2388  Fit( zoom_x_min, zoom_x_max, zoom_y_min, zoom_y_max );
2390 }
double p2x(wxCoord pixelCoordX)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1185
double p2y(wxCoord pixelCoordY)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1190
void AdjustLimitedView()
Definition: mathplot.cpp:2166
void Fit() override
Set view to fit global bounding box of all plot layers and refresh display.
Definition: mathplot.cpp:1995

References AdjustLimitedView(), Fit(), p2x(), and p2y().

Referenced by OnMouseLeftRelease().

Member Data Documentation

◆ m_axColour

wxColour mpWindow::m_axColour
protected

Definition at line 1480 of file mathplot.h.

Referenced by SetColourTheme().

◆ m_bgColour

wxColour mpWindow::m_bgColour
protected

Definition at line 1478 of file mathplot.h.

Referenced by SetColourTheme().

◆ m_buff_bmp

wxBitmap* mpWindow::m_buff_bmp
protected

Definition at line 1503 of file mathplot.h.

Referenced by OnPaint(), and ~mpWindow().

◆ m_buff_dc

wxMemoryDC mpWindow::m_buff_dc
protected

Definition at line 1502 of file mathplot.h.

Referenced by OnPaint().

◆ m_clickedX

int mpWindow::m_clickedX
protected

Definition at line 1492 of file mathplot.h.

Referenced by OnCenter(), and OnShowPopupMenu().

◆ m_clickedY

int mpWindow::m_clickedY
protected

Definition at line 1493 of file mathplot.h.

Referenced by OnCenter(), and OnShowPopupMenu().

◆ m_desiredXmax

double mpWindow::m_desiredXmax
protected

◆ m_desiredXmin

double mpWindow::m_desiredXmin
protected

These are updated in Fit() only, and may be different from the real borders (layer coordinates) only if lock aspect ratio is true.

Definition at line 1497 of file mathplot.h.

Referenced by AdjustLimitedView(), DoScrollCalc(), DoZoomInXCalc(), DoZoomOutXCalc(), Fit(), LockAspect(), OnMouseMove(), OnMouseWheel(), OnSize(), SaveScreenshot(), SetXView(), UpdateAll(), ZoomIn(), and ZoomOut().

◆ m_desiredYmax

◆ m_desiredYmin

double mpWindow::m_desiredYmin
protected

◆ m_enableDoubleBuffer

bool mpWindow::m_enableDoubleBuffer
protected

Definition at line 1504 of file mathplot.h.

Referenced by OnPaint().

◆ m_enableLimitedView

bool mpWindow::m_enableLimitedView
protected

Definition at line 1506 of file mathplot.h.

Referenced by AdjustLimitedView().

◆ m_enableMouseNavigation

bool mpWindow::m_enableMouseNavigation
protected

Definition at line 1505 of file mathplot.h.

Referenced by OnMouseMove(), and OnMouseWheel().

◆ m_enableScrollBars

bool mpWindow::m_enableScrollBars
protected

Definition at line 1509 of file mathplot.h.

Referenced by OnPaint(), SetMPScrollbars(), and UpdateAll().

◆ m_fgColour

wxColour mpWindow::m_fgColour
protected

Definition at line 1479 of file mathplot.h.

Referenced by OnMouseMove(), OnPaint(), and SetColourTheme().

◆ m_last_lx

int mpWindow::m_last_lx
protected

Definition at line 1501 of file mathplot.h.

Referenced by OnPaint().

◆ m_last_ly

int mpWindow::m_last_ly
protected

Definition at line 1501 of file mathplot.h.

Referenced by OnPaint().

◆ m_layers

◆ m_lockaspect

bool mpWindow::m_lockaspect
protected

Definition at line 1476 of file mathplot.h.

Referenced by Fit(), LockAspect(), and OnLockAspect().

◆ m_marginBottom

int mpWindow::m_marginBottom
protected

◆ m_marginLeft

int mpWindow::m_marginLeft
protected

◆ m_marginRight

int mpWindow::m_marginRight
protected

◆ m_marginTop

int mpWindow::m_marginTop
protected

◆ m_maxX

double mpWindow::m_maxX
protected

◆ m_maxY

double mpWindow::m_maxY
protected

◆ m_minX

double mpWindow::m_minX
protected

◆ m_minY

double mpWindow::m_minY
protected

◆ m_mouseLClick

wxPoint mpWindow::m_mouseLClick
protected

Definition at line 1508 of file mathplot.h.

Referenced by OnMouseLeftDown(), OnMouseLeftRelease(), and OnMouseMove().

◆ m_mouseMClick

wxPoint mpWindow::m_mouseMClick
protected

Definition at line 1507 of file mathplot.h.

Referenced by OnMouseMiddleDown(), OnMouseMove(), and OnZoomIn().

◆ m_movingInfoLayer

mpInfoLayer* mpWindow::m_movingInfoLayer
protected

Definition at line 1511 of file mathplot.h.

Referenced by OnMouseLeftDown(), OnMouseLeftRelease(), and OnMouseMove().

◆ m_popmenu

wxMenu mpWindow::m_popmenu
protected

Definition at line 1475 of file mathplot.h.

Referenced by LockAspect(), and OnShowPopupMenu().

◆ m_posX

double mpWindow::m_posX
protected

◆ m_posY

double mpWindow::m_posY
protected

◆ m_scaleX

◆ m_scaleY

double mpWindow::m_scaleY
protected

◆ m_scroll

wxPoint mpWindow::m_scroll
protected

Definition at line 1510 of file mathplot.h.

◆ m_scrX

int mpWindow::m_scrX
protected

◆ m_scrY

int mpWindow::m_scrY
protected

◆ m_zooming

bool mpWindow::m_zooming
protected

Definition at line 1512 of file mathplot.h.

Referenced by OnMouseLeftDown(), OnMouseLeftRelease(), OnMouseMove(), and OnPaint().

◆ m_zoomRect

wxRect mpWindow::m_zoomRect
protected

Definition at line 1513 of file mathplot.h.

Referenced by OnMouseMove(), and OnPaint().

◆ zoomIncrementalFactor

double mpWindow::zoomIncrementalFactor = 1.5
static

This value sets the zoom steps whenever the user clicks "Zoom in/out" or performs zoom with the mouse wheel.

It must be a number above unity. This number is used for zoom in, and its inverse for zoom out. Set to 1.5 by default.

Definition at line 1327 of file mathplot.h.

Referenced by DoZoomInXCalc(), DoZoomInYCalc(), DoZoomOutXCalc(), DoZoomOutYCalc(), ZoomIn(), ZoomInX(), ZoomInY(), ZoomOut(), ZoomOutX(), and ZoomOutY().


The documentation for this class was generated from the following files: