13 #ifndef _MP_MATHPLOT_H_ 14 #define _MP_MATHPLOT_H_ 57 #ifdef mathplot_EXPORTS 58 #define WXDLLIMPEXP_MATHPLOT WXEXPORT 59 #define WXDLLIMPEXP_DATA_MATHPLOT( type ) WXEXPORT type 60 #else // not making DLL 61 #define WXDLLIMPEXP_MATHPLOT 62 #define WXDLLIMPEXP_DATA_MATHPLOT( type ) type 70 #include <wx/scrolwin.h> 72 #include <wx/dynarray.h> 74 #include <wx/dcmemory.h> 75 #include <wx/string.h> 88 #define DEBUG_NEW new (_NORMAL_BLOCK, __FILE__, __LINE__) 95 #define X_BORDER_SEPARATION 40 96 #define Y_BORDER_SEPARATION 60 234 virtual void Plot( wxDC& dc,
mpWindow& w ) = 0;
239 const wxString&
GetName()
const {
return m_name; }
244 const wxFont&
GetFont()
const {
return m_font; }
249 const wxPen&
GetPen()
const {
return m_pen; }
273 void SetFont( wxFont& font ) { m_font = font; }
278 void SetPen( wxPen pen ) { m_pen = pen; }
291 wxBitmap GetColourSquare(
int side = 16 );
307 const wxBrush&
GetBrush()
const {
return m_brush; };
311 void SetBrush( wxBrush brush ) { m_brush = brush; };
324 DECLARE_DYNAMIC_CLASS(
mpLayer )
345 mpInfoLayer( wxRect rect,
const wxBrush* brush = wxTRANSPARENT_BRUSH );
354 virtual void UpdateInfo(
mpWindow& w, wxEvent& event );
358 virtual bool HasBBox()
override {
return false; }
369 virtual bool IsInfo()
override {
return true; }
374 virtual bool Inside( wxPoint& point );
378 virtual void Move( wxPoint delta );
381 virtual void UpdateReference();
385 wxPoint GetPosition();
393 const wxRect& GetRectangle() {
return m_dim; };
415 mpInfoCoords( wxRect rect,
const wxBrush* brush = wxTRANSPARENT_BRUSH );
448 mpInfoLegend( wxRect rect,
const wxBrush* brush = wxTRANSPARENT_BRUSH );
476 #define mpALIGNMASK 0x03 478 #define mpALIGN_RIGHT 0x00 480 #define mpALIGN_CENTER 0x01 482 #define mpALIGN_LEFT 0x02 484 #define mpALIGN_TOP mpALIGN_RIGHT 486 #define mpALIGN_BOTTOM mpALIGN_LEFT 488 #define mpALIGN_BORDER_BOTTOM 0x04 490 #define mpALIGN_BORDER_TOP 0x05 492 #define mpX_NORMAL 0x00 494 #define mpX_TIME 0x01 496 #define mpX_HOURS 0x02 498 #define mpX_DATE 0x03 500 #define mpX_DATETIME 0x04 502 #define mpALIGN_BORDER_LEFT mpALIGN_BORDER_BOTTOM 504 #define mpALIGN_BORDER_RIGHT mpALIGN_BORDER_TOP 506 #define mpALIGN_NE 0x00 508 #define mpALIGN_NW 0x01 510 #define mpALIGN_SW 0x02 512 #define mpALIGN_SE 0x03 537 virtual double GetY(
double x ) = 0;
548 DECLARE_DYNAMIC_CLASS(
mpFX )
569 virtual double GetX(
double y ) = 0;
580 DECLARE_DYNAMIC_CLASS(
mpFY )
601 virtual void Rewind() = 0;
608 virtual bool GetNextXY(
double& x,
double& y ) = 0;
610 virtual size_t GetCount() = 0;
622 double s2x(
double plotCoordX )
const;
623 double s2y(
double plotCoordY )
const;
625 double x2s(
double x )
const;
626 double y2s(
double y )
const;
640 void UpdateViewBoundary( wxCoord xnew, wxCoord ynew );
642 DECLARE_DYNAMIC_CLASS(
mpFXY )
664 virtual double GetY(
double x ) = 0;
700 virtual bool IsHorizontal() = 0;
715 void SetTicks(
bool enable ) { m_ticks = enable; };
749 m_minV = std::min( minV, m_minV );
750 m_maxV = std::max( maxV, m_maxV );
753 if( m_minV == m_maxV )
755 m_minV = m_minV - 1.0;
756 m_maxV = m_maxV + 1.0;
767 return std::max( std::abs( m_maxV ), std::abs( m_minV ) );
772 return m_absVisibleMaxV;
780 TickLabel(
double pos_ = 0.0,
const wxString& label_ = wxT(
"") ) :
781 pos( pos_ ), label( label_ ), pixelPos( 0 ), visible( true )
790 std::vector<TickLabel>&
TickLabels() {
return m_tickLabels; };
794 void updateTickLabels( wxDC& dc,
mpWindow& w );
795 void computeLabelExtents( wxDC& dc,
mpWindow& w );
803 return m_tickValues.size();
808 return m_tickLabels.size();
811 virtual const wxString
formatLabel(
double value,
int nDigits ) {
return wxT(
"" ); }
816 return m_tickValues[n];
821 return m_tickLabels[n].pos;
826 return m_tickLabels[n].label;
853 bool ticks =
true,
unsigned int type =
mpX_NORMAL );
879 bool ticks =
true,
unsigned int type =
mpX_NORMAL );
908 bool ticks =
true,
unsigned int type =
mpX_NORMAL );
962 virtual bool HasBBox()
override {
return FALSE; }
982 m_masterScale = masterScale;
995 void computeSlaveTicks(
mpWindow& w );
1016 #define mpMOUSEMODE_DRAG 0 1018 #define mpMOUSEMODE_ZOOMBOX 1 1051 mpWindow( wxWindow* parent, wxWindowID
id,
1052 const wxPoint& pos = wxDefaultPosition,
1053 const wxSize& size = wxDefaultSize,
1069 bool AddLayer(
mpLayer* layer,
bool refreshDisplay =
true );
1079 bool DelLayer(
mpLayer* layer,
bool alsoDeleteObject =
false,
bool refreshDisplay =
true );
1085 void DelAllLayers(
bool alsoDeleteObject,
bool refreshDisplay =
true );
1150 void SetScaleX(
double scaleX );
1166 void SetPosX(
double posX ) { m_posX = posX; UpdateAll(); }
1171 void SetPosY(
double posY ) { m_posY = posY; UpdateAll(); }
1177 void SetPos(
double posX,
double posY ) { m_posX = posX; m_posY = posY; UpdateAll(); }
1184 void SetScr(
int scrX,
int scrY ) { m_scrX = scrX; m_scrY = scrY; }
1189 inline double p2x( wxCoord pixelCoordX ) {
return m_posX + pixelCoordX / m_scaleX; }
1194 inline double p2y( wxCoord pixelCoordY ) {
return m_posY - pixelCoordY / m_scaleY; }
1199 inline wxCoord
x2p(
double x ) {
return (wxCoord) ( (x - m_posX) * m_scaleX ); }
1204 inline wxCoord
y2p(
double y ) {
return (wxCoord) ( (m_posY - y) * m_scaleY ); }
1224 void LockAspect(
bool enable = TRUE );
1236 void Fit()
override;
1244 void Fit(
double xMin,
double xMax,
double yMin,
double yMax,
1245 wxCoord* printSizeX =
NULL, wxCoord* printSizeY =
NULL );
1251 void ZoomIn(
const wxPoint& centerPoint = wxDefaultPosition );
1252 void ZoomIn(
const wxPoint& centerPoint,
double zoomFactor );
1258 void ZoomOut(
const wxPoint& centerPoint = wxDefaultPosition );
1259 void ZoomOut(
const wxPoint& centerPoint,
double zoomFactor );
1275 void ZoomRect( wxPoint p0, wxPoint p1 );
1286 unsigned int CountLayers();
1326 void GetBoundingBox(
double* bbox );
1330 void SetMPScrollbars(
bool status );
1341 bool SaveScreenshot(
const wxString& filename, wxBitmapType type = wxBITMAP_TYPE_BMP,
1342 wxSize imageSize = wxDefaultSize,
bool fit =
false );
1356 void SetMargins(
int top,
int right,
int bottom,
int left );
1396 void SetLayerVisible(
const wxString&
name,
bool viewable );
1401 bool IsLayerVisible(
const wxString&
name );
1406 void SetLayerVisible(
const unsigned int position,
bool viewable );
1411 bool IsLayerVisible(
const unsigned int position );
1417 void SetColourTheme(
const wxColour& bgColour,
1418 const wxColour& drawColour,
1419 const wxColour& axesColour );
1428 m_enableLimitedView = aEnable;
1432 void OnPaint( wxPaintEvent& event );
1433 void OnSize( wxSizeEvent& event );
1436 void OnShowPopupMenu( wxMouseEvent& event );
1437 void OnMouseMiddleDown( wxMouseEvent& event );
1440 void OnCenter( wxCommandEvent& event );
1441 void OnFit( wxCommandEvent& event );
1442 void OnZoomIn( wxCommandEvent& event );
1443 void OnZoomOut( wxCommandEvent& event );
1444 void OnLockAspect( wxCommandEvent& event );
1445 void OnMouseWheel( wxMouseEvent& event );
1446 void OnMagnify( wxMouseEvent& event );
1447 void OnMouseMove( wxMouseEvent& event );
1448 void OnMouseLeftDown( wxMouseEvent& event );
1449 void OnMouseLeftRelease( wxMouseEvent& event );
1450 void OnScrollThumbTrack( wxScrollWinEvent& event );
1451 void OnScrollPageUp( wxScrollWinEvent& event );
1452 void OnScrollPageDown( wxScrollWinEvent& event );
1453 void OnScrollLineUp( wxScrollWinEvent& event );
1454 void OnScrollLineDown( wxScrollWinEvent& event );
1455 void OnScrollTop( wxScrollWinEvent& event );
1456 void OnScrollBottom( wxScrollWinEvent& event );
1458 void DoScrollCalc(
const int position,
const int orientation );
1460 void DoZoomInXCalc(
const int staticXpixel );
1461 void DoZoomInYCalc(
const int staticYpixel );
1462 void DoZoomOutXCalc(
const int staticXpixel );
1463 void DoZoomOutYCalc(
const int staticYpixel );
1467 return !( m_enableLimitedView
1468 && (desiredMax > m_maxX - m_marginRight / m_scaleX
1469 || desiredMin < m_minX - m_marginLeft / m_scaleX) );
1474 return !( m_enableLimitedView
1475 && (desiredMax > m_maxY + m_marginBottom / m_scaleY
1476 || desiredMin < m_minY + m_marginTop / m_scaleY) );
1479 void AdjustLimitedView();
1484 virtual bool UpdateBBox();
1489 virtual bool SetXView(
double pos,
double desiredMax,
double desiredMin );
1494 virtual bool SetYView(
double pos,
double desiredMax,
double desiredMin );
1540 DECLARE_EVENT_TABLE()
1580 virtual void SetData(
const std::vector<double>& xs,
const std::vector<double>& ys );
1610 bool GetNextXY(
double& x,
double& y )
override;
1645 mpFSemiLogXVector( wxString
name = wxEmptyString,
int flags =
mpALIGN_NE );
1647 virtual ~mpFSemiLogXVector() {}
1654 DECLARE_DYNAMIC_CLASS( mpFSemiLogXVector )
1674 mpText(
const wxString&
name = wxT(
"Title"),
int offsetx = 5,
int offsety = 50 );
1687 DECLARE_DYNAMIC_CLASS(
mpText )
1702 mpPrintout(
mpWindow* drawWindow,
const wxChar* title = _T(
"wxMathPlot print output") );
1706 bool OnPrintPage(
int page )
override;
1707 bool HasPage(
int page )
override;
1732 m_reference_phi( 0 ),
1747 phi = m_reference_phi;
1756 m_reference_phi = phi;
1761 virtual bool HasBBox()
override {
return m_trans_shape_xs.size()!=0; }
1765 virtual double GetMinX()
override {
return m_bbox_min_x; }
1769 virtual double GetMaxX()
override {
return m_bbox_max_x; }
1773 virtual double GetMinY()
override {
return m_bbox_min_y; }
1777 virtual double GetMaxY()
override {
return m_bbox_max_y; }
1796 void TranslatePoint(
double x,
double y,
double& out_x,
double& out_y );
1817 void ShapeUpdated();
1844 double quantiles = 2,
1846 const wxString& layerName = wxT(
"") ) :
1850 m_quantiles( quantiles ),
1851 m_segments( segments )
1853 m_continuous =
true;
1905 void RecalculateShape();
1922 m_continuous =
true;
1933 void setPoints(
const std::vector<double>& points_xs,
1934 const std::vector<double>& points_ys,
1935 bool closedShape =
true );
1955 m_min_y = m_max_y = 0;
1964 void GetBitmapCopy( wxImage& outBmp )
const;
1973 void SetBitmap(
const wxImage& inBmp,
double x,
double y,
double lx,
double ly );
1979 virtual double GetMinX()
override {
return m_min_x; }
1983 virtual double GetMaxX()
override {
return m_max_x; }
1987 virtual double GetMinY()
override {
return m_min_y; }
1991 virtual double GetMaxY()
override {
return m_max_y; }
2018 #endif // _MP_MATHPLOT_H_
bool GetMPScrollbars()
Get scrollbars status.
virtual double GetMinX() override
Get inclusive left border of bounding box.
mpLayerType GetLayerType()
Get layer type: a Layer can be of different types: plot lines, axis, info boxes, etc,...
void ShowName(bool show)
Shows or hides the text label with the name of the layer (default is visible).
class WXDLLIMPEXP_MATHPLOT mpWindow
wxMenu * GetPopupMenu()
Get reference to context menu of the plot canvas.
virtual void recalculateTicks(wxDC &dc, mpWindow &w)
void SetMarginBottom(int bottom)
Set the bottom margin.
virtual double GetMinY() override
Get inclusive bottom border of bounding box.
virtual bool IsInfo()
Check whether the layer is an info box.
void GetDataRange(double &minV, double &maxV)
void SetNameAlign(int align)
virtual ~mpMovableObject()
const wxString & GetName() const
Get layer name.
void SetMarginLeft(int left)
Set the left margin.
void EnableMouseWheelPan(bool enabled)
Enable/disable trackpad friendly panning (2-axis scroll wheel)
double GetPosY(void) const
void SetCovarianceMatrix(double cov_00, double cov_01, double cov_11)
Changes the covariance matrix:
bool IsAspectLocked()
Checks whether the X/Y scale aspect is locked.
class WXDLLIMPEXP_MATHPLOT mpFXYVector
double GetScaleX(void) const
TickLabel(double pos_=0.0, const wxString &label_=wxT(""))
double p2x(wxCoord pixelCoordX)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
std::vector< double > m_trans_shape_ys
This virtual class represents objects that can be moved to an arbitrary 2D location+rotation.
const wxFont & GetFont() const
Get font set for this layer.
Abstract base class providing plot and labeling functionality for functions F:X->Y.
std::vector< TickLabel > & TickLabels()
int GetXScreen(void) const
bool m_enableMouseNavigation
double GetScaleY(void) const
int m_segments
The number of line segments that build up the ellipse.
void SetName(wxString name)
Set layer name.
void SetDataRange(double minV, double maxV)
std::vector< TickLabel > m_tickLabels
Abstract base class providing plot and labeling functionality for functions F:Y->X.
void SetMasterScale(mpScaleY *masterScale)
const wxColour & GetAxesColour()
Get axes draw colour.
double GetMinX() override
Returns the actual minimum X data (loaded in SetData).
void SetQuantiles(double q)
Set how many "quantiles" to draw, that is, the confidence interval of the ellipse (see above).
bool m_enableMouseWheelPan
#define mpALIGN_RIGHT
Aligns label to the right.
double p2y(wxCoord pixelCoordY)
Converts mpWindow (screen) pixel coordinates into graph (floating point) coordinates,...
void SetContinuity(bool continuity)
Set the 'continuity' property of the layer (true:draws a continuous line, false:draws separate points...
A class providing graphs functionality for a 2D plot (either continuous or a set of points),...
virtual void Plot(wxDC &dc, mpWindow &w) override
Plot method.
virtual double GetMaxX() override
Get inclusive right border of bounding box.
virtual size_t GetCount()=0
void SetAlign(int align)
Set label axis alignment.
double AbsVisibleMaxValue() const
void SetScaleY(double scaleY)
Set current view's Y scale and refresh display.
virtual bool HasBBox() override
Check whether this layer has a bounding box.
std::vector< double > m_ys
size_t m_index
The internal counter for the "GetNextXY" interface.
double GetMaxX() override
Returns the actual maximum X data (loaded in SetData).
void SetMarginTop(int top)
Set the top margin.
void SetPen(wxPen pen)
Set layer pen.
const wxBrush & GetBrush() const
Get brush set for this layer.
double GetPosX(void) const
void EnableDoubleBuffer(bool enabled)
Enable/disable the double-buffering of the window, eliminating the flicker (default=disabled).
An arbitrary polygon, descendant of mpMovableObject.
double GetQuantiles() const
double GetXscl()
Get current view's X scale.
std::deque< mpLayer * > wxLayerList
Define the type for the list of layers inside mpWindow.
Abstract base class providing plot and labeling functionality for a locus plot F:N->X,...
void ExtendDataRange(double minV, double maxV)
bool GetTicks()
Get Y axis ticks or grid.
mpCovarianceEllipse(double cov_00=1, double cov_11=1, double cov_01=0, double quantiles=2, int segments=32, const wxString &layerName=wxT(""))
Default constructor.
void GetCovarianceMatrix(double &cov_00, double &cov_01, double &cov_11) const
Returns the elements of the current covariance matrix:
virtual ~mpCovarianceEllipse()
Implements an overlay box which shows the mouse coordinates in plot units.
double GetDesiredXmax()
Returns the right-border layer coordinate that the user wants the mpWindow to show (it may be not exa...
wxCoord y2p(double y)
Converts graph (floating point) coordinates into mpWindow (screen) pixel coordinates,...
virtual bool HasBBox() override
Check whether this layer has a bounding box.
virtual double GetMaxX()
Get inclusive right border of bounding box.
#define mpX_NORMAL
Set label for X axis in normal mode.
void SetPosX(double posX)
Set current view's X position and refresh display.
void GetCoordinateBase(double &x, double &y, double &phi) const
Get the current coordinate transformation.
mpBitmapLayer()
Default constructor.
void SetMarginRight(int right)
Set the right margin.
void computeLabelExtents(wxDC &dc, mpWindow &w)
void SetPosY(double posY)
Set current view's Y position and refresh display.
#define WXDLLIMPEXP_MATHPLOT
wxMathPlot is a framework for mathematical graph plotting in wxWindows.
This virtual class represents objects that can be moved to an arbitrary 2D location+rotation.
Plot layer implementing a x-scale ruler.
double GetYscl() const
Get current view's Y scale.
void SetFont(wxFont &font)
Set layer font.
void SetVisible(bool show)
Sets layer visibility.
bool IsVisible()
Checks whether the layer is visible or not.
virtual double GetMaxY() override
Get inclusive top border of bounding box.
virtual void UpdateInfo(mpWindow &w, wxEvent &event)
Updates the content of the info box.
void SetBrush(wxBrush brush)
Set layer brush.
Base class to create small rectangular info boxes mpInfoLayer is the base class to create a small rec...
int GetScrX(void) const
Get current view's X dimension in device context units.
double GetMaxY() override
Returns the actual maximum Y data (loaded in SetData).
bool HasBBox() override
Check whether this layer has a bounding box.
Plot layer implementing a y-scale ruler.
virtual double GetMaxY()
Get inclusive top border of bounding box.
class WXDLLIMPEXP_MATHPLOT mpScaleY
class WXDLLIMPEXP_MATHPLOT mpLayer
virtual double getLabelPos(int n)
#define mpALIGN_TOP
Aligns label to the top.
bool CheckYLimits(double &desiredMax, double &desiredMin) const
Printout class used by mpWindow to draw in the objects to be printed.
void SetTicks(bool enable)
Set X axis ticks or grid.
mpInfoLayer * m_movingInfoLayer
#define mpALIGN_NE
Aligns label to north-east.
void SetAlign(int align)
Set label axis alignment.
double GetXpos() const
Get current view's X position.
void EnableMousePanZoom(bool enabled)
Enable/disable the feature of pan/zoom with the mouse (default=enabled)
bool GetTicks()
Get X axis ticks or grid.
unsigned int CountAllLayers()
Counts the number of plot layers, whether or not they have a bounding box.
virtual bool HasBBox() override
mpInfoLayer has not bounding box.
virtual void getVisibleDataRange(mpWindow &w, double &minV, double &maxV)
void SetDrawOutsideMargins(bool drawModeOutside)
Set Draw mode: inside or outside margins.
bool GetContinuity() const
Gets the 'continuity' property of the layer.
virtual bool HasBBox() override
mpText should not be used for scaling decisions.
bool m_drawOutsideMargins
virtual bool HasBBox() override
Check whether this layer has a bounding box.
void SetAlign(int align)
Set Y axis alignment.
virtual const wxString getLabel(int n)
bool GetDrawOutsideMargins()
Get Draw mode: inside or outside margins.
virtual double GetMinX()
Get inclusive left border of bounding box.
virtual bool GetNextXY(double &x, double &y)=0
Get locus value for next N.
virtual double GetMinY()
Get inclusive bottom border of bounding box.
wxImage m_bitmap
The internal copy of the Bitmap:
void SetAlign(int align)
Set X axis alignment.
virtual double TransformToPlot(double x)
enum __mp_Layer_Type mpLayerType
wxCoord x2p(double x)
Converts graph (floating point) coordinates into mpWindow (screen) pixel coordinates,...
class WXDLLIMPEXP_MATHPLOT mpFXY
virtual void formatLabels()
A 2D ellipse, described by a 2x2 covariance matrix.
class WXDLLIMPEXP_MATHPLOT mpPrintout
double GetDesiredYmin()
Returns the bottom-border layer coordinate that the user wants the mpWindow to show (it may be not ex...
void SetDrawState(bool drawState)
wxCoord m_scaledBitmap_offset_y
void SetCoordinateBase(double x, double y, double phi=0)
Set the coordinate transformation (phi in radians, 0 means no rotation).
virtual bool IsInfo() override
Specifies that this is an Info box layer.
void SetScr(int scrX, int scrY)
Set current view's dimensions in device context units.
mpMovableObject()
Default constructor (sets location and rotation to (0,0,0))
class WXDLLIMPEXP_MATHPLOT mpFX
virtual bool IsHorizontal() override
void SetPos(double posX, double posY)
Set current view's X and Y position and refresh display.
virtual void Plot(wxDC &dc, mpWindow &w)=0
Plot given view of layer to the given device context.
std::vector< double > m_shape_ys
void LimitView(bool aEnable)
Limit zooming & panning to the area used by the plots.
virtual bool HasBBox()
Check whether this layer has a bounding box.
Plot layer implementing a text string.
Canvas for plotting mpLayer implementations.
virtual double GetMinY() override
Get inclusive bottom border of bounding box.
virtual void Rewind()=0
Rewind value enumeration with mpFXY::GetNextXY.
void SetTicks(bool ticks)
Set Y axis ticks or grid.
double GetDesiredXmin()
Returns the left-border layer coordinate that the user wants the mpWindow to show (it may be not exac...
static bool GetLayer(MODEL_VRML &aModel, LAYER_NUM layer, VRML_LAYER **vlayer)
virtual const wxString formatLabel(double value, int nDigits)
virtual bool IsHorizontal() override
#define mpALIGN_CENTER
Aligns label to the center.
double GetMinY() override
Returns the actual minimum Y data (loaded in SetData).
mpPolygon(const wxString &layerName=wxT(""))
Default constructor.
virtual double GetMinX() override
Get inclusive left border of bounding box.
bool CheckXLimits(double &desiredMax, double &desiredMin) const
Implements the legend to be added to the plot This layer allows you to add a legend to describe the p...
virtual int labelCount() const
bool m_enableDoubleBuffer
static double zoomIncrementalFactor
This value sets the zoom steps whenever the user clicks "Zoom in/out" or performs zoom with the mouse...
double AbsMaxValue() const
std::vector< double > m_tickValues
const wxPen & GetPen() const
Get pen set for this layer.
class WXDLLIMPEXP_MATHPLOT mpScaleX
class WXDLLIMPEXP_MATHPLOT mpFY
class WXDLLIMPEXP_MATHPLOT mpText
virtual double GetMaxX() override
Get inclusive right border of bounding box.
Abstract base class providing plot and labeling functionality for functions F:Y->X.
void SetSegments(int segments)
double GetDesiredYmax()
Returns the top layer-border coordinate that the user wants the mpWindow to show (it may be not exact...
virtual double getTickPos(int n)
int GetYScreen(void) const
double GetYpos() const
Get current view's Y position.
virtual double TransformFromPlot(double xplot)
int GetScrY(void) const
Get current view's Y dimension in device context units.
virtual double GetMaxY() override
Get inclusive top border of bounding box.