Skip to content

Commit

Permalink
Merge 8046df6 into 50e78b7
Browse files Browse the repository at this point in the history
  • Loading branch information
agarny committed Sep 16, 2018
2 parents 50e78b7 + 8046df6 commit b107b7a
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3737,11 +3737,11 @@ bool SimulationExperimentViewSimulationWidget::updatePlot(GraphPanelWidget::Grap
// Optimise our axes' values before setting them and replotting our plot, if
// needed

pPlot->optimiseAxisX(minX, maxX);
pPlot->optimiseAxisY(minY, maxY);
pPlot->optimiseAxisX(minX, maxX, GraphPanelWidget::GraphPanelPlotWidget::Linear);
pPlot->optimiseAxisY(minY, maxY, GraphPanelWidget::GraphPanelPlotWidget::Linear);

pPlot->optimiseAxisX(minLogX, maxLogX);
pPlot->optimiseAxisY(minLogY, maxLogY);
pPlot->optimiseAxisX(minLogX, maxLogX, GraphPanelWidget::GraphPanelPlotWidget::Logarithmic);
pPlot->optimiseAxisY(minLogY, maxLogY, GraphPanelWidget::GraphPanelPlotWidget::Logarithmic);

pPlot->setDefaultAxesValues(minX, maxX, minLogX, maxLogX,
minY, maxY, minLogY, maxLogY);
Expand Down
28 changes: 19 additions & 9 deletions src/plugins/widget/GraphPanelWidget/src/graphpanelplotwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2510,7 +2510,8 @@ GraphPanelPlotGraphs GraphPanelPlotWidget::graphs() const
//==============================================================================

void GraphPanelPlotWidget::optimiseAxis(const int &pAxisId, double &pMin,
double &pMax) const
double &pMax,
Optimization pOptimization) const
{
// Make sure that the given values are different

Expand All @@ -2524,11 +2525,12 @@ void GraphPanelPlotWidget::optimiseAxis(const int &pAxisId, double &pMin,
pMax = pMax+pow(10.0, powerValue);
}

// Optimise the axis' values so that they fall onto a factor of the axis'
// minor step, but only if we are not dealing with a logarithmic axis
// Optimise the axis' values, using either a linear or logarithmic approach

if ( ((pAxisId == QwtPlot::xBottom) && !mLogAxisX)
|| ((pAxisId == QwtPlot::yLeft) && !mLogAxisY)) {
if ( ( (pOptimization == Default)
&& ( ((pAxisId == QwtPlot::xBottom) && !mLogAxisX)
|| ((pAxisId == QwtPlot::yLeft) && !mLogAxisY)))
|| (pOptimization == Linear)) {
uint base = axisScaleEngine(pAxisId)->base();
double majorStep = QwtScaleArithmetic::divideInterval(pMax-pMin,
axisMaxMajor(pAxisId),
Expand All @@ -2539,25 +2541,33 @@ void GraphPanelPlotWidget::optimiseAxis(const int &pAxisId, double &pMin,

pMin = qFloor(pMin/minorStep)*minorStep;
pMax = qCeil(pMax/minorStep)*minorStep;
} else {
double minStep = pow(10.0, qFloor(log10(pMin))-1);
double maxStep = pow(10.0, qCeil(log10(pMax))-1);

pMin = qFloor(pMin/minStep)*minStep;
pMax = qCeil(pMax/maxStep)*maxStep;
}
}

//==============================================================================

void GraphPanelPlotWidget::optimiseAxisX(double &pMin, double &pMax) const
void GraphPanelPlotWidget::optimiseAxisX(double &pMin, double &pMax,
Optimization pOptimization) const
{
// Optimise our X axis' values

optimiseAxis(QwtPlot::xBottom, pMin, pMax);
optimiseAxis(QwtPlot::xBottom, pMin, pMax, pOptimization);
}

//==============================================================================

void GraphPanelPlotWidget::optimiseAxisY(double &pMin, double &pMax) const
void GraphPanelPlotWidget::optimiseAxisY(double &pMin, double &pMax,
Optimization pOptimization) const
{
// Optimise our Y axis' values

optimiseAxis(QwtPlot::yLeft, pMin, pMax);
optimiseAxis(QwtPlot::yLeft, pMin, pMax, pOptimization);
}

//==============================================================================
Expand Down
15 changes: 12 additions & 3 deletions src/plugins/widget/GraphPanelWidget/src/graphpanelplotwidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,12 @@ class GRAPHPANELWIDGET_EXPORT GraphPanelPlotWidget : public QwtPlot,
ZoomRegion
};

enum Optimization {
Default,
Linear,
Logarithmic
};

explicit GraphPanelPlotWidget(const GraphPanelPlotWidgets &pNeighbors,
QAction *pSynchronizeXAxisAction,
QAction *pSynchronizeYAxisAction,
Expand All @@ -396,8 +402,10 @@ class GRAPHPANELWIDGET_EXPORT GraphPanelPlotWidget : public QwtPlot,
bool dataRect(QRectF &pDataRect) const;
bool dataLogRect(QRectF &pDataLogRect) const;

void optimiseAxisX(double &pMin, double &pMax) const;
void optimiseAxisY(double &pMin, double &pMax) const;
void optimiseAxisX(double &pMin, double &pMax,
Optimization pOptimization = Default) const;
void optimiseAxisY(double &pMin, double &pMax,
Optimization pOptimization = Default) const;

double minX() const;
double maxX() const;
Expand Down Expand Up @@ -615,7 +623,8 @@ class GRAPHPANELWIDGET_EXPORT GraphPanelPlotWidget : public QwtPlot,

QRectF realDataRect() const;

void optimiseAxis(const int &pAxisId, double &pMin, double &pMax) const;
void optimiseAxis(const int &pAxisId, double &pMin, double &pMax,
Optimization pOptimization) const;

void setAxis(int pAxisId, double pMin, double pMax);

Expand Down

0 comments on commit b107b7a

Please sign in to comment.