KiCad PCB EDA Suite
SIM_PLOT_PANEL Class Reference

#include <sim_plot_panel.h>

Inheritance diagram for SIM_PLOT_PANEL:
mpWindow

Public Member Functions

 SIM_PLOT_PANEL (SIM_TYPE aType, wxWindow *parent, wxWindowID id, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=0, const wxString &name=wxPanelNameStr)
 
 ~SIM_PLOT_PANEL ()
 
SIM_TYPE GetType () const
 
wxString GetLabelX () const
 
wxString GetLabelY1 () const
 
wxString GetLabelY2 () const
 
bool AddTrace (const wxString &aName, int aPoints, const double *aX, const double *aY, SIM_PLOT_TYPE aFlags)
 
bool DeleteTrace (const wxString &aName)
 
void DeleteAllTraces ()
 
bool TraceShown (const wxString &aName) const
 
const std::map< wxString, TRACE * > & GetTraces () const
 
TRACEGetTrace (const wxString &aName) const
 
void ShowGrid (bool aEnable)
 
bool IsGridShown () const
 
void ShowLegend (bool aEnable)
 
bool IsLegendShown () const
 
bool HasCursorEnabled (const wxString &aName) const
 

Returns true if the trace has cursor shown.

More...
 
void EnableCursor (const wxString &aName, bool aEnable)
 

Toggles cursor for a particular trace.

More...
 
void ResetScales ()
 

Resets scale ranges to fit the current traces

More...
 
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 EnableMouseWheelPan (bool enabled)
 Enable/disable trackpad friendly panning (2-axis scroll wheel) 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 ZoomIn (const wxPoint &centerPoint, double zoomFactor)
 
void ZoomOut (const wxPoint &centerPoint=wxDefaultPosition)
 Zoom out current view and refresh display. More...
 
void ZoomOut (const wxPoint &centerPoint, double zoomFactor)
 
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...
 
void SetLayerVisible (const unsigned int position, bool viewable)
 Sets the visibility of a layer by its position in layer list. More...
 
bool IsLayerVisible (const wxString &name)
 Check whether a layer with given name is visible. 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 Member Functions

static bool IsPlottable (SIM_TYPE aSimType)
 

Static Public Attributes

static double zoomIncrementalFactor = 1.1
 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 OnMagnify (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_enableMouseWheelPan
 
bool m_enableLimitedView
 
wxPoint m_mouseMClick
 
wxPoint m_mouseLClick
 
bool m_enableScrollBars
 
wxPoint m_scroll
 
mpInfoLayerm_movingInfoLayer
 
bool m_zooming
 
wxRect m_zoomRect
 

Private Member Functions

wxColour generateColor ()
 

Returns a new color from the palette

More...
 

Private Attributes

unsigned int m_colorIdx
 
std::map< wxString, TRACE * > m_traces
 
mpScaleXBasem_axis_x
 
mpScaleYm_axis_y1
 
mpScaleYm_axis_y2
 
mpInfoLegendm_legend
 
std::vector< mpLayer * > m_topLevel
 
const SIM_TYPE m_type
 

Detailed Description

Definition at line 163 of file sim_plot_panel.h.

Constructor & Destructor Documentation

◆ SIM_PLOT_PANEL()

SIM_PLOT_PANEL::SIM_PLOT_PANEL ( SIM_TYPE  aType,
wxWindow *  parent,
wxWindowID  id,
const wxPoint &  pos = wxDefaultPosition,
const wxSize &  size = wxDefaultSize,
long  style = 0,
const wxString &  name = wxPanelNameStr 
)

Definition at line 364 of file sim_plot_panel.cpp.

366  : mpWindow( parent, id, pos, size, style ), m_colorIdx( 0 ),
367  m_axis_x( nullptr ), m_axis_y1( nullptr ), m_axis_y2( nullptr ), m_type( aType )
368 {
369  LimitView( true );
370  SetMargins( 50, 80, 50, 80 );
371 
372  wxColour grey( 130, 130, 130 );
373  wxColour dark( 10, 10, 10 );
374  SetColourTheme( dark, *wxWHITE, grey );
375  EnableDoubleBuffer( true );
376  UpdateAll();
377 
378  switch( m_type )
379  {
380  case ST_AC:
381  m_axis_x = new FREQUENCY_LOG_SCALE( _( "Frequency" ), mpALIGN_BOTTOM );
382  m_axis_y1 = new GAIN_SCALE( _( "Gain" ), mpALIGN_LEFT );
383  m_axis_y2 = new PHASE_SCALE( _( "Phase" ), mpALIGN_RIGHT );
385  break;
386 
387  case ST_DC:
388  m_axis_x = new VOLTAGE_SCALE_X( _( "Voltage (swept)" ), mpALIGN_BOTTOM );
389  m_axis_y1 = new VOLTAGE_SCALE_Y( _( "Voltage (measured)" ), mpALIGN_LEFT );
390  m_axis_y2 = new CURRENT_SCALE( _( "Current" ), mpALIGN_RIGHT );
391  break;
392 
393  case ST_NOISE:
394  m_axis_x = new FREQUENCY_LOG_SCALE( _( "Frequency" ), mpALIGN_BOTTOM );
395  m_axis_y1 = new mpScaleY( _( "noise [(V or A)^2/Hz]" ), mpALIGN_LEFT );
396  break;
397 
398  case ST_TRANSIENT:
399  m_axis_x = new TIME_SCALE( _( "Time" ), mpALIGN_BOTTOM );
400  m_axis_y1 = new VOLTAGE_SCALE_Y( _( "Voltage" ), mpALIGN_LEFT );
401  m_axis_y2 = new CURRENT_SCALE( _( "Current" ), mpALIGN_RIGHT );
403  break;
404 
405  default:
406  // suppress warnings
407  break;
408  }
409 
410  if( m_axis_x )
411  {
412  m_axis_x->SetTicks( false );
414 
415  AddLayer( m_axis_x );
416  }
417 
418  if( m_axis_y1 )
419  {
420  m_axis_y1->SetTicks( false );
422  AddLayer( m_axis_y1 );
423  }
424 
425  if( m_axis_y2 )
426  {
427  m_axis_y2->SetTicks( false );
429  AddLayer( m_axis_y2 );
430  }
431 
432  m_legend = new mpInfoLegend( wxRect( 0, 40, 200, 40 ), wxTRANSPARENT_BRUSH );
433  m_legend->SetVisible( false );
434  AddLayer( m_legend );
435  m_topLevel.push_back( m_legend );
436  SetColourTheme( dark, *wxWHITE, grey );
437 
438  EnableDoubleBuffer( true );
439  UpdateAll();
440 }
#define mpALIGN_LEFT
Aligns label to the left.
Definition: mathplot.h:480
void SetNameAlign(int align)
Definition: mathplot.h:706
mpScaleY * m_axis_y1
mpWindow()
Definition: mathplot.h:1046
const SIM_TYPE m_type
mpScaleXBase * m_axis_x
void SetMasterScale(mpScaleY *masterScale)
Definition: mathplot.h:976
#define mpALIGN_RIGHT
Aligns label to the right.
Definition: mathplot.h:476
bool AddLayer(mpLayer *layer, bool refreshDisplay=true)
Add a plot layer to the canvas.
Definition: mathplot.cpp:2505
void EnableDoubleBuffer(bool enabled)
Enable/disable the double-buffering of the window, eliminating the flicker (default=disabled).
Definition: mathplot.h:1205
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853
unsigned int m_colorIdx
void SetVisible(bool show)
Sets layer visibility.
Definition: mathplot.h:301
std::vector< mpLayer * > m_topLevel
void SetMargins(int top, int right, int bottom, int left)
Set window margins, creating a blank area where some kinds of layers cannot draw.
Definition: mathplot.cpp:3141
class WXDLLIMPEXP_MATHPLOT mpScaleY
Definition: mathplot.h:106
void SetColourTheme(const wxColour &bgColour, const wxColour &drawColour, const wxColour &axesColour)
Set Color theme.
Definition: mathplot.cpp:3218
mpScaleY * m_axis_y2
void SetTicks(bool enable)
Set X axis ticks or grid.
Definition: mathplot.h:711
#define _(s)
mpInfoLegend * m_legend
void LimitView(bool aEnable)
Limit zooming & panning to the area used by the plots.
Definition: mathplot.h:1422
void SetTicks(bool ticks)
Set Y axis ticks or grid.
Definition: mathplot.h:966
#define mpALIGN_BOTTOM
Aligns label to the bottom.
Definition: mathplot.h:484
Implements the legend to be added to the plot This layer allows you to add a legend to describe the p...
Definition: mathplot.h:436

References _, mpWindow::AddLayer(), mpWindow::EnableDoubleBuffer(), mpWindow::LimitView(), m_axis_x, m_axis_y1, m_axis_y2, m_legend, m_topLevel, m_type, mpALIGN_BOTTOM, mpALIGN_LEFT, mpALIGN_RIGHT, mpScaleY, mpWindow::SetColourTheme(), mpWindow::SetMargins(), mpScaleY::SetMasterScale(), mpScaleBase::SetNameAlign(), mpScaleBase::SetTicks(), mpScaleY::SetTicks(), mpLayer::SetVisible(), ST_AC, ST_DC, ST_NOISE, ST_TRANSIENT, and mpWindow::UpdateAll().

◆ ~SIM_PLOT_PANEL()

SIM_PLOT_PANEL::~SIM_PLOT_PANEL ( )

Definition at line 443 of file sim_plot_panel.cpp.

444 {
445  // ~mpWindow destroys all the added layers, so there is no need to destroy m_traces contents
446 }

Member Function Documentation

◆ AddLayer()

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

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 2505 of file mathplot.cpp.

2506 {
2507  if( layer != NULL )
2508  {
2509  m_layers.push_back( layer );
2510 
2511  if( refreshDisplay )
2512  UpdateAll();
2513 
2514  return true;
2515  }
2516 
2517  ;
2518  return false;
2519 }
wxLayerList m_layers
Definition: mathplot.h:1493
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853

References mpWindow::m_layers, and mpWindow::UpdateAll().

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

◆ AddTrace()

bool SIM_PLOT_PANEL::AddTrace ( const wxString &  aName,
int  aPoints,
const double *  aX,
const double *  aY,
SIM_PLOT_TYPE  aFlags 
)

Definition at line 464 of file sim_plot_panel.cpp.

466 {
467  TRACE* trace = NULL;
468 
469  // Find previous entry, if there is one
470  auto prev = m_traces.find( aName );
471  bool addedNewEntry = ( prev == m_traces.end() );
472 
473  if( addedNewEntry )
474  {
475  if( m_type == ST_TRANSIENT )
476  {
477  bool hasVoltageTraces = false;
478 
479  for( const auto& tr : m_traces )
480  {
481  if( !( tr.second->GetFlags() & SPT_CURRENT ) )
482  {
483  hasVoltageTraces = true;
484  break;
485  }
486  }
487 
488  if( !hasVoltageTraces )
489  m_axis_y2->SetMasterScale( nullptr );
490  else
492  }
493 
494  // New entry
495  trace = new TRACE( aName );
496  trace->SetTraceColour( generateColor() );
497  trace->SetPen( wxPen( trace->GetTraceColour(), 2, wxPENSTYLE_SOLID ) );
498  m_traces[aName] = trace;
499 
500  // It is a trick to keep legend & coords always on the top
501  for( mpLayer* l : m_topLevel )
502  DelLayer( l );
503 
504  AddLayer( (mpLayer*) trace );
505 
506  for( mpLayer* l : m_topLevel )
507  AddLayer( l );
508  }
509  else
510  {
511  trace = prev->second;
512  }
513 
514  std::vector<double> tmp( aY, aY + aPoints );
515 
516  if( m_type == ST_AC )
517  {
518  if( aFlags & SPT_AC_PHASE )
519  {
520  for( int i = 0; i < aPoints; i++ )
521  tmp[i] = tmp[i] * 180.0 / M_PI; // convert to degrees
522  }
523  else
524  {
525  for( int i = 0; i < aPoints; i++ )
526  tmp[i] = 20 * log( tmp[i] ) / log( 10.0 ); // convert to dB
527  }
528  }
529 
530  trace->SetData( std::vector<double>( aX, aX + aPoints ), tmp );
531 
532  if( aFlags & SPT_AC_PHASE || aFlags & SPT_CURRENT )
533  trace->SetScale( m_axis_x, m_axis_y2 );
534  else
535  trace->SetScale( m_axis_x, m_axis_y1 );
536 
537  trace->SetFlags( aFlags );
538 
539  UpdateAll();
540 
541  return addedNewEntry;
542 }
mpScaleY * m_axis_y1
const SIM_TYPE m_type
bool DelLayer(mpLayer *layer, bool alsoDeleteObject=false, bool refreshDisplay=true)
Remove a plot layer from the canvas.
Definition: mathplot.cpp:2522
virtual void SetScale(mpScaleBase *scaleX, mpScaleBase *scaleY)
Definition: mathplot.cpp:4094
mpScaleXBase * m_axis_x
wxColour GetTraceColour()
void SetMasterScale(mpScaleY *masterScale)
Definition: mathplot.h:976
bool AddLayer(mpLayer *layer, bool refreshDisplay=true)
Add a plot layer to the canvas.
Definition: mathplot.cpp:2505
void SetPen(wxPen pen)
Set layer pen.
Definition: mathplot.h:276
void SetFlags(int aFlags)
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853
std::vector< mpLayer * > m_topLevel
std::map< wxString, TRACE * > m_traces
mpScaleY * m_axis_y2
size_t i
Definition: json11.cpp:649
wxColour generateColor()
Returns a new color from the palette
void SetData(const std::vector< double > &aX, const std::vector< double > &aY) override
Assigns new data set for the trace.
void SetTraceColour(wxColour aColour)

References mpWindow::AddLayer(), mpWindow::DelLayer(), generateColor(), TRACE::GetTraceColour(), i, m_axis_x, m_axis_y1, m_axis_y2, m_topLevel, m_traces, m_type, TRACE::SetData(), TRACE::SetFlags(), mpScaleY::SetMasterScale(), mpLayer::SetPen(), mpFXY::SetScale(), TRACE::SetTraceColour(), SPT_AC_PHASE, SPT_CURRENT, ST_AC, ST_TRANSIENT, and mpWindow::UpdateAll().

Referenced by SIM_PLOT_FRAME::updatePlot().

◆ AdjustLimitedView()

void mpWindow::AdjustLimitedView ( )
protectedinherited

Definition at line 2202 of file mathplot.cpp.

2203 {
2204  if( !m_enableLimitedView )
2205  return;
2206 
2207  // m_min and m_max are plot limits for curves
2208  // xMin, xMax, yMin, yMax are the full limits (plot limit + margin)
2209  const double xMin = m_minX - m_marginLeft / m_scaleX;
2210  const double xMax = m_maxX + m_marginRight / m_scaleX;
2211  const double yMin = m_minY - m_marginTop / m_scaleY;
2212  const double yMax = m_maxY + m_marginBottom / m_scaleY;
2213 
2214  if( m_desiredXmin < xMin )
2215  {
2216  double diff = xMin - m_desiredXmin;
2217  m_posX += diff;
2218  m_desiredXmax += diff;
2219  m_desiredXmin = xMin;
2220  }
2221 
2222  if( m_desiredXmax > xMax )
2223  {
2224  double diff = m_desiredXmax - xMax;
2225  m_posX -= diff;
2226  m_desiredXmin -= diff;
2227  m_desiredXmax = xMax;
2228  }
2229 
2230  if( m_desiredYmin < yMin )
2231  {
2232  double diff = yMin - m_desiredYmin;
2233  m_posY += diff;
2234  m_desiredYmax += diff;
2235  m_desiredYmin = yMin;
2236  }
2237 
2238  if( m_desiredYmax > yMax )
2239  {
2240  double diff = m_desiredYmax - yMax;
2241  m_posY -= diff;
2242  m_desiredYmin -= diff;
2243  m_desiredYmax = yMax;
2244  }
2245 }
int m_marginRight
Definition: mathplot.h:1519
int m_marginLeft
Definition: mathplot.h:1519
double m_desiredXmax
Definition: mathplot.h:1517
double m_scaleY
Definition: mathplot.h:1506
double m_posX
Definition: mathplot.h:1507
double m_minY
Definition: mathplot.h:1503
double m_scaleX
Definition: mathplot.h:1505
double m_desiredYmax
Definition: mathplot.h:1517
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1517
double m_posY
Definition: mathplot.h:1508
int m_marginTop
Definition: mathplot.h:1519
double m_minX
Definition: mathplot.h:1501
double m_desiredYmin
Definition: mathplot.h:1517
int m_marginBottom
Definition: mathplot.h:1519
bool m_enableLimitedView
Definition: mathplot.h:1527
double m_maxX
Definition: mathplot.h:1502
double m_maxY
Definition: mathplot.h:1504

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

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

◆ CheckXLimits()

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

Definition at line 1461 of file mathplot.h.

1462  {
1463  return !( m_enableLimitedView
1464  && (desiredMax > m_maxX - m_marginRight / m_scaleX
1465  || desiredMin < m_minX - m_marginLeft / m_scaleX) );
1466  }
int m_marginRight
Definition: mathplot.h:1519
int m_marginLeft
Definition: mathplot.h:1519
double m_scaleX
Definition: mathplot.h:1505
double m_minX
Definition: mathplot.h:1501
bool m_enableLimitedView
Definition: mathplot.h:1527
double m_maxX
Definition: mathplot.h:1502

Referenced by mpWindow::ZoomOut().

◆ CheckYLimits()

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

Definition at line 1468 of file mathplot.h.

1469  {
1470  return !( m_enableLimitedView
1471  && (desiredMax > m_maxY + m_marginBottom / m_scaleY
1472  || desiredMin < m_minY + m_marginTop / m_scaleY) );
1473  }
double m_scaleY
Definition: mathplot.h:1506
double m_minY
Definition: mathplot.h:1503
int m_marginTop
Definition: mathplot.h:1519
int m_marginBottom
Definition: mathplot.h:1519
bool m_enableLimitedView
Definition: mathplot.h:1527
double m_maxY
Definition: mathplot.h:1504

Referenced by mpWindow::ZoomOut().

◆ CountAllLayers()

unsigned int mpWindow::CountAllLayers ( )
inlineinherited

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 1286 of file mathplot.h.

1286 { return m_layers.size(); };
wxLayerList m_layers
Definition: mathplot.h:1493

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

◆ CountLayers()

unsigned int mpWindow::CountLayers ( )
inherited

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 3036 of file mathplot.cpp.

3037 {
3038  // wxNode *node = m_layers.GetFirst();
3039  unsigned int layerNo = 0;
3040 
3041  for( wxLayerList::iterator li = m_layers.begin(); li != m_layers.end(); li++ ) // while(node)
3042  {
3043  if( (*li)->HasBBox() )
3044  layerNo++;
3045 
3046  // node = node->GetNext();
3047  }
3048 
3049  ;
3050  return layerNo;
3051 }
wxLayerList m_layers
Definition: mathplot.h:1493

References mpWindow::m_layers.

◆ DelAllLayers()

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

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 2549 of file mathplot.cpp.

2550 {
2551  while( m_layers.size()>0 )
2552  {
2553  // Also delete the object?
2554  if( alsoDeleteObject )
2555  delete m_layers[0];
2556 
2557  m_layers.erase( m_layers.begin() ); // this deleted the reference only
2558  }
2559 
2560  if( refreshDisplay )
2561  UpdateAll();
2562 }
wxLayerList m_layers
Definition: mathplot.h:1493
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853

References mpWindow::m_layers, and mpWindow::UpdateAll().

Referenced by mpWindow::~mpWindow().

◆ DeleteAllTraces()

void SIM_PLOT_PANEL::DeleteAllTraces ( )

Definition at line 567 of file sim_plot_panel.cpp.

568 {
569  for( auto& t : m_traces )
570  {
571  DeleteTrace( t.first );
572  }
573 
574  m_colorIdx = 0;
575  m_traces.clear();
576 }
bool DeleteTrace(const wxString &aName)
unsigned int m_colorIdx
std::map< wxString, TRACE * > m_traces

References DeleteTrace(), m_colorIdx, and m_traces.

◆ DeleteTrace()

bool SIM_PLOT_PANEL::DeleteTrace ( const wxString &  aName)

Definition at line 545 of file sim_plot_panel.cpp.

546 {
547  auto it = m_traces.find( aName );
548 
549  if( it != m_traces.end() )
550  {
551  TRACE* trace = it->second;
552  m_traces.erase( it );
553 
554  if( CURSOR* cursor = trace->GetCursor() )
555  DelLayer( cursor, true );
556 
557  DelLayer( trace, true, true );
558  ResetScales();
559 
560  return true;
561  }
562 
563  return false;
564 }
bool DelLayer(mpLayer *layer, bool alsoDeleteObject=false, bool refreshDisplay=true)
Remove a plot layer from the canvas.
Definition: mathplot.cpp:2522
std::map< wxString, TRACE * > m_traces
void ResetScales()
Resets scale ranges to fit the current traces
CURSOR * GetCursor() const
Cursor attached to a trace to follow its values:

References mpWindow::DelLayer(), TRACE::GetCursor(), m_traces, and ResetScales().

Referenced by DeleteAllTraces(), and SIM_PLOT_FRAME::removePlot().

◆ DelLayer()

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

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 2522 of file mathplot.cpp.

2525 {
2526  wxLayerList::iterator layIt;
2527 
2528  for( layIt = m_layers.begin(); layIt != m_layers.end(); layIt++ )
2529  {
2530  if( *layIt == layer )
2531  {
2532  // Also delete the object?
2533  if( alsoDeleteObject )
2534  delete *layIt;
2535 
2536  m_layers.erase( layIt ); // this deleted the reference only
2537 
2538  if( refreshDisplay )
2539  UpdateAll();
2540 
2541  return true;
2542  }
2543  }
2544 
2545  return false;
2546 }
wxLayerList m_layers
Definition: mathplot.h:1493
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853

References mpWindow::m_layers, and mpWindow::UpdateAll().

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

◆ DoScrollCalc()

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

Definition at line 2900 of file mathplot.cpp.

2901 {
2902  if( orientation == wxVERTICAL )
2903  {
2904  // Y axis
2905  // Get top margin in coord units
2906  double topMargin = m_marginTop / m_scaleY;
2907  // Calculate maximum Y coord to be shown in the graph
2908  double maxY = m_desiredYmax > m_maxY ? m_desiredYmax : m_maxY;
2909  // Set new position
2910  SetPosY( ( maxY - (position / m_scaleY) ) + topMargin );
2911  }
2912  else
2913  {
2914  // X Axis
2915  // Get left margin in coord units
2916  double leftMargin = m_marginLeft / m_scaleX;
2917  // Calculate minimum X coord to be shown in the graph
2918  double minX = (m_desiredXmin < m_minX) ? m_desiredXmin : m_minX;
2919  // Set new position
2920  SetPosX( ( minX + (position / m_scaleX) ) - leftMargin );
2921  }
2922 }
int m_marginLeft
Definition: mathplot.h:1519
double m_scaleY
Definition: mathplot.h:1506
double m_scaleX
Definition: mathplot.h:1505
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:1517
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1517
int m_marginTop
Definition: mathplot.h:1519
double m_minX
Definition: mathplot.h:1501
double m_maxY
Definition: mathplot.h:1504

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

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

◆ DoZoomInXCalc()

void mpWindow::DoZoomInXCalc ( const int  staticXpixel)
protectedinherited

Definition at line 2122 of file mathplot.cpp.

2123 {
2124  // Preserve the position of the clicked point:
2125  double staticX = p2x( staticXpixel );
2126 
2127  // Zoom in:
2129  // Adjust the new m_posx
2130  m_posX = staticX - (staticXpixel / m_scaleX);
2131  // Adjust desired
2134 #ifdef MATHPLOT_DO_LOGGING
2135  wxLogMessage(
2136  "mpWindow::DoZoomInXCalc() prior X coord: (%f), new X coord: (%f) SHOULD BE EQUAL!!",
2137  staticX, p2x( staticXpixel ) );
2138 #endif
2139 }
int m_marginRight
Definition: mathplot.h:1519
int m_marginLeft
Definition: mathplot.h:1519
double p2x(wxCoord pixelCoordX)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1185
double m_desiredXmax
Definition: mathplot.h:1517
double m_posX
Definition: mathplot.h:1507
double m_scaleX
Definition: mathplot.h:1505
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1517
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:1344
int m_scrX
Definition: mathplot.h:1509

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

◆ DoZoomInYCalc()

void mpWindow::DoZoomInYCalc ( const int  staticYpixel)
protectedinherited

Definition at line 2142 of file mathplot.cpp.

2143 {
2144  // Preserve the position of the clicked point:
2145  double staticY = p2y( staticYpixel );
2146 
2147  // Zoom in:
2149  // Adjust the new m_posy:
2150  m_posY = staticY + (staticYpixel / m_scaleY);
2151  // Adjust desired
2154 #ifdef MATHPLOT_DO_LOGGING
2155  wxLogMessage(
2156  "mpWindow::DoZoomInYCalc() prior Y coord: (%f), new Y coord: (%f) SHOULD BE EQUAL!!",
2157  staticY, p2y( staticYpixel ) );
2158 #endif
2159 }
double m_scaleY
Definition: mathplot.h:1506
double p2y(wxCoord pixelCoordY)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1190
double m_desiredYmax
Definition: mathplot.h:1517
double m_posY
Definition: mathplot.h:1508
int m_marginTop
Definition: mathplot.h:1519
double m_desiredYmin
Definition: mathplot.h:1517
int m_marginBottom
Definition: mathplot.h:1519
int m_scrY
Definition: mathplot.h:1510
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:1344

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

◆ DoZoomOutXCalc()

void mpWindow::DoZoomOutXCalc ( const int  staticXpixel)
protectedinherited

Definition at line 2162 of file mathplot.cpp.

2163 {
2164  // Preserve the position of the clicked point:
2165  double staticX = p2x( staticXpixel );
2166 
2167  // Zoom out:
2169  // Adjust the new m_posx/y:
2170  m_posX = staticX - (staticXpixel / m_scaleX);
2171  // Adjust desired
2174 #ifdef MATHPLOT_DO_LOGGING
2175  wxLogMessage(
2176  "mpWindow::DoZoomOutXCalc() prior X coord: (%f), new X coord: (%f) SHOULD BE EQUAL!!",
2177  staticX, p2x( staticXpixel ) );
2178 #endif
2179 }
int m_marginRight
Definition: mathplot.h:1519
int m_marginLeft
Definition: mathplot.h:1519
double p2x(wxCoord pixelCoordX)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1185
double m_desiredXmax
Definition: mathplot.h:1517
double m_posX
Definition: mathplot.h:1507
double m_scaleX
Definition: mathplot.h:1505
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1517
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:1344
int m_scrX
Definition: mathplot.h:1509

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

◆ DoZoomOutYCalc()

void mpWindow::DoZoomOutYCalc ( const int  staticYpixel)
protectedinherited

Definition at line 2182 of file mathplot.cpp.

2183 {
2184  // Preserve the position of the clicked point:
2185  double staticY = p2y( staticYpixel );
2186 
2187  // Zoom out:
2189  // Adjust the new m_posx/y:
2190  m_posY = staticY + (staticYpixel / m_scaleY);
2191  // Adjust desired
2194 #ifdef MATHPLOT_DO_LOGGING
2195  wxLogMessage(
2196  "mpWindow::DoZoomOutYCalc() prior Y coord: (%f), new Y coord: (%f) SHOULD BE EQUAL!!",
2197  staticY, p2y( staticYpixel ) );
2198 #endif
2199 }
double m_scaleY
Definition: mathplot.h:1506
double p2y(wxCoord pixelCoordY)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1190
double m_desiredYmax
Definition: mathplot.h:1517
double m_posY
Definition: mathplot.h:1508
int m_marginTop
Definition: mathplot.h:1519
double m_desiredYmin
Definition: mathplot.h:1517
int m_marginBottom
Definition: mathplot.h:1519
int m_scrY
Definition: mathplot.h:1510
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:1344

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

◆ EnableCursor()

void SIM_PLOT_PANEL::EnableCursor ( const wxString &  aName,
bool  aEnable 
)

Toggles cursor for a particular trace.

Definition at line 587 of file sim_plot_panel.cpp.

588 {
589  TRACE* t = GetTrace( aName );
590 
591  if( t == nullptr || t->HasCursor() == aEnable )
592  return;
593 
594  if( aEnable )
595  {
596  CURSOR* c = new CURSOR( t );
597  int plotCenter = GetMarginLeft() + ( GetXScreen() - GetMarginLeft() - GetMarginRight() ) / 2;
598  c->SetX( plotCenter );
599  t->SetCursor( c );
600  AddLayer( c );
601  }
602  else
603  {
604  CURSOR* c = t->GetCursor();
605  t->SetCursor( NULL );
606  DelLayer( c, true );
607  }
608 
609  // Notify the parent window about the changes
610  wxQueueEvent( GetParent(), new wxCommandEvent( EVT_SIM_CURSOR_UPDATE ) );
611 }
bool HasCursor() const
bool DelLayer(mpLayer *layer, bool alsoDeleteObject=false, bool refreshDisplay=true)
Remove a plot layer from the canvas.
Definition: mathplot.cpp:2522
int GetXScreen(void) const
Definition: mathplot.h:1132
bool AddLayer(mpLayer *layer, bool refreshDisplay=true)
Add a plot layer to the canvas.
Definition: mathplot.cpp:2505
TRACE * GetTrace(const wxString &aName) const
int GetMarginRight()
Definition: mathplot.h:1366
int GetMarginLeft()
Definition: mathplot.h:1370
void SetX(int aX)
CURSOR * GetCursor() const
void SetCursor(CURSOR *aCursor)
Cursor attached to a trace to follow its values:

References mpWindow::AddLayer(), mpWindow::DelLayer(), TRACE::GetCursor(), mpWindow::GetMarginLeft(), mpWindow::GetMarginRight(), GetTrace(), mpWindow::GetXScreen(), TRACE::HasCursor(), TRACE::SetCursor(), and CURSOR::SetX().

Referenced by SIM_PLOT_FRAME::SIGNAL_CONTEXT_MENU::onMenuEvent().

◆ EnableDoubleBuffer()

void mpWindow::EnableDoubleBuffer ( bool  enabled)
inlineinherited

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:1524

Referenced by SIM_PLOT_PANEL().

◆ EnableMousePanZoom()

void mpWindow::EnableMousePanZoom ( bool  enabled)
inlineinherited

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:1525

◆ EnableMouseWheelPan()

void mpWindow::EnableMouseWheelPan ( bool  enabled)
inlineinherited

Enable/disable trackpad friendly panning (2-axis scroll wheel)

Definition at line 1213 of file mathplot.h.

1213 { m_enableMouseWheelPan = enabled; }
bool m_enableMouseWheelPan
Definition: mathplot.h:1526

Referenced by SIM_PLOT_FRAME::NewPlotPanel().

◆ Fit() [1/2]

void mpWindow::Fit ( )
overrideinherited

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 2031 of file mathplot.cpp.

2032 {
2033  if( UpdateBBox() )
2034  Fit( m_minX, m_maxX, m_minY, m_maxY );
2035 }
double m_minY
Definition: mathplot.h:1503
void Fit() override
Set view to fit global bounding box of all plot layers and refresh display.
Definition: mathplot.cpp:2031
double m_minX
Definition: mathplot.h:1501
virtual bool UpdateBBox()
Recalculate global layer bounding box, and save it in m_minX,...
Definition: mathplot.cpp:2745
double m_maxX
Definition: mathplot.h:1502
double m_maxY
Definition: mathplot.h:1504

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

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

◆ Fit() [2/2]

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

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 2039 of file mathplot.cpp.

2041 {
2042  // Save desired borders:
2043  m_desiredXmin = xMin; m_desiredXmax = xMax;
2044  m_desiredYmin = yMin; m_desiredYmax = yMax;
2045 
2046  // Give a small margin to plot area
2047  double xExtra = fabs( xMax - xMin ) * 0.00;
2048  double yExtra = fabs( yMax - yMin ) * 0.03;
2049 
2050  xMin -= xExtra;
2051  xMax += xExtra;
2052  yMin -= yExtra;
2053  yMax += yExtra;
2054 
2055  if( printSizeX!=NULL && printSizeY!=NULL )
2056  {
2057  // Printer:
2058  m_scrX = *printSizeX;
2059  m_scrY = *printSizeY;
2060  }
2061  else
2062  {
2063  // Normal case (screen):
2064  GetClientSize( &m_scrX, &m_scrY );
2065  }
2066 
2067  double Ax, Ay;
2068 
2069  Ax = xMax - xMin;
2070  Ay = yMax - yMin;
2071 
2072  m_scaleX = (Ax!=0) ? (m_scrX - m_marginLeft - m_marginRight) / Ax : 1; // m_scaleX = (Ax!=0) ? m_scrX/Ax : 1;
2073  m_scaleY = (Ay!=0) ? (m_scrY - m_marginTop - m_marginBottom) / Ay : 1; // m_scaleY = (Ay!=0) ? m_scrY/Ay : 1;
2074 
2075  if( m_lockaspect )
2076  {
2077 #ifdef MATHPLOT_DO_LOGGING
2078  wxLogMessage( "mpWindow::Fit()(lock) m_scaleX=%f,m_scaleY=%f", m_scaleX, m_scaleY );
2079 #endif
2080  // Keep the lowest "scale" to fit the whole range required by that axis (to actually "fit"!):
2081  double s = m_scaleX < m_scaleY ? m_scaleX : m_scaleY;
2082  m_scaleX = s;
2083  m_scaleY = s;
2084  }
2085 
2086  // Adjusts corner coordinates: This should be simply:
2087  // m_posX = m_minX;
2088  // m_posY = m_maxY;
2089  // But account for centering if we have lock aspect:
2090  m_posX = (xMin + xMax) / 2 - ( (m_scrX - m_marginLeft - m_marginRight) / 2 + m_marginLeft ) /
2091  m_scaleX; // m_posX = (xMin+xMax)/2 - (m_scrX/2)/m_scaleX;
2092  // 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;
2093  m_posY = (yMin + yMax) / 2 + ( (m_scrY - m_marginTop - m_marginBottom) / 2 + m_marginTop ) /
2094  m_scaleY; // m_posY = (yMin+yMax)/2 + (m_scrY/2)/m_scaleY;
2095 
2096 #ifdef MATHPLOT_DO_LOGGING
2097  wxLogMessage(
2098  "mpWindow::Fit() m_desiredXmin=%f m_desiredXmax=%f m_desiredYmin=%f m_desiredYmax=%f",
2099  xMin,
2100  xMax,
2101  yMin,
2102  yMax );
2103  wxLogMessage(
2104  "mpWindow::Fit() m_scaleX = %f , m_scrX = %d,m_scrY=%d, Ax=%f, Ay=%f, m_posX=%f, m_posY=%f",
2105  m_scaleX,
2106  m_scrX,
2107  m_scrY,
2108  Ax,
2109  Ay,
2110  m_posX,
2111  m_posY );
2112 #endif
2113 
2114  // It is VERY IMPORTANT to DO NOT call Refresh if we are drawing to the printer!!
2115  // Otherwise, the DC dimensions will be those of the window instead of the printer device
2116  if( printSizeX==NULL || printSizeY==NULL )
2117  UpdateAll();
2118 }
int m_marginRight
Definition: mathplot.h:1519
int m_marginLeft
Definition: mathplot.h:1519
double m_desiredXmax
Definition: mathplot.h:1517
double m_scaleY
Definition: mathplot.h:1506
double m_posX
Definition: mathplot.h:1507
double m_scaleX
Definition: mathplot.h:1505
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853
double m_desiredYmax
Definition: mathplot.h:1517
bool m_lockaspect
Definition: mathplot.h:1495
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1517
double m_posY
Definition: mathplot.h:1508
int m_marginTop
Definition: mathplot.h:1519
double m_desiredYmin
Definition: mathplot.h:1517
int m_marginBottom
Definition: mathplot.h:1519
int m_scrY
Definition: mathplot.h:1510
int m_scrX
Definition: mathplot.h:1509

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

◆ generateColor()

wxColour SIM_PLOT_PANEL::generateColor ( )
private

Returns a new color from the palette

Todo:
have a look at: http://stanford.edu/~mwaskom/software/seaborn/tutorial/color_palettes.html https://github.com/Gnuplotting/gnuplot-palettes

Definition at line 630 of file sim_plot_panel.cpp.

631 {
635 
636  // const unsigned long colors[] = { 0x0000ff, 0x00ff00, 0xff0000, 0x00ffff, 0xff00ff, 0xffff000, 0xffffff };
637 
638  const unsigned long colors[] = { 0xE41A1C, 0x377EB8, 0x4DAF4A, 0x984EA3, 0xFF7F00, 0xFFFF33, 0xA65628, 0xF781BF,
639  0x66C2A5, 0xFC8D62, 0x8DA0CB, 0xE78AC3, 0xA6D854, 0xFFD92F, 0xE5C494, 0xB3B3B3 };
640 
641  //const unsigned long colors[] = { 0xe3cea6, 0xb4781f, 0x8adfb2, 0x2ca033, 0x999afb, 0x1c1ae3, 0x6fbffd, 0x007fff, 0xd6b2ca, 0x9a3d6a };
642 
643  // hls
644  //const unsigned long colors[] = { 0x0f1689, 0x0f7289, 0x35890f, 0x0f8945, 0x89260f, 0x890f53, 0x89820f, 0x630f89 };
645 
646  // pastels, good for dark background
647  //const unsigned long colors[] = { 0x2fd8fe, 0x628dfa, 0x53d8a6, 0xa5c266, 0xb3b3b3, 0x94c3e4, 0xca9f8d, 0xac680e };
648 
649  const unsigned int colorCount = sizeof(colors) / sizeof(unsigned long);
650 
651  for( int i = 0; i < (int)colorCount - 1; i++ )
652  {
653  const wxColour color = wxColour( colors[i] );
654  bool hasColor = false;
655  for( auto& t : m_traces )
656  {
657  TRACE* trace = t.second;
658  if( trace->GetTraceColour() == color )
659  {
660  hasColor = true;
661  break;
662  }
663  }
664  if( !hasColor )
665  return color;
666  }
667  return wxColour( colors[m_traces.size() % colorCount] );
668 }
int color
Definition: DXF_plotter.cpp:62
wxColour GetTraceColour()
std::map< wxString, TRACE * > m_traces
size_t i
Definition: json11.cpp:649
static VRML_COLOR colors[VRML_COLOR_LAST]

References color, colors, TRACE::GetTraceColour(), i, and m_traces.

Referenced by AddTrace().

◆ GetAxesColour()

const wxColour& mpWindow::GetAxesColour ( )
inlineinherited

Get axes draw colour.

Returns
reference to axis colour used in theme

Definition at line 1419 of file mathplot.h.

1419 { return m_axColour; };
wxColour m_axColour
Definition: mathplot.h:1499

Referenced by mpPrintout::OnPrintPage().

◆ GetBoundingBox()

void mpWindow::GetBoundingBox ( double *  bbox)
inherited

Returns the bounding box coordinates.

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

Definition at line 3074 of file mathplot.cpp.

3075 {
3076  bbox[0] = m_minX;
3077  bbox[1] = m_maxX;
3078  bbox[2] = m_minY;
3079  bbox[3] = m_maxY;
3080 }
double m_minY
Definition: mathplot.h:1503
double m_minX
Definition: mathplot.h:1501
double m_maxX
Definition: mathplot.h:1502
double m_maxY
Definition: mathplot.h:1504

References mpWindow::m_maxX, mpWindow::m_maxY, mpWindow::m_minX, and mpWindow::m_minY.

◆ GetDesiredXmax()

double mpWindow::GetDesiredXmax ( )
inlineinherited

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 1305 of file mathplot.h.

1305 { return m_desiredXmax; }
double m_desiredXmax
Definition: mathplot.h:1517

Referenced by mpPrintout::OnPrintPage().

◆ GetDesiredXmin()

double mpWindow::GetDesiredXmin ( )
inlineinherited

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 1299 of file mathplot.h.

1299 { 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:1517

Referenced by mpPrintout::OnPrintPage().

◆ GetDesiredYmax()

double mpWindow::GetDesiredYmax ( )
inlineinherited

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 1317 of file mathplot.h.

1317 { return m_desiredYmax; }
double m_desiredYmax
Definition: mathplot.h:1517

Referenced by mpPrintout::OnPrintPage().

◆ GetDesiredYmin()

double mpWindow::GetDesiredYmin ( )
inlineinherited

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 1311 of file mathplot.h.

1311 { return m_desiredYmin; }
double m_desiredYmin
Definition: mathplot.h:1517

Referenced by mpPrintout::OnPrintPage().

◆ GetLabelX()

wxString SIM_PLOT_PANEL::GetLabelX ( ) const
inline

Definition at line 178 of file sim_plot_panel.h.

179  {
180  return m_axis_x ? m_axis_x->GetName() : "";
181  }
const wxString & GetName() const
Get layer name.
Definition: mathplot.h:237
mpScaleXBase * m_axis_x

References mpLayer::GetName(), and m_axis_x.

Referenced by SIM_PLOT_FRAME::onCursorUpdate().

◆ GetLabelY1()

wxString SIM_PLOT_PANEL::GetLabelY1 ( ) const
inline

Definition at line 183 of file sim_plot_panel.h.

184  {
185  return m_axis_y1 ? m_axis_y1->GetName() : "";
186  }
const wxString & GetName() const
Get layer name.
Definition: mathplot.h:237
mpScaleY * m_axis_y1

References mpLayer::GetName(), and m_axis_y1.

Referenced by SIM_PLOT_FRAME::onCursorUpdate().

◆ GetLabelY2()

wxString SIM_PLOT_PANEL::GetLabelY2 ( ) const
inline

Definition at line 188 of file sim_plot_panel.h.

189  {
190  return m_axis_y2 ? m_axis_y2->GetName() : "";
191  }
const wxString & GetName() const
Get layer name.
Definition: mathplot.h:237
mpScaleY * m_axis_y2

References mpLayer::GetName(), and m_axis_y2.

Referenced by SIM_PLOT_FRAME::onCursorUpdate().

◆ GetLayer()

mpLayer * mpWindow::GetLayer ( int  position)
inherited

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 3054 of file mathplot.cpp.

3055 {
3056  if( ( position >= (int) m_layers.size() ) || position < 0 )
3057  return NULL;
3058 
3059  return m_layers[position];
3060 }
wxLayerList m_layers
Definition: mathplot.h:1493

References mpWindow::m_layers.

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

◆ GetLayerByName()

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

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 3063 of file mathplot.cpp.

3064 {
3065  for( wxLayerList::iterator it = m_layers.begin(); it!=m_layers.end(); it++ )
3066  if( !(*it)->GetName().Cmp( name ) )
3067  return *it;
3068 
3069 
3070  return NULL; // Not found
3071 }
wxLayerList m_layers
Definition: mathplot.h:1493
const char * name
Definition: DXF_plotter.cpp:61

References mpWindow::m_layers, and name.

Referenced by mpWindow::IsLayerVisible(), and mpWindow::SetLayerVisible().

◆ GetMarginBottom()

int mpWindow::GetMarginBottom ( )
inlineinherited

◆ GetMarginLeft()

int mpWindow::GetMarginLeft ( )
inlineinherited

◆ GetMarginRight()

int mpWindow::GetMarginRight ( )
inlineinherited

◆ GetMarginTop()

int mpWindow::GetMarginTop ( )
inlineinherited

◆ GetMPScrollbars()

bool mpWindow::GetMPScrollbars ( )
inlineinherited

Get scrollbars status.

Returns
true if scrollbars are visible

Definition at line 1330 of file mathplot.h.

1330 { return m_enableScrollBars; };
bool m_enableScrollBars
Definition: mathplot.h:1530

◆ GetPopupMenu()

wxMenu* mpWindow::GetPopupMenu ( )
inlineinherited

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:1494

◆ GetPosX()

double mpWindow::GetPosX ( void  ) const
inlineinherited

Definition at line 1116 of file mathplot.h.

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

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

◆ GetPosY()

double mpWindow::GetPosY ( void  ) const
inlineinherited

Definition at line 1123 of file mathplot.h.

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

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

◆ GetScaleX()

double mpWindow::GetScaleX ( void  ) const
inlineinherited

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:1505

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

◆ GetScaleY()

double mpWindow::GetScaleY ( void  ) const
inlineinherited

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:1506

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

◆ GetScrX()

int mpWindow::GetScrX ( void  ) const
inlineinherited

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:1509

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
inlineinherited

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:1510

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().

◆ GetTrace()

TRACE* SIM_PLOT_PANEL::GetTrace ( const wxString &  aName) const
inline

Definition at line 210 of file sim_plot_panel.h.

211  {
212  auto trace = m_traces.find( aName );
213 
214  return trace == m_traces.end() ? NULL : trace->second;
215  }
std::map< wxString, TRACE * > m_traces

References m_traces.

Referenced by EnableCursor(), HasCursorEnabled(), and SIM_PLOT_FRAME::SIGNAL_CONTEXT_MENU::SIGNAL_CONTEXT_MENU().

◆ GetTraces()

const std::map<wxString, TRACE*>& SIM_PLOT_PANEL::GetTraces ( ) const
inline

Definition at line 205 of file sim_plot_panel.h.

206  {
207  return m_traces;
208  }
std::map< wxString, TRACE * > m_traces

References m_traces.

Referenced by SIM_PLOT_FRAME::menuSaveCsv(), and SIM_PLOT_FRAME::onCursorUpdate().

◆ GetType()

SIM_TYPE SIM_PLOT_PANEL::GetType ( ) const
inline

Definition at line 171 of file sim_plot_panel.h.

172  {
173  return m_type;
174  }
const SIM_TYPE m_type

References m_type.

Referenced by SIM_PLOT_FRAME::addPlot(), SIM_PLOT_FRAME::onAddSignal(), SIM_PLOT_FRAME::onSettings(), and SIM_PLOT_FRAME::onSimFinished().

◆ GetXpos()

double mpWindow::GetXpos ( ) const
inlineinherited

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:1507

◆ GetXscl()

double mpWindow::GetXscl ( )
inlineinherited

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:1505

◆ GetXScreen()

int mpWindow::GetXScreen ( void  ) const
inlineinherited

Definition at line 1132 of file mathplot.h.

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

Referenced by EnableCursor().

◆ GetYpos()

double mpWindow::GetYpos ( ) const
inlineinherited

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:1508

◆ GetYscl()

double mpWindow::GetYscl ( ) const
inlineinherited

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:1506

◆ GetYScreen()

int mpWindow::GetYScreen ( void  ) const
inlineinherited

Definition at line 1141 of file mathplot.h.

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

◆ HasCursorEnabled()

bool SIM_PLOT_PANEL::HasCursorEnabled ( const wxString &  aName) const

Returns true if the trace has cursor shown.

Definition at line 579 of file sim_plot_panel.cpp.

580 {
581  TRACE* t = GetTrace( aName );
582 
583  return t ? t->HasCursor() : false;
584 }
bool HasCursor() const
TRACE * GetTrace(const wxString &aName) const

References GetTrace(), and TRACE::HasCursor().

◆ IsAspectLocked()

bool mpWindow::IsAspectLocked ( )
inlineinherited

Checks whether the X/Y scale aspect is locked.

Return values
TRUELocked
FALSEUnlocked

Definition at line 1226 of file mathplot.h.

1226 { return m_lockaspect; }
bool m_lockaspect
Definition: mathplot.h:1495

◆ IsGridShown()

bool SIM_PLOT_PANEL::IsGridShown ( ) const
inline

Definition at line 225 of file sim_plot_panel.h.

226  {
227  if( !m_axis_x || !m_axis_y1 )
228  return false;
229 
230  assert( m_axis_x->GetTicks() == m_axis_y1->GetTicks() );
231  return !m_axis_x->GetTicks();
232  }
mpScaleY * m_axis_y1
mpScaleXBase * m_axis_x
bool GetTicks()
Get Y axis ticks or grid.
Definition: mathplot.h:970
bool GetTicks()
Get X axis ticks or grid.
Definition: mathplot.h:716

References mpScaleBase::GetTicks(), mpScaleY::GetTicks(), m_axis_x, and m_axis_y1.

Referenced by SIM_PLOT_FRAME::menuShowGrid(), and SIM_PLOT_FRAME::menuShowGridUpdate().

◆ IsInsideInfoLayer()

mpInfoLayer * mpWindow::IsInsideInfoLayer ( wxPoint &  point)
inherited

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 3150 of file mathplot.cpp.

3151 {
3152  wxLayerList::iterator li;
3153 
3154  for( li = m_layers.begin(); li != m_layers.end(); li++ )
3155  {
3156 #ifdef MATHPLOT_DO_LOGGING
3157  wxLogMessage( "mpWindow::IsInsideInfoLayer() examinining layer = %p", (*li) );
3158 #endif // MATHPLOT_DO_LOGGING
3159 
3160  if( (*li)->IsInfo() )
3161  {
3162  mpInfoLayer* tmpLyr = (mpInfoLayer*) (*li);
3163 #ifdef MATHPLOT_DO_LOGGING
3164  wxLogMessage( "mpWindow::IsInsideInfoLayer() layer = %p", (*li) );
3165 #endif // MATHPLOT_DO_LOGGING
3166 
3167  if( tmpLyr->Inside( point ) )
3168  {
3169  return tmpLyr;
3170  }
3171  }
3172  }
3173 
3174  return NULL;
3175 }
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:1493
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 mpWindow::m_layers.

Referenced by mpWindow::OnMouseLeftDown().

◆ IsLayerVisible() [1/2]

bool mpWindow::IsLayerVisible ( const wxString &  name)
inherited

Check whether a layer with given name is visible.

Parameters
nameThe layer name
Returns
layer visibility status

Definition at line 3190 of file mathplot.cpp.

3191 {
3192  mpLayer* lx = GetLayerByName( name );
3193 
3194  return (lx) ? lx->IsVisible() : false;
3195 }
bool IsVisible()
Checks whether the layer is visible or not.
Definition: mathplot.h:297
mpLayer * GetLayerByName(const wxString &name)
Definition: mathplot.cpp:3063
const char * name
Definition: DXF_plotter.cpp:61

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

◆ IsLayerVisible() [2/2]

bool mpWindow::IsLayerVisible ( const unsigned int  position)
inherited

Check whether the layer at given position is visible.

Parameters
positionThe layer position in layer list
Returns
layer visibility status

Definition at line 3210 of file mathplot.cpp.

3211 {
3212  mpLayer* lx = GetLayer( position );
3213 
3214  return (lx) ? lx->IsVisible() : false;
3215 }
mpLayer * GetLayer(int position)
Definition: mathplot.cpp:3054
bool IsVisible()
Checks whether the layer is visible or not.
Definition: mathplot.h:297

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

◆ IsLegendShown()

bool SIM_PLOT_PANEL::IsLegendShown ( ) const
inline

Definition at line 240 of file sim_plot_panel.h.

241  {
242  return m_legend->IsVisible();
243  }
bool IsVisible()
Checks whether the layer is visible or not.
Definition: mathplot.h:297
mpInfoLegend * m_legend

References mpLayer::IsVisible(), and m_legend.

Referenced by SIM_PLOT_FRAME::menuShowLegend(), and SIM_PLOT_FRAME::menuShowLegendUpdate().

◆ IsPlottable()

bool SIM_PLOT_PANEL::IsPlottable ( SIM_TYPE  aSimType)
static

Definition at line 449 of file sim_plot_panel.cpp.

450 {
451  switch( aSimType )
452  {
453  case ST_AC:
454  case ST_DC:
455  case ST_TRANSIENT:
456  return true;
457 
458  default:
459  return false;
460  }
461 }

References ST_AC, ST_DC, and ST_TRANSIENT.

Referenced by SIM_PLOT_FRAME::addPlot(), SIM_PLOT_FRAME::menuNewPlot(), SIM_PLOT_FRAME::onSimFinished(), and SIM_PLOT_FRAME::updatePlot().

◆ LimitView()

void mpWindow::LimitView ( bool  aEnable)
inlineinherited

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

Definition at line 1422 of file mathplot.h.

1423  {
1424  m_enableLimitedView = aEnable;
1425  }
bool m_enableLimitedView
Definition: mathplot.h:1527

Referenced by SIM_PLOT_PANEL().

◆ LockAspect()

void mpWindow::LockAspect ( bool  enable = TRUE)
inherited

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 2443 of file mathplot.cpp.

2444 {
2445  m_lockaspect = enable;
2446  m_popmenu.Check( mpID_LOCKASPECT, enable );
2447 
2448  // Try to fit again with the new config:
2450 }
double m_desiredXmax
Definition: mathplot.h:1517
double m_desiredYmax
Definition: mathplot.h:1517
bool m_lockaspect
Definition: mathplot.h:1495
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1517
void Fit() override
Set view to fit global bounding box of all plot layers and refresh display.
Definition: mathplot.cpp:2031
double m_desiredYmin
Definition: mathplot.h:1517
wxMenu m_popmenu
Definition: mathplot.h:1494

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

Referenced by mpWindow::OnLockAspect().

◆ OnCenter()

void mpWindow::OnCenter ( wxCommandEvent &  event)
protectedinherited

Definition at line 2473 of file mathplot.cpp.

2474 {
2475  GetClientSize( &m_scrX, &m_scrY );
2476  int centerX = (m_scrX - m_marginLeft - m_marginRight) / 2; // + m_marginLeft; // c.x = m_scrX/2;
2477  int centerY = (m_scrY - m_marginTop - m_marginBottom) / 2; // - m_marginTop; // c.y = m_scrY/2;
2478  SetPos( p2x( m_clickedX - centerX ), p2y( m_clickedY - centerY ) );
2479  // 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);
2480 }
int m_marginRight
Definition: mathplot.h:1519
int m_marginLeft
Definition: mathplot.h:1519
int m_clickedX
Definition: mathplot.h:1511
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:1519
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:1512
int m_marginBottom
Definition: mathplot.h:1519
int m_scrY
Definition: mathplot.h:1510
int m_scrX
Definition: mathplot.h:1509

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

◆ OnFit()

void mpWindow::OnFit ( wxCommandEvent &  event)
protectedinherited

Definition at line 2467 of file mathplot.cpp.

2468 {
2469  Fit();
2470 }
void Fit() override
Set view to fit global bounding box of all plot layers and refresh display.
Definition: mathplot.cpp:2031

References mpWindow::Fit().

◆ OnLockAspect()

void mpWindow::OnLockAspect ( wxCommandEvent &  event)
protectedinherited

Definition at line 2461 of file mathplot.cpp.

2462 {
2464 }
bool m_lockaspect
Definition: mathplot.h:1495
void LockAspect(bool enable=TRUE)
Enable or disable X/Y scale aspect locking for the view.
Definition: mathplot.cpp:2443

References mpWindow::LockAspect(), and mpWindow::m_lockaspect.

◆ OnMagnify()

void mpWindow::OnMagnify ( wxMouseEvent &  event)
protectedinherited

◆ OnMouseLeftDown()

void mpWindow::OnMouseLeftDown ( wxMouseEvent &  event)
protectedinherited

Definition at line 1978 of file mathplot.cpp.

1979 {
1980  m_mouseLClick.x = event.GetX();
1981  m_mouseLClick.y = event.GetY();
1982  m_zooming = true;
1983 #ifdef MATHPLOT_DO_LOGGING
1984  wxLogMessage( "mpWindow::OnMouseLeftDown() X = %d , Y = %d", event.GetX(), event.GetY() ); /*m_mouseLClick.x, m_mouseLClick.y);*/
1985 #endif
1986  wxPoint pointClicked = event.GetPosition();
1987  m_movingInfoLayer = IsInsideInfoLayer( pointClicked );
1988 
1989  if( m_movingInfoLayer != NULL )
1990  {
1991 #ifdef MATHPLOT_DO_LOGGING
1992  wxLogMessage( "mpWindow::OnMouseLeftDown() started moving layer %lx",
1993  (long int) m_movingInfoLayer ); /*m_mouseLClick.x, m_mouseLClick.y);*/
1994 #endif
1995  }
1996 
1997  event.Skip();
1998 }
bool m_zooming
Definition: mathplot.h:1533
mpInfoLayer * IsInsideInfoLayer(wxPoint &point)
Check if a given point is inside the area of a mpInfoLayer and eventually returns its pointer.
Definition: mathplot.cpp:3150
wxPoint m_mouseLClick
Definition: mathplot.h:1529
mpInfoLayer * m_movingInfoLayer
Definition: mathplot.h:1532

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

◆ OnMouseLeftRelease()

void mpWindow::OnMouseLeftRelease ( wxMouseEvent &  event)
protectedinherited

Definition at line 2001 of file mathplot.cpp.

2002 {
2003  wxPoint release( event.GetX(), event.GetY() );
2004  wxPoint press( m_mouseLClick.x, m_mouseLClick.y );
2005 
2006  m_zooming = false;
2007 
2008  if( m_movingInfoLayer != NULL )
2009  {
2011  m_movingInfoLayer = NULL;
2012  }
2013  else
2014  {
2015  if( release != press )
2016  {
2017  ZoomRect( press, release );
2018  } /*else {
2019  * if (m_coordTooltip) {
2020  * wxString toolTipContent;
2021  * toolTipContent.Printf( "X = %f\nY = %f", p2x(event.GetX()), p2y(event.GetY()));
2022  * SetToolTip(toolTipContent);
2023  * }
2024  * } */
2025  }
2026 
2027  event.Skip();
2028 }
bool m_zooming
Definition: mathplot.h:1533
wxPoint m_mouseLClick
Definition: mathplot.h:1529
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:2420
mpInfoLayer * m_movingInfoLayer
Definition: mathplot.h:1532
virtual void UpdateReference()
Updates the rectangle reference point.
Definition: mathplot.cpp:148

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

◆ OnMouseMiddleDown()

void mpWindow::OnMouseMiddleDown ( wxMouseEvent &  event)
protectedinherited

Definition at line 1797 of file mathplot.cpp.

1798 {
1799  m_mouseMClick.x = event.GetX();
1800  m_mouseMClick.y = event.GetY();
1801 }
wxPoint m_mouseMClick
Definition: mathplot.h:1528

References mpWindow::m_mouseMClick.

◆ OnMouseMove()

void mpWindow::OnMouseMove ( wxMouseEvent &  event)
protectedinherited

Definition at line 1878 of file mathplot.cpp.

1879 {
1881  {
1882  event.Skip();
1883  return;
1884  }
1885 
1886  if( event.m_middleDown )
1887  {
1888  // The change:
1889  int Ax = m_mouseMClick.x - event.GetX();
1890  int Ay = m_mouseMClick.y - event.GetY();
1891 
1892  // For the next event, use relative to this coordinates.
1893  m_mouseMClick.x = event.GetX();
1894  m_mouseMClick.y = event.GetY();
1895 
1896  double Ax_units = Ax / m_scaleX;
1897  double Ay_units = -Ay / m_scaleY;
1898 
1899  bool updateRequired = false;
1900  updateRequired |= SetXView( m_posX + Ax_units,
1901  m_desiredXmax + Ax_units,
1902  m_desiredXmin + Ax_units );
1903  updateRequired |= SetYView( m_posY + Ay_units,
1904  m_desiredYmax + Ay_units,
1905  m_desiredYmin + Ay_units );
1906 
1907  if( updateRequired )
1908  UpdateAll();
1909 
1910 #ifdef MATHPLOT_DO_LOGGING
1911  wxLogMessage( "[mpWindow::OnMouseMove] Ax:%i Ay:%i m_posX:%f m_posY:%f",
1912  Ax,
1913  Ay,
1914  m_posX,
1915  m_posY );
1916 #endif
1917  }
1918  else
1919  {
1920  if( event.m_leftDown )
1921  {
1922  if( m_movingInfoLayer == NULL )
1923  {
1924  wxClientDC dc( this );
1925  wxPen pen( m_fgColour, 1, wxPENSTYLE_DOT );
1926  dc.SetPen( pen );
1927  dc.SetBrush( *wxTRANSPARENT_BRUSH );
1928  dc.DrawRectangle( m_mouseLClick.x, m_mouseLClick.y,
1929  event.GetX() - m_mouseLClick.x, event.GetY() - m_mouseLClick.y );
1930  m_zooming = true;
1931  m_zoomRect.x = m_mouseLClick.x;
1932  m_zoomRect.y = m_mouseLClick.y;
1933  m_zoomRect.width = event.GetX() - m_mouseLClick.x;
1934  m_zoomRect.height = event.GetY() - m_mouseLClick.y;
1935  }
1936  else
1937  {
1938  wxPoint moveVector( event.GetX() - m_mouseLClick.x,
1939  event.GetY() - m_mouseLClick.y );
1940  m_movingInfoLayer->Move( moveVector );
1941  m_zooming = false;
1942  }
1943 
1944  UpdateAll();
1945  }
1946  else
1947  {
1948 #if 0
1949  wxLayerList::iterator li;
1950 
1951  for( li = m_layers.begin(); li != m_layers.end(); li++ )
1952  {
1953  if( (*li)->IsInfo() && (*li)->IsVisible() )
1954  {
1955  mpInfoLayer* tmpLyr = (mpInfoLayer*) (*li);
1956  tmpLyr->UpdateInfo( *this, event );
1957  // UpdateAll();
1958  RefreshRect( tmpLyr->GetRectangle() );
1959  }
1960  }
1961 
1962 #endif
1963  /* if (m_coordTooltip) {
1964  * wxString toolTipContent;
1965  * toolTipContent.Printf( "X = %f\nY = %f", p2x(event.GetX()), p2y(event.GetY()));
1966  * wxTipWindow** ptr = NULL;
1967  * wxRect rectBounds(event.GetX(), event.GetY(), 5, 5);
1968  * wxTipWindow* tip = new wxTipWindow(this, toolTipContent, 100, ptr, &rectBounds);
1969  *
1970  * } */
1971  }
1972  }
1973 
1974  event.Skip();
1975 }
bool m_zooming
Definition: mathplot.h:1533
virtual bool SetYView(double pos, double desiredMax, double desiredMin)
Applies new Y view coordinates depending on the settings.
Definition: mathplot.cpp:2262
double m_desiredXmax
Definition: mathplot.h:1517
double m_scaleY
Definition: mathplot.h:1506
bool m_enableMouseNavigation
Definition: mathplot.h:1525
double m_posX
Definition: mathplot.h:1507
wxPoint m_mouseMClick
Definition: mathplot.h:1528
double m_scaleX
Definition: mathplot.h:1505
wxLayerList m_layers
Definition: mathplot.h:1493
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853
wxPoint m_mouseLClick
Definition: mathplot.h:1529
virtual void Move(wxPoint delta)
Moves the layer rectangle of given pixel deltas.
Definition: mathplot.cpp:141
double m_desiredYmax
Definition: mathplot.h:1517
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:1534
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1517
mpInfoLayer * m_movingInfoLayer
Definition: mathplot.h:1532
wxColour m_fgColour
Definition: mathplot.h:1498
double m_posY
Definition: mathplot.h:1508
const wxRect & GetRectangle()
Returns the current rectangle coordinates.
Definition: mathplot.h:391
double m_desiredYmin
Definition: mathplot.h:1517
virtual bool SetXView(double pos, double desiredMax, double desiredMin)
Applies new X view coordinates depending on the settings.
Definition: mathplot.cpp:2248

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

◆ OnMouseWheel()

void mpWindow::OnMouseWheel ( wxMouseEvent &  event)
protectedinherited

Definition at line 1823 of file mathplot.cpp.

1824 {
1826  {
1827  event.Skip();
1828  return;
1829  }
1830 
1831  int change = event.GetWheelRotation();
1832  const int axis = event.GetWheelAxis();
1833  double changeUnitsX = change / m_scaleX;
1834  double changeUnitsY = change / m_scaleY;
1835 
1836  if( ( !m_enableMouseWheelPan && ( event.ControlDown() || event.ShiftDown() ) )
1837  || ( m_enableMouseWheelPan && !event.ControlDown() ) )
1838  {
1839  // Scrolling
1840  if( m_enableMouseWheelPan )
1841  {
1842  if( axis == wxMOUSE_WHEEL_HORIZONTAL || event.ShiftDown() )
1843  SetXView( m_posX + changeUnitsX, m_desiredXmax + changeUnitsX,
1844  m_desiredXmin + changeUnitsX );
1845  else
1846  SetYView( m_posY + changeUnitsY, m_desiredYmax + changeUnitsY,
1847  m_desiredYmin + changeUnitsY );
1848  }
1849  else
1850  {
1851  if( event.ControlDown() )
1852  SetXView( m_posX + changeUnitsX, m_desiredXmax + changeUnitsX,
1853  m_desiredXmin + changeUnitsX );
1854  else
1855  SetYView( m_posY + changeUnitsY, m_desiredYmax + changeUnitsY,
1856  m_desiredYmin + changeUnitsY );
1857  }
1858 
1859  UpdateAll();
1860  }
1861  else
1862  {
1863  // zoom in/out
1864  wxPoint clickPt( event.GetX(), event.GetY() );
1865 
1866  if( event.GetWheelRotation() > 0 )
1867  ZoomIn( clickPt );
1868  else
1869  ZoomOut( clickPt );
1870 
1871  return;
1872  }
1873 }
void ZoomOut(const wxPoint &centerPoint=wxDefaultPosition)
Zoom out current view and refresh display.
Definition: mathplot.cpp:2339
virtual bool SetYView(double pos, double desiredMax, double desiredMin)
Applies new Y view coordinates depending on the settings.
Definition: mathplot.cpp:2262
double m_desiredXmax
Definition: mathplot.h:1517
double m_scaleY
Definition: mathplot.h:1506
bool m_enableMouseNavigation
Definition: mathplot.h:1525
double m_posX
Definition: mathplot.h:1507
bool m_enableMouseWheelPan
Definition: mathplot.h:1526
double m_scaleX
Definition: mathplot.h:1505
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853
double m_desiredYmax
Definition: mathplot.h:1517
void ZoomIn(const wxPoint &centerPoint=wxDefaultPosition)
Zoom into current view and refresh display.
Definition: mathplot.cpp:2276
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1517
double m_posY
Definition: mathplot.h:1508
double m_desiredYmin
Definition: mathplot.h:1517
virtual bool SetXView(double pos, double desiredMax, double desiredMin)
Applies new X view coordinates depending on the settings.
Definition: mathplot.cpp:2248

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

◆ OnPaint()

void mpWindow::OnPaint ( wxPaintEvent &  event)
protectedinherited

Definition at line 2565 of file mathplot.cpp.

2566 {
2567  wxPaintDC dc( this );
2568 
2569  dc.GetSize( &m_scrX, &m_scrY ); // This is the size of the visible area only!
2570 
2571 #ifdef MATHPLOT_DO_LOGGING
2572  wxLogMessage( "[mpWindow::OnPaint] vis.area: x %i y%i", m_scrX, m_scrY );
2573 #endif
2574 
2575  // Selects direct or buffered draw:
2576  wxDC* trgDc;
2577 
2578  // J.L.Blanco @ Aug 2007: Added double buffer support
2579  if( m_enableDoubleBuffer )
2580  {
2581  if( m_last_lx!=m_scrX || m_last_ly!=m_scrY )
2582  {
2583  if( m_buff_bmp )
2584  delete m_buff_bmp;
2585 
2586  m_buff_bmp = new wxBitmap( m_scrX, m_scrY );
2587  m_buff_dc.SelectObject( *m_buff_bmp );
2588  m_last_lx = m_scrX;
2589  m_last_ly = m_scrY;
2590  }
2591 
2592  trgDc = &m_buff_dc;
2593  }
2594  else
2595  {
2596  trgDc = &dc;
2597  }
2598 
2599  // Draw background:
2600  // trgDc->SetDeviceOrigin(0,0);
2601  trgDc->SetPen( *wxTRANSPARENT_PEN );
2602  wxBrush brush( GetBackgroundColour() );
2603  trgDc->SetBrush( brush );
2604  trgDc->SetTextForeground( m_fgColour );
2605  trgDc->DrawRectangle( 0, 0, m_scrX, m_scrY );
2606 
2607  // Draw all the layers:
2608  // trgDc->SetDeviceOrigin( m_scrX>>1, m_scrY>>1); // Origin at the center
2609  wxLayerList::iterator li;
2610 
2611  for( li = m_layers.begin(); li != m_layers.end(); li++ )
2612  {
2613  (*li)->Plot( *trgDc, *this );
2614  }
2615 
2616  ;
2617 
2618  if( m_zooming )
2619  {
2620  wxPen pen( m_fgColour, 1, wxPENSTYLE_DOT );
2621  trgDc->SetPen( pen );
2622  trgDc->SetBrush( *wxTRANSPARENT_BRUSH );
2623  trgDc->DrawRectangle( m_zoomRect );
2624  }
2625 
2626  // If doublebuffer, draw now to the window:
2627  if( m_enableDoubleBuffer )
2628  {
2629  // trgDc->SetDeviceOrigin(0,0);
2630  // dc.SetDeviceOrigin(0,0); // Origin at the center
2631  dc.Blit( 0, 0, m_scrX, m_scrY, trgDc, 0, 0 );
2632  }
2633 
2634  /* if (m_coordTooltip) {
2635  * wxString toolTipContent;
2636  * wxPoint mousePoint = wxGetMousePosition();
2637  * toolTipContent.Printf( "X = %f\nY = %f", p2x(mousePoint.x), p2y(mousePoint.y));
2638  * SetToolTip(toolTipContent);
2639  * }*/
2640  // If scrollbars are enabled, refresh them
2641  if( m_enableScrollBars )
2642  {
2643  /* m_scroll.x = (int) floor((m_posX - m_minX)*m_scaleX);
2644  * m_scroll.y = (int) floor((m_maxY - m_posY )*m_scaleY);
2645  * Scroll(m_scroll.x, m_scroll.y);*/
2646  // Scroll(x2p(m_posX), y2p(m_posY));
2647  // SetVirtualSize((int) ((m_maxX - m_minX)*m_scaleX), (int) ((m_maxY - m_minY)*m_scaleY));
2648  // int centerX = (m_scrX - m_marginLeft - m_marginRight)/2; // + m_marginLeft; // c.x = m_scrX/2;
2649  // int centerY = (m_scrY - m_marginTop - m_marginBottom)/2; // - m_marginTop; // c.y = m_scrY/2;
2650  /*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);
2651  }
2652 }
wxMemoryDC m_buff_dc
Definition: mathplot.h:1522
bool m_enableScrollBars
Definition: mathplot.h:1530
bool m_zooming
Definition: mathplot.h:1533
wxLayerList m_layers
Definition: mathplot.h:1493
wxRect m_zoomRect
Definition: mathplot.h:1534
wxColour m_fgColour
Definition: mathplot.h:1498
int m_last_ly
Definition: mathplot.h:1521
int m_last_lx
Definition: mathplot.h:1521
int m_scrY
Definition: mathplot.h:1510
bool m_enableDoubleBuffer
Definition: mathplot.h:1524
int m_scrX
Definition: mathplot.h:1509
wxBitmap * m_buff_bmp
Definition: mathplot.h:1523

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

◆ OnScrollBottom()

void mpWindow::OnScrollBottom ( wxScrollWinEvent &  event)
protectedinherited

Definition at line 3011 of file mathplot.cpp.

3012 {
3013  int scrollOrientation = event.GetOrientation();
3014  // Get thumb size
3015  int thumbSize = GetScrollThumb( scrollOrientation );
3016  // Get scroll range
3017  int scrollRange = GetScrollRange( scrollOrientation );
3018 
3019  DoScrollCalc( scrollRange - thumbSize, scrollOrientation );
3020 }
void DoScrollCalc(const int position, const int orientation)
Definition: mathplot.cpp:2900

References mpWindow::DoScrollCalc().

◆ OnScrollLineDown()

void mpWindow::OnScrollLineDown ( wxScrollWinEvent &  event)
protectedinherited

Definition at line 2985 of file mathplot.cpp.

2986 {
2987  int scrollOrientation = event.GetOrientation();
2988  // Get position before page up
2989  int position = GetScrollPos( scrollOrientation );
2990  // Get thumb size
2991  int thumbSize = GetScrollThumb( scrollOrientation );
2992  // Get scroll range
2993  int scrollRange = GetScrollRange( scrollOrientation );
2994 
2995  // Need to adjust position by a page
2996  position += mpSCROLL_NUM_PIXELS_PER_LINE;
2997 
2998  if( position > (scrollRange - thumbSize) )
2999  position = scrollRange - thumbSize;
3000 
3001  DoScrollCalc( position, scrollOrientation );
3002 }
#define mpSCROLL_NUM_PIXELS_PER_LINE
Definition: mathplot.cpp:61
void DoScrollCalc(const int position, const int orientation)
Definition: mathplot.cpp:2900

References mpWindow::DoScrollCalc(), and mpSCROLL_NUM_PIXELS_PER_LINE.

◆ OnScrollLineUp()

void mpWindow::OnScrollLineUp ( wxScrollWinEvent &  event)
protectedinherited

Definition at line 2969 of file mathplot.cpp.

2970 {
2971  int scrollOrientation = event.GetOrientation();
2972  // Get position before page up
2973  int position = GetScrollPos( scrollOrientation );
2974 
2975  // Need to adjust position by a line
2976  position -= mpSCROLL_NUM_PIXELS_PER_LINE;
2977 
2978  if( position < 0 )
2979  position = 0;
2980 
2981  DoScrollCalc( position, scrollOrientation );
2982 }
#define mpSCROLL_NUM_PIXELS_PER_LINE
Definition: mathplot.cpp:61
void DoScrollCalc(const int position, const int orientation)
Definition: mathplot.cpp:2900

References mpWindow::DoScrollCalc(), and mpSCROLL_NUM_PIXELS_PER_LINE.

◆ OnScrollPageDown()

void mpWindow::OnScrollPageDown ( wxScrollWinEvent &  event)
protectedinherited

Definition at line 2949 of file mathplot.cpp.

2950 {
2951  int scrollOrientation = event.GetOrientation();
2952  // Get position before page up
2953  int position = GetScrollPos( scrollOrientation );
2954  // Get thumb size
2955  int thumbSize = GetScrollThumb( scrollOrientation );
2956  // Get scroll range
2957  int scrollRange = GetScrollRange( scrollOrientation );
2958 
2959  // Need to adjust position by a page
2960  position += thumbSize;
2961 
2962  if( position > (scrollRange - thumbSize) )
2963  position = scrollRange - thumbSize;
2964 
2965  DoScrollCalc( position, scrollOrientation );
2966 }
void DoScrollCalc(const int position, const int orientation)
Definition: mathplot.cpp:2900

References mpWindow::DoScrollCalc().

◆ OnScrollPageUp()

void mpWindow::OnScrollPageUp ( wxScrollWinEvent &  event)
protectedinherited

Definition at line 2931 of file mathplot.cpp.

2932 {
2933  int scrollOrientation = event.GetOrientation();
2934  // Get position before page up
2935  int position = GetScrollPos( scrollOrientation );
2936  // Get thumb size
2937  int thumbSize = GetScrollThumb( scrollOrientation );
2938 
2939  // Need to adjust position by a page
2940  position -= thumbSize;
2941 
2942  if( position < 0 )
2943  position = 0;
2944 
2945  DoScrollCalc( position, scrollOrientation );
2946 }
void DoScrollCalc(const int position, const int orientation)
Definition: mathplot.cpp:2900

References mpWindow::DoScrollCalc().

◆ OnScrollThumbTrack()

void mpWindow::OnScrollThumbTrack ( wxScrollWinEvent &  event)
protectedinherited

Definition at line 2925 of file mathplot.cpp.

2926 {
2927  DoScrollCalc( event.GetPosition(), event.GetOrientation() );
2928 }
void DoScrollCalc(const int position, const int orientation)
Definition: mathplot.cpp:2900

References mpWindow::DoScrollCalc().

◆ OnScrollTop()

void mpWindow::OnScrollTop ( wxScrollWinEvent &  event)
protectedinherited

Definition at line 3005 of file mathplot.cpp.

3006 {
3007  DoScrollCalc( 0, event.GetOrientation() );
3008 }
void DoScrollCalc(const int position, const int orientation)
Definition: mathplot.cpp:2900

References mpWindow::DoScrollCalc().

◆ OnShowPopupMenu()

void mpWindow::OnShowPopupMenu ( wxMouseEvent &  event)
protectedinherited

Definition at line 2453 of file mathplot.cpp.

2454 {
2455  m_clickedX = event.GetX();
2456  m_clickedY = event.GetY();
2457  PopupMenu( &m_popmenu, event.GetX(), event.GetY() );
2458 }
int m_clickedX
Definition: mathplot.h:1511
int m_clickedY
Definition: mathplot.h:1512
wxMenu m_popmenu
Definition: mathplot.h:1494

References mpWindow::m_clickedX, mpWindow::m_clickedY, and mpWindow::m_popmenu.

◆ OnSize()

void mpWindow::OnSize ( wxSizeEvent &  event)
protectedinherited

Definition at line 2495 of file mathplot.cpp.

2496 {
2497  // Try to fit again with the new window size:
2499 #ifdef MATHPLOT_DO_LOGGING
2500  wxLogMessage( "mpWindow::OnSize() m_scrX = %d, m_scrY = %d", m_scrX, m_scrY );
2501 #endif // MATHPLOT_DO_LOGGING
2502 }
double m_desiredXmax
Definition: mathplot.h:1517
double m_desiredYmax
Definition: mathplot.h:1517
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1517
void Fit() override
Set view to fit global bounding box of all plot layers and refresh display.
Definition: mathplot.cpp:2031
double m_desiredYmin
Definition: mathplot.h:1517
int m_scrY
Definition: mathplot.h:1510
int m_scrX
Definition: mathplot.h:1509

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

◆ OnZoomIn()

void mpWindow::OnZoomIn ( wxCommandEvent &  event)
protectedinherited

Definition at line 2483 of file mathplot.cpp.

2484 {
2485  ZoomIn( wxPoint( m_mouseMClick.x, m_mouseMClick.y ) );
2486 }
wxPoint m_mouseMClick
Definition: mathplot.h:1528
void ZoomIn(const wxPoint &centerPoint=wxDefaultPosition)
Zoom into current view and refresh display.
Definition: mathplot.cpp:2276

References mpWindow::m_mouseMClick, and mpWindow::ZoomIn().

◆ OnZoomOut()

void mpWindow::OnZoomOut ( wxCommandEvent &  event)
protectedinherited

Definition at line 2489 of file mathplot.cpp.

2490 {
2491  ZoomOut();
2492 }
void ZoomOut(const wxPoint &centerPoint=wxDefaultPosition)
Zoom out current view and refresh display.
Definition: mathplot.cpp:2339

References mpWindow::ZoomOut().

◆ p2x()

double mpWindow::p2x ( wxCoord  pixelCoordX)
inlineinherited

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:1507
double m_scaleX
Definition: mathplot.h:1505

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

◆ p2y()

double mpWindow::p2y ( wxCoord  pixelCoordY)
inlineinherited

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:1506
double m_posY
Definition: mathplot.h:1508

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

◆ ResetScales()

void SIM_PLOT_PANEL::ResetScales ( )

Resets scale ranges to fit the current traces

Definition at line 614 of file sim_plot_panel.cpp.

615 {
616  if( m_axis_x )
618 
619  if( m_axis_y1 )
621 
622  if( m_axis_y2 )
624 
625  for( auto t : m_traces )
626  t.second->UpdateScales();
627 }
mpScaleY * m_axis_y1
mpScaleXBase * m_axis_x
void ResetDataRange()
Definition: mathplot.h:756
std::map< wxString, TRACE * > m_traces
mpScaleY * m_axis_y2

References m_axis_x, m_axis_y1, m_axis_y2, m_traces, and mpScaleBase::ResetDataRange().

Referenced by DeleteTrace(), and SIM_PLOT_FRAME::onSimFinished().

◆ SaveScreenshot()

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

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 3083 of file mathplot.cpp.

3085 {
3086  int sizeX, sizeY;
3087  int bk_scrX, bk_scrY;
3088 
3089  if( imageSize == wxDefaultSize )
3090  {
3091  sizeX = m_scrX;
3092  sizeY = m_scrY;
3093  }
3094  else
3095  {
3096  sizeX = imageSize.x;
3097  sizeY = imageSize.y;
3098  bk_scrX = m_scrX;
3099  bk_scrY = m_scrY;
3100  SetScr( sizeX, sizeY );
3101  }
3102 
3103  wxBitmap screenBuffer( sizeX, sizeY );
3104  wxMemoryDC screenDC;
3105  screenDC.SelectObject( screenBuffer );
3106  screenDC.SetPen( *wxWHITE_PEN );
3107  screenDC.SetTextForeground( m_fgColour );
3108  wxBrush brush( GetBackgroundColour() );
3109  screenDC.SetBrush( brush );
3110  screenDC.DrawRectangle( 0, 0, sizeX, sizeY );
3111 
3112  if( fit )
3113  {
3114  Fit( m_minX, m_maxX, m_minY, m_maxY, &sizeX, &sizeY );
3115  }
3116  else
3117  {
3119  }
3120 
3121  // Draw all the layers:
3122  wxLayerList::iterator li;
3123 
3124  for( li = m_layers.begin(); li != m_layers.end(); li++ )
3125  (*li)->Plot( screenDC, *this );
3126 
3127  if( imageSize != wxDefaultSize )
3128  {
3129  // Restore dimensions
3130  SetScr( bk_scrX, bk_scrY );
3131  Fit( m_desiredXmin, m_desiredXmax, m_desiredYmin, m_desiredYmax, &bk_scrX, &bk_scrY );
3132  UpdateAll();
3133  }
3134 
3135  // Once drawing is complete, actually save screen shot
3136  wxImage screenImage = screenBuffer.ConvertToImage();
3137  return screenImage.SaveFile( filename, type );
3138 }
double m_desiredXmax
Definition: mathplot.h:1517
double m_minY
Definition: mathplot.h:1503
wxLayerList m_layers
Definition: mathplot.h:1493
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853
double m_desiredYmax
Definition: mathplot.h:1517
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1517
wxColour m_fgColour
Definition: mathplot.h:1498
void Fit() override
Set view to fit global bounding box of all plot layers and refresh display.
Definition: mathplot.cpp:2031
double m_minX
Definition: mathplot.h:1501
double m_desiredYmin
Definition: mathplot.h:1517
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:1510
double m_maxX
Definition: mathplot.h:1502
int m_scrX
Definition: mathplot.h:1509
double m_maxY
Definition: mathplot.h:1504

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

Referenced by SIM_PLOT_FRAME::menuSaveImage().

◆ SetColourTheme()

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

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 3218 of file mathplot.cpp.

3221 {
3222  SetBackgroundColour( bgColour );
3223  SetForegroundColour( drawColour );
3224  m_bgColour = bgColour;
3225  m_fgColour = drawColour;
3226  m_axColour = axesColour;
3227  // cycle between layers to set colours and properties to them
3228  wxLayerList::iterator li;
3229 
3230  for( li = m_layers.begin(); li != m_layers.end(); li++ )
3231  {
3232  if( (*li)->GetLayerType() == mpLAYER_AXIS )
3233  {
3234  wxPen axisPen = (*li)->GetPen(); // Get the old pen to modify only colour, not style or width
3235  axisPen.SetColour( axesColour );
3236  (*li)->SetPen( axisPen );
3237  }
3238 
3239  if( (*li)->GetLayerType() == mpLAYER_INFO )
3240  {
3241  wxPen infoPen = (*li)->GetPen(); // Get the old pen to modify only colour, not style or width
3242  infoPen.SetColour( drawColour );
3243  (*li)->SetPen( infoPen );
3244  }
3245  }
3246 }
wxColour m_axColour
Definition: mathplot.h:1499
wxLayerList m_layers
Definition: mathplot.h:1493
wxColour m_fgColour
Definition: mathplot.h:1498
wxColour m_bgColour
Definition: mathplot.h:1497

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

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

◆ SetLayerVisible() [1/2]

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

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 3178 of file mathplot.cpp.

3179 {
3180  mpLayer* lx = GetLayerByName( name );
3181 
3182  if( lx )
3183  {
3184  lx->SetVisible( viewable );
3185  UpdateAll();
3186  }
3187 }
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853
void SetVisible(bool show)
Sets layer visibility.
Definition: mathplot.h:301
mpLayer * GetLayerByName(const wxString &name)
Definition: mathplot.cpp:3063
const char * name
Definition: DXF_plotter.cpp:61

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

◆ SetLayerVisible() [2/2]

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

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 3198 of file mathplot.cpp.

3199 {
3200  mpLayer* lx = GetLayer( position );
3201 
3202  if( lx )
3203  {
3204  lx->SetVisible( viewable );
3205  UpdateAll();
3206  }
3207 }
mpLayer * GetLayer(int position)
Definition: mathplot.cpp:3054
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853
void SetVisible(bool show)
Sets layer visibility.
Definition: mathplot.h:301

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

◆ SetMarginBottom()

void mpWindow::SetMarginBottom ( int  bottom)
inlineinherited

Set the bottom margin.

Parameters
bottomBottom Margin

Definition at line 1359 of file mathplot.h.

1359 { m_marginBottom = bottom; };
int m_marginBottom
Definition: mathplot.h:1519

◆ SetMarginLeft()

void mpWindow::SetMarginLeft ( int  left)
inlineinherited

Set the left margin.

Parameters
leftLeft Margin

Definition at line 1361 of file mathplot.h.

1361 { m_marginLeft = left; };
int m_marginLeft
Definition: mathplot.h:1519

◆ SetMarginRight()

void mpWindow::SetMarginRight ( int  right)
inlineinherited

Set the right margin.

Parameters
rightRight Margin

Definition at line 1357 of file mathplot.h.

1357 { m_marginRight = right; };
int m_marginRight
Definition: mathplot.h:1519

◆ SetMargins()

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

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 3141 of file mathplot.cpp.

3142 {
3143  m_marginTop = top;
3144  m_marginRight = right;
3145  m_marginBottom = bottom;
3146  m_marginLeft = left;
3147 }
int m_marginRight
Definition: mathplot.h:1519
int m_marginLeft
Definition: mathplot.h:1519
int m_marginTop
Definition: mathplot.h:1519
int m_marginBottom
Definition: mathplot.h:1519

References mpWindow::m_marginBottom, mpWindow::m_marginLeft, mpWindow::m_marginRight, and mpWindow::m_marginTop.

Referenced by SIM_PLOT_PANEL().

◆ SetMarginTop()

void mpWindow::SetMarginTop ( int  top)
inlineinherited

Set the top margin.

Parameters
topTop Margin

Definition at line 1355 of file mathplot.h.

1355 { m_marginTop = top; };
int m_marginTop
Definition: mathplot.h:1519

◆ SetMPScrollbars()

void mpWindow::SetMPScrollbars ( bool  status)
inherited

Enable/disable scrollbars.

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

Definition at line 2704 of file mathplot.cpp.

2705 {
2706  // Temporary behaviour: always disable scrollbars
2707  m_enableScrollBars = status; // false;
2708 
2709  if( status == false )
2710  {
2711  SetScrollbar( wxHORIZONTAL, 0, 0, 0 );
2712  SetScrollbar( wxVERTICAL, 0, 0, 0 );
2713  }
2714 
2715  // else the scroll bars will be updated in UpdateAll();
2716  UpdateAll();
2717 
2718  // EnableScrolling(false, false);
2719  // m_enableScrollBars = status;
2720  // EnableScrolling(status, status);
2721  /* m_scroll.x = (int) floor((m_posX - m_minX)*m_scaleX);
2722  * m_scroll.y = (int) floor((m_posY - m_minY)*m_scaleY);*/
2723  // int scrollWidth = (int) floor((m_maxX - m_minX)*m_scaleX) - m_scrX;
2724  // int scrollHeight = (int) floor((m_minY - m_maxY)*m_scaleY) - m_scrY;
2725 
2727  // m_scroll.y = (int) floor((m_maxY - m_posY /*- m_minY*/)*m_scaleY);
2728  // int scrollWidth = (int) floor(((m_maxX - m_minX) - (m_desiredXmax - m_desiredXmin))*m_scaleX);
2729  // int scrollHeight = (int) floor(((m_maxY - m_minY) - (m_desiredYmax - m_desiredYmin))*m_scaleY);
2730  // #ifdef MATHPLOT_DO_LOGGING
2731  // wxLogMessage( "mpWindow::SetMPScrollbars() scrollWidth = %d, scrollHeight = %d", scrollWidth, scrollHeight);
2732  // #endif
2733  // if(status) {
2734  // SetScrollbars(1,
2735  // 1,
2736  // scrollWidth,
2737  // scrollHeight,
2738  // m_scroll.x,
2739  // m_scroll.y);
2741  // }
2742  // Refresh(false);*/
2743 }
bool m_enableScrollBars
Definition: mathplot.h:1530
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853

References mpWindow::m_enableScrollBars, and mpWindow::UpdateAll().

◆ SetPos()

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

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:1507
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853
double m_posY
Definition: mathplot.h:1508

Referenced by mpWindow::OnCenter().

◆ SetPosX()

void mpWindow::SetPosX ( double  posX)
inlineinherited

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:1507
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853

Referenced by mpWindow::DoScrollCalc().

◆ SetPosY()

void mpWindow::SetPosY ( double  posY)
inlineinherited

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:2853
double m_posY
Definition: mathplot.h:1508

Referenced by mpWindow::DoScrollCalc().

◆ SetScaleX()

void mpWindow::SetScaleX ( double  scaleX)
inherited

Set current view's X scale and refresh display.

Parameters
scaleXNew scale, must not be 0.

Definition at line 3025 of file mathplot.cpp.

3026 {
3027  if( scaleX!=0 )
3028  m_scaleX = scaleX;
3029 
3030  UpdateAll();
3031 }
double m_scaleX
Definition: mathplot.h:1505
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853

References mpWindow::m_scaleX, and mpWindow::UpdateAll().

◆ SetScaleY()

void mpWindow::SetScaleY ( double  scaleY)
inlineinherited

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:1506
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853

◆ SetScr()

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

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:1510
int m_scrX
Definition: mathplot.h:1509

Referenced by mpWindow::SaveScreenshot().

◆ SetXView()

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

Applies new X view coordinates depending on the settings.

Returns
true if the changes were applied

Definition at line 2248 of file mathplot.cpp.

2249 {
2250  // if(!CheckXLimits(desiredMax, desiredMin))
2251  // return false;
2252 
2253  m_posX = pos;
2254  m_desiredXmax = desiredMax;
2255  m_desiredXmin = desiredMin;
2257 
2258  return true;
2259 }
double m_desiredXmax
Definition: mathplot.h:1517
double m_posX
Definition: mathplot.h:1507
void AdjustLimitedView()
Definition: mathplot.cpp:2202
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1517

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

Referenced by mpWindow::OnMouseMove(), and mpWindow::OnMouseWheel().

◆ SetYView()

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

Applies new Y view coordinates depending on the settings.

Returns
true if the changes were applied

Definition at line 2262 of file mathplot.cpp.

2263 {
2264  // if(!CheckYLimits(desiredMax, desiredMin))
2265  // return false;
2266 
2267  m_posY = pos;
2268  m_desiredYmax = desiredMax;
2269  m_desiredYmin = desiredMin;
2271 
2272  return true;
2273 }
double m_desiredYmax
Definition: mathplot.h:1517
void AdjustLimitedView()
Definition: mathplot.cpp:2202
double m_posY
Definition: mathplot.h:1508
double m_desiredYmin
Definition: mathplot.h:1517

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

Referenced by mpWindow::OnMouseMove(), and mpWindow::OnMouseWheel().

◆ ShowGrid()

void SIM_PLOT_PANEL::ShowGrid ( bool  aEnable)
inline

Definition at line 217 of file sim_plot_panel.h.

218  {
219  m_axis_x->SetTicks( !aEnable );
220  m_axis_y1->SetTicks( !aEnable );
221  m_axis_y2->SetTicks( !aEnable );
222  UpdateAll();
223  }
mpScaleY * m_axis_y1
mpScaleXBase * m_axis_x
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853
mpScaleY * m_axis_y2
void SetTicks(bool enable)
Set X axis ticks or grid.
Definition: mathplot.h:711
void SetTicks(bool ticks)
Set Y axis ticks or grid.
Definition: mathplot.h:966

References m_axis_x, m_axis_y1, m_axis_y2, mpScaleBase::SetTicks(), mpScaleY::SetTicks(), and mpWindow::UpdateAll().

Referenced by SIM_PLOT_FRAME::menuShowGrid().

◆ ShowLegend()

void SIM_PLOT_PANEL::ShowLegend ( bool  aEnable)
inline

Definition at line 234 of file sim_plot_panel.h.

235  {
236  m_legend->SetVisible( aEnable );
237  UpdateAll();
238  }
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853
void SetVisible(bool show)
Sets layer visibility.
Definition: mathplot.h:301
mpInfoLegend * m_legend

References m_legend, mpLayer::SetVisible(), and mpWindow::UpdateAll().

Referenced by SIM_PLOT_FRAME::menuShowLegend().

◆ TraceShown()

bool SIM_PLOT_PANEL::TraceShown ( const wxString &  aName) const
inline

Definition at line 200 of file sim_plot_panel.h.

201  {
202  return m_traces.count( aName ) > 0;
203  }
std::map< wxString, TRACE * > m_traces

References m_traces.

Referenced by SIM_PLOT_FRAME::removePlot().

◆ UpdateAll()

void mpWindow::UpdateAll ( )
inherited

Refresh display.

Definition at line 2853 of file mathplot.cpp.

2854 {
2855  if( UpdateBBox() )
2856  {
2857  if( m_enableScrollBars )
2858  {
2859  int cx, cy;
2860  GetClientSize( &cx, &cy );
2861  // Do x scroll bar
2862  {
2863  // Convert margin sizes from pixels to coordinates
2864  double leftMargin = m_marginLeft / m_scaleX;
2865  // Calculate the range in coords that we want to scroll over
2866  double maxX = (m_desiredXmax > m_maxX) ? m_desiredXmax : m_maxX;
2867  double minX = (m_desiredXmin < m_minX) ? m_desiredXmin : m_minX;
2868 
2869  if( (m_posX + leftMargin) < minX )
2870  minX = m_posX + leftMargin;
2871 
2872  // Calculate scroll bar size and thumb position
2873  int sizeX = (int) ( (maxX - minX) * m_scaleX );
2874  int thumbX = (int) ( ( (m_posX + leftMargin) - minX ) * m_scaleX );
2875  SetScrollbar( wxHORIZONTAL, thumbX, cx - (m_marginRight + m_marginLeft), sizeX );
2876  }
2877  // Do y scroll bar
2878  {
2879  // Convert margin sizes from pixels to coordinates
2880  double topMargin = m_marginTop / m_scaleY;
2881  // Calculate the range in coords that we want to scroll over
2882  double maxY = (m_desiredYmax > m_maxY) ? m_desiredYmax : m_maxY;
2883 
2884  if( (m_posY - topMargin) > maxY )
2885  maxY = m_posY - topMargin;
2886 
2887  double minY = (m_desiredYmin < m_minY) ? m_desiredYmin : m_minY;
2888  // Calculate scroll bar size and thumb position
2889  int sizeY = (int) ( (maxY - minY) * m_scaleY );
2890  int thumbY = (int) ( ( maxY - (m_posY - topMargin) ) * m_scaleY );
2891  SetScrollbar( wxVERTICAL, thumbY, cy - (m_marginTop + m_marginBottom), sizeY );
2892  }
2893  }
2894  }
2895 
2896  Refresh( false );
2897 }
int m_marginRight
Definition: mathplot.h:1519
bool m_enableScrollBars
Definition: mathplot.h:1530
int m_marginLeft
Definition: mathplot.h:1519
double m_desiredXmax
Definition: mathplot.h:1517
double m_scaleY
Definition: mathplot.h:1506
double m_posX
Definition: mathplot.h:1507
double m_minY
Definition: mathplot.h:1503
double m_scaleX
Definition: mathplot.h:1505
double m_desiredYmax
Definition: mathplot.h:1517
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:1517
double m_posY
Definition: mathplot.h:1508
int m_marginTop
Definition: mathplot.h:1519
double m_minX
Definition: mathplot.h:1501
double m_desiredYmin
Definition: mathplot.h:1517
int m_marginBottom
Definition: mathplot.h:1519
virtual bool UpdateBBox()
Recalculate global layer bounding box, and save it in m_minX,...
Definition: mathplot.cpp:2745
double m_maxX
Definition: mathplot.h:1502
double m_maxY
Definition: mathplot.h:1504

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

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

◆ UpdateBBox()

bool mpWindow::UpdateBBox ( )
protectedvirtualinherited

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

Returns
true if there is any valid BBox information.

Definition at line 2745 of file mathplot.cpp.

2746 {
2747  m_minX = 0.0;
2748  m_maxX = 1.0;
2749  m_minY = 0.0;
2750  m_maxY = 1.0;
2751 
2752  return true;
2753 
2754 #if 0
2755  bool first = true;
2756 
2757  for( wxLayerList::iterator li = m_layers.begin(); li != m_layers.end(); li++ )
2758  {
2759  mpLayer* f = *li;
2760 
2761  if( f->HasBBox() )
2762  {
2763  if( first )
2764  {
2765  first = false;
2766  m_minX = f->GetMinX(); m_maxX = f->GetMaxX();
2767  m_minY = f->GetMinY(); m_maxY = f->GetMaxY();
2768  }
2769  else
2770  {
2771  if( f->GetMinX()<m_minX )
2772  m_minX = f->GetMinX();
2773 
2774  if( f->GetMaxX()>m_maxX )
2775  m_maxX = f->GetMaxX();
2776 
2777  if( f->GetMinY()<m_minY )
2778  m_minY = f->GetMinY();
2779 
2780  if( f->GetMaxY()>m_maxY )
2781  m_maxY = f->GetMaxY();
2782  }
2783  }
2784 
2785  // node = node->GetNext();
2786  }
2787 
2788 #ifdef MATHPLOT_DO_LOGGING
2789  wxLogDebug( wxT(
2790  "[mpWindow::UpdateBBox] Bounding box: Xmin = %f, Xmax = %f, Ymin = %f, YMax = %f" ), m_minX, m_maxX, m_minY,
2791  m_maxY );
2792 #endif // MATHPLOT_DO_LOGGING
2793 
2794  return first == false;
2795 #endif
2796 }
double m_minY
Definition: mathplot.h:1503
wxLayerList m_layers
Definition: mathplot.h:1493
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:1501
virtual bool HasBBox()
Check whether this layer has a bounding box.
Definition: mathplot.h:160
double m_maxX
Definition: mathplot.h:1502
double m_maxY
Definition: mathplot.h:1504

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

Referenced by mpWindow::Fit(), and mpWindow::UpdateAll().

◆ x2p()

wxCoord mpWindow::x2p ( double  x)
inlineinherited

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:1507
double m_scaleX
Definition: mathplot.h:1505

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)
inlineinherited

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:1506
double m_posY
Definition: mathplot.h:1508

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

◆ ZoomIn() [1/2]

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

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 2276 of file mathplot.cpp.

2277 {
2278  ZoomIn( centerPoint, zoomIncrementalFactor );
2279 }
void ZoomIn(const wxPoint &centerPoint=wxDefaultPosition)
Zoom into current view and refresh display.
Definition: mathplot.cpp:2276
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:1344

References mpWindow::zoomIncrementalFactor.

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

◆ ZoomIn() [2/2]

void mpWindow::ZoomIn ( const wxPoint &  centerPoint,
double  zoomFactor 
)
inherited

Definition at line 2282 of file mathplot.cpp.

2283 {
2284  wxPoint c( centerPoint );
2285 
2286  if( c == wxDefaultPosition )
2287  {
2288  GetClientSize( &m_scrX, &m_scrY );
2289  c.x = (m_scrX - m_marginLeft - m_marginRight) / 2 + m_marginLeft; // c.x = m_scrX/2;
2290  c.y = (m_scrY - m_marginTop - m_marginBottom) / 2 - m_marginTop; // c.y = m_scrY/2;
2291  }
2292  else
2293  {
2294  c.x = std::max( c.x, m_marginLeft );
2295  c.x = std::min( c.x, m_scrX - m_marginRight );
2296  c.y = std::max( c.y, m_marginTop );
2297  c.y = std::min( c.y, m_scrY - m_marginBottom );
2298  }
2299 
2300  // Preserve the position of the clicked point:
2301  double prior_layer_x = p2x( c.x );
2302  double prior_layer_y = p2y( c.y );
2303 
2304  // Zoom in:
2305  const double MAX_SCALE = 1e6;
2306  double newScaleX = m_scaleX * zoomFactor;
2307  double newScaleY = m_scaleY * zoomFactor;
2308 
2309  // Baaaaad things happen when you zoom in too much..
2310  if( newScaleX <= MAX_SCALE && newScaleY <= MAX_SCALE )
2311  {
2312  m_scaleX = newScaleX;
2313  m_scaleY = newScaleY;
2314  }
2315  else
2316  {
2317  return;
2318  }
2319 
2320  // Adjust the new m_posx/y:
2321  m_posX = prior_layer_x - c.x / m_scaleX;
2322  m_posY = prior_layer_y + c.y / m_scaleY;
2323 
2325  m_desiredXmax = m_posX + (m_scrX - m_marginLeft - m_marginRight) / m_scaleX; // m_desiredXmax = m_posX + m_scrX / m_scaleX;
2327  m_desiredYmin = m_posY - (m_scrY - m_marginTop - m_marginBottom) / m_scaleY; // m_desiredYmin = m_posY - m_scrY / m_scaleY;
2329 
2330 #ifdef MATHPLOT_DO_LOGGING
2331  wxLogMessage( "mpWindow::ZoomIn() prior coords: (%f,%f), new coords: (%f,%f) SHOULD BE EQUAL!!",
2332  prior_layer_x, prior_layer_y, p2x( c.x ), p2y( c.y ) );
2333 #endif
2334 
2335  UpdateAll();
2336 }
int m_marginRight
Definition: mathplot.h:1519
int m_marginLeft
Definition: mathplot.h:1519
double p2x(wxCoord pixelCoordX)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1185
double m_desiredXmax
Definition: mathplot.h:1517
double m_scaleY
Definition: mathplot.h:1506
double m_posX
Definition: mathplot.h:1507
double p2y(wxCoord pixelCoordY)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1190
double m_scaleX
Definition: mathplot.h:1505
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853
double m_desiredYmax
Definition: mathplot.h:1517
void AdjustLimitedView()
Definition: mathplot.cpp:2202
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1517
#define MAX_SCALE
double m_posY
Definition: mathplot.h:1508
int m_marginTop
Definition: mathplot.h:1519
double m_desiredYmin
Definition: mathplot.h:1517
#define max(a, b)
Definition: auxiliary.h:86
int m_marginBottom
Definition: mathplot.h:1519
int m_scrY
Definition: mathplot.h:1510
int m_scrX
Definition: mathplot.h:1509
#define min(a, b)
Definition: auxiliary.h:85

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

◆ ZoomInX()

void mpWindow::ZoomInX ( )
inherited

Zoom in current view along X and refresh display.

Definition at line 2392 of file mathplot.cpp.

2393 {
2395  UpdateAll();
2396 }
double m_scaleX
Definition: mathplot.h:1505
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853
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:1344

References mpWindow::m_scaleX, mpWindow::UpdateAll(), and mpWindow::zoomIncrementalFactor.

◆ ZoomInY()

void mpWindow::ZoomInY ( )
inherited

Zoom in current view along Y and refresh display.

Definition at line 2406 of file mathplot.cpp.

2407 {
2409  UpdateAll();
2410 }
double m_scaleY
Definition: mathplot.h:1506
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853
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:1344

References mpWindow::m_scaleY, mpWindow::UpdateAll(), and mpWindow::zoomIncrementalFactor.

◆ ZoomOut() [1/2]

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

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 2339 of file mathplot.cpp.

2340 {
2341  ZoomOut( centerPoint, zoomIncrementalFactor );
2342 }
void ZoomOut(const wxPoint &centerPoint=wxDefaultPosition)
Zoom out current view and refresh display.
Definition: mathplot.cpp:2339
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:1344

References mpWindow::zoomIncrementalFactor.

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

◆ ZoomOut() [2/2]

void mpWindow::ZoomOut ( const wxPoint &  centerPoint,
double  zoomFactor 
)
inherited

Definition at line 2345 of file mathplot.cpp.

2346 {
2347  wxPoint c( centerPoint );
2348 
2349  if( c == wxDefaultPosition )
2350  {
2351  GetClientSize( &m_scrX, &m_scrY );
2352  c.x = (m_scrX - m_marginLeft - m_marginRight) / 2 + m_marginLeft; // c.x = m_scrX/2;
2353  c.y = (m_scrY - m_marginTop - m_marginBottom) / 2 - m_marginTop; // c.y = m_scrY/2;
2354  }
2355 
2356  // Preserve the position of the clicked point:
2357  double prior_layer_x = p2x( c.x );
2358  double prior_layer_y = p2y( c.y );
2359 
2360  // Zoom out:
2361  m_scaleX = m_scaleX / zoomFactor;
2362  m_scaleY = m_scaleY / zoomFactor;
2363 
2364  // Adjust the new m_posx/y:
2365  m_posX = prior_layer_x - c.x / m_scaleX;
2366  m_posY = prior_layer_y + c.y / m_scaleY;
2367 
2369  m_desiredXmax = m_posX + (m_scrX - m_marginLeft - m_marginRight) / m_scaleX; // m_desiredXmax = m_posX + m_scrX / m_scaleX;
2371  m_desiredYmin = m_posY - (m_scrY - m_marginTop - m_marginBottom) / m_scaleY; // m_desiredYmin = m_posY - m_scrY / m_scaleY;
2372 
2373  // printf("desired xmin %.1f ymin %.1f xmax %.1f ymax %.1f l %d\n", m_desiredXmin, m_desiredYmin, m_desiredXmax, m_desiredYmax, !!m_enableLimitedView);
2374  // printf("current xmin %.1f ymin %.1f xmax %.1f ymax %.1f\n", m_minX, m_minY, m_maxX, m_maxY);
2375 
2378  {
2379  // printf("call fit()\n");
2380  Fit();
2381  }
2382 
2383 #ifdef MATHPLOT_DO_LOGGING
2384  wxLogMessage(
2385  "mpWindow::ZoomOut() prior coords: (%f,%f), new coords: (%f,%f) SHOULD BE EQUAL!!",
2386  prior_layer_x, prior_layer_y, p2x( c.x ), p2y( c.y ) );
2387 #endif
2388  UpdateAll();
2389 }
int m_marginRight
Definition: mathplot.h:1519
int m_marginLeft
Definition: mathplot.h:1519
double p2x(wxCoord pixelCoordX)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1185
double m_desiredXmax
Definition: mathplot.h:1517
double m_scaleY
Definition: mathplot.h:1506
double m_posX
Definition: mathplot.h:1507
double p2y(wxCoord pixelCoordY)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
Definition: mathplot.h:1190
double m_scaleX
Definition: mathplot.h:1505
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853
double m_desiredYmax
Definition: mathplot.h:1517
double m_desiredXmin
These are updated in Fit() only, and may be different from the real borders (layer coordinates) only ...
Definition: mathplot.h:1517
bool CheckYLimits(double &desiredMax, double &desiredMin) const
Definition: mathplot.h:1468
double m_posY
Definition: mathplot.h:1508
void Fit() override
Set view to fit global bounding box of all plot layers and refresh display.
Definition: mathplot.cpp:2031
int m_marginTop
Definition: mathplot.h:1519
double m_desiredYmin
Definition: mathplot.h:1517
int m_marginBottom
Definition: mathplot.h:1519
int m_scrY
Definition: mathplot.h:1510
bool CheckXLimits(double &desiredMax, double &desiredMin) const
Definition: mathplot.h:1461
int m_scrX
Definition: mathplot.h:1509

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

◆ ZoomOutX()

void mpWindow::ZoomOutX ( )
inherited

Zoom out current view along X and refresh display.

Definition at line 2399 of file mathplot.cpp.

2400 {
2402  UpdateAll();
2403 }
double m_scaleX
Definition: mathplot.h:1505
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853
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:1344

References mpWindow::m_scaleX, mpWindow::UpdateAll(), and mpWindow::zoomIncrementalFactor.

◆ ZoomOutY()

void mpWindow::ZoomOutY ( )
inherited

Zoom out current view along Y and refresh display.

Definition at line 2413 of file mathplot.cpp.

2414 {
2416  UpdateAll();
2417 }
double m_scaleY
Definition: mathplot.h:1506
void UpdateAll()
Refresh display.
Definition: mathplot.cpp:2853
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:1344

References mpWindow::m_scaleY, mpWindow::UpdateAll(), and mpWindow::zoomIncrementalFactor.

◆ ZoomRect()

void mpWindow::ZoomRect ( wxPoint  p0,
wxPoint  p1 
)
inherited

Zoom view fitting given coordinates to the window (p0 and p1 do not need to be in any specific order)

Definition at line 2420 of file mathplot.cpp.

2421 {
2422  // Compute the 2 corners in graph coordinates:
2423  double p0x = p2x( p0.x );
2424  double p0y = p2y( p0.y );
2425  double p1x = p2x( p1.x );
2426  double p1y = p2y( p1.y );
2427 
2428  // Order them:
2429  double zoom_x_min = p0x<p1x ? p0x : p1x;
2430  double zoom_x_max = p0x>p1x ? p0x : p1x;
2431  double zoom_y_min = p0y<p1y ? p0y : p1y;
2432  double zoom_y_max = p0y>p1y ? p0y : p1y;
2433 
2434 #ifdef MATHPLOT_DO_LOGGING
2435  wxLogMessage( "Zoom: (%f,%f)-(%f,%f)", zoom_x_min, zoom_y_min, zoom_x_max, zoom_y_max );
2436 #endif
2437 
2438  Fit( zoom_x_min, zoom_x_max, zoom_y_min, zoom_y_max );
2440 }
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:2202
void Fit() override
Set view to fit global bounding box of all plot layers and refresh display.
Definition: mathplot.cpp:2031

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

Referenced by mpWindow::OnMouseLeftRelease().

Member Data Documentation

◆ m_axColour

wxColour mpWindow::m_axColour
protectedinherited

Definition at line 1499 of file mathplot.h.

Referenced by mpWindow::SetColourTheme().

◆ m_axis_x

mpScaleXBase* SIM_PLOT_PANEL::m_axis_x
private

◆ m_axis_y1

mpScaleY* SIM_PLOT_PANEL::m_axis_y1
private

◆ m_axis_y2

mpScaleY* SIM_PLOT_PANEL::m_axis_y2
private

Definition at line 266 of file sim_plot_panel.h.

Referenced by AddTrace(), GetLabelY2(), ResetScales(), ShowGrid(), and SIM_PLOT_PANEL().

◆ m_bgColour

wxColour mpWindow::m_bgColour
protectedinherited

Definition at line 1497 of file mathplot.h.

Referenced by mpWindow::SetColourTheme().

◆ m_buff_bmp

wxBitmap* mpWindow::m_buff_bmp
protectedinherited

Definition at line 1523 of file mathplot.h.

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

◆ m_buff_dc

wxMemoryDC mpWindow::m_buff_dc
protectedinherited

Definition at line 1522 of file mathplot.h.

Referenced by mpWindow::OnPaint().

◆ m_clickedX

int mpWindow::m_clickedX
protectedinherited

Definition at line 1511 of file mathplot.h.

Referenced by mpWindow::OnCenter(), and mpWindow::OnShowPopupMenu().

◆ m_clickedY

int mpWindow::m_clickedY
protectedinherited

Definition at line 1512 of file mathplot.h.

Referenced by mpWindow::OnCenter(), and mpWindow::OnShowPopupMenu().

◆ m_colorIdx

unsigned int SIM_PLOT_PANEL::m_colorIdx
private

Definition at line 259 of file sim_plot_panel.h.

Referenced by DeleteAllTraces().

◆ m_desiredXmax

◆ m_desiredXmin

double mpWindow::m_desiredXmin
protectedinherited

◆ m_desiredYmax

◆ m_desiredYmin

◆ m_enableDoubleBuffer

bool mpWindow::m_enableDoubleBuffer
protectedinherited

Definition at line 1524 of file mathplot.h.

Referenced by mpWindow::OnPaint().

◆ m_enableLimitedView

bool mpWindow::m_enableLimitedView
protectedinherited

Definition at line 1527 of file mathplot.h.

Referenced by mpWindow::AdjustLimitedView().

◆ m_enableMouseNavigation

bool mpWindow::m_enableMouseNavigation
protectedinherited

Definition at line 1525 of file mathplot.h.

Referenced by mpWindow::OnMouseMove(), and mpWindow::OnMouseWheel().

◆ m_enableMouseWheelPan

bool mpWindow::m_enableMouseWheelPan
protectedinherited

Definition at line 1526 of file mathplot.h.

Referenced by mpWindow::OnMouseWheel().

◆ m_enableScrollBars

bool mpWindow::m_enableScrollBars
protectedinherited

Definition at line 1530 of file mathplot.h.

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

◆ m_fgColour

wxColour mpWindow::m_fgColour
protectedinherited

◆ m_last_lx

int mpWindow::m_last_lx
protectedinherited

Definition at line 1521 of file mathplot.h.

Referenced by mpWindow::OnPaint().

◆ m_last_ly

int mpWindow::m_last_ly
protectedinherited

Definition at line 1521 of file mathplot.h.

Referenced by mpWindow::OnPaint().

◆ m_layers

◆ m_legend

mpInfoLegend* SIM_PLOT_PANEL::m_legend
private

Definition at line 267 of file sim_plot_panel.h.

Referenced by IsLegendShown(), ShowLegend(), and SIM_PLOT_PANEL().

◆ m_lockaspect

bool mpWindow::m_lockaspect
protectedinherited

Definition at line 1495 of file mathplot.h.

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

◆ m_marginBottom

◆ m_marginLeft

◆ m_marginRight

◆ m_marginTop

◆ m_maxX

double mpWindow::m_maxX
protectedinherited

◆ m_maxY

◆ m_minX

◆ m_minY

double mpWindow::m_minY
protectedinherited

◆ m_mouseLClick

wxPoint mpWindow::m_mouseLClick
protectedinherited

◆ m_mouseMClick

wxPoint mpWindow::m_mouseMClick
protectedinherited

◆ m_movingInfoLayer

mpInfoLayer* mpWindow::m_movingInfoLayer
protectedinherited

◆ m_popmenu

wxMenu mpWindow::m_popmenu
protectedinherited

Definition at line 1494 of file mathplot.h.

Referenced by mpWindow::LockAspect(), and mpWindow::OnShowPopupMenu().

◆ m_posX

◆ m_posY

◆ m_scaleX

◆ m_scaleY

◆ m_scroll

wxPoint mpWindow::m_scroll
protectedinherited

Definition at line 1531 of file mathplot.h.

◆ m_scrX

◆ m_scrY

◆ m_topLevel

std::vector<mpLayer*> SIM_PLOT_PANEL::m_topLevel
private

Definition at line 269 of file sim_plot_panel.h.

Referenced by AddTrace(), and SIM_PLOT_PANEL().

◆ m_traces

std::map<wxString, TRACE*> SIM_PLOT_PANEL::m_traces
private

◆ m_type

const SIM_TYPE SIM_PLOT_PANEL::m_type
private

Definition at line 271 of file sim_plot_panel.h.

Referenced by AddTrace(), GetType(), and SIM_PLOT_PANEL().

◆ m_zooming

bool mpWindow::m_zooming
protectedinherited

◆ m_zoomRect

wxRect mpWindow::m_zoomRect
protectedinherited

Definition at line 1534 of file mathplot.h.

Referenced by mpWindow::OnMouseMove(), and mpWindow::OnPaint().

◆ zoomIncrementalFactor

double mpWindow::zoomIncrementalFactor = 1.1
staticinherited

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 1344 of file mathplot.h.

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


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