00001 #ifndef _MultivariatePlot_h 00002 #define _MultivariatePlot_h 00003 00007 #include "../UnivariateFunction.h" 00008 #include "IntervalCountLimiter.h" 00009 #include "PlotControl.h" 00010 00011 class MultivariatePlot 00012 : public PlotControl 00013 { 00014 public: 00015 enum ToolType 00016 { 00017 PAN, 00018 ZOOM_IN, 00019 ZOOM_OUT 00020 }; 00021 00022 MultivariatePlot( 00023 wxWindow* pParent, 00024 wxWindowID id, 00025 const FunctionBase& function, 00026 const VariableNames& variables, 00027 PlotStatus* pPlotStatus = NULL, 00028 const wxPoint& position = wxDefaultPosition, 00029 const wxSize& size = wxDefaultSize); 00030 00031 ~MultivariatePlot(); 00032 00033 bool KeepAspectRatio() const; 00034 bool& rKeepAspectRatio(); 00035 00036 const VariableNames& Variables() const; 00037 int VariableXIndex() const; 00038 int VariableYIndex() const; 00039 00040 void SetVariables(int variableXIndex, int variableYIndex); 00041 00042 virtual void OnAspectChange(bool redraw); 00043 protected: 00044 00045 virtual void DrawDisplaced(long x, long y); 00046 00047 virtual void Pan(wxCoord x, wxCoord y); 00048 00049 virtual void ZoomIn(wxCoord x, wxCoord y); 00050 virtual void ZoomRegionIn(wxCoord x, 00051 wxCoord y, 00052 wxCoord width, 00053 wxCoord height); 00054 virtual void ZoomOut(wxCoord x, wxCoord y); 00055 00056 virtual void UpdateStatusOnMove(long x, long y); 00057 00058 virtual void UpdateScale(); 00059 00060 private: 00061 00062 00063 void EnforceAspectRatio(); 00064 00065 void FitToWidth(double& rStart, double& rEnd, double newWidth) 00066 const; 00067 00068 00070 int mVariableXIndex; 00072 int mVariableYIndex; 00073 const VariableNames& mVariables; 00074 00075 bool mKeepAspectRatio; 00076 }; 00077 00078 #endif