From ee367487de0c76aef1f85b6a2d48e78686cb5721 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Wed, 12 Oct 2016 12:20:49 +0200 Subject: [PATCH] #779 Summary : Added display and axis control of log scale --- .../RimSummaryCurvesCalculator.cpp | 36 +++------ .../RimSummaryCurvesCalculator.h | 7 +- .../ProjectDataModel/RimSummaryPlot.cpp | 75 +++++++++++++++---- .../ProjectDataModel/RimSummaryPlot.h | 1 + .../RimSummaryYAxisProperties.cpp | 10 ++- 5 files changed, 84 insertions(+), 45 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimSummaryCurvesCalculator.cpp b/ApplicationCode/ProjectDataModel/RimSummaryCurvesCalculator.cpp index 977fa24357..3223540751 100644 --- a/ApplicationCode/ProjectDataModel/RimSummaryCurvesCalculator.cpp +++ b/ApplicationCode/ProjectDataModel/RimSummaryCurvesCalculator.cpp @@ -106,6 +106,15 @@ RimSummaryCurvesCalculator::RimSummaryCurvesCalculator(RimSummaryYAxisProperties { } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimSummaryCurvesCalculator::RimSummaryCurvesCalculator(RimSummaryYAxisProperties* axisProperties, const std::vector& curves) + : m_axisProperties(axisProperties), + m_singleCurves(curves) +{ +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -151,7 +160,6 @@ void RimSummaryCurvesCalculator::applyPropertiesToPlot(RiuSummaryQwtPlot* m_qwtP } -/* { if (m_axisProperties->isLogarithmicScaleEnabled) { @@ -159,9 +167,9 @@ void RimSummaryCurvesCalculator::applyPropertiesToPlot(RiuSummaryQwtPlot* m_qwtP if (!currentScaleEngine) { m_qwtPlot->setAxisScaleEngine(m_axisProperties->axis(), new QwtLogScaleEngine); + m_qwtPlot->setAxisMaxMinor(m_axisProperties->axis(), 5); } - m_qwtPlot->setAxisMaxMinor(m_axisProperties->axis(), 5); } else { @@ -169,32 +177,10 @@ void RimSummaryCurvesCalculator::applyPropertiesToPlot(RiuSummaryQwtPlot* m_qwtP if (!currentScaleEngine) { m_qwtPlot->setAxisScaleEngine(m_axisProperties->axis(), new QwtLinearScaleEngine); + m_qwtPlot->setAxisMaxMinor(m_axisProperties->axis(), 3); } - - m_qwtPlot->setAxisMaxMinor(m_axisProperties->axis(), 3); } } -*/ - - m_qwtPlot->setAxisScale(m_axisProperties->axis(), m_axisProperties->visibleRangeMin, m_axisProperties->visibleRangeMax); - -/* - { - if (m_axisProperties->isAutoScaleEnabled) - { - double min = HUGE_VAL; - double max = -HUGE_VAL; - - computeYRange(&min, &max); - - m_qwtPlot->setAxisScale(m_axisProperties->axis(), min, max); - } - else - { - m_qwtPlot->setAxisScale(m_axisProperties->axis(), m_axisProperties->visibleRangeMin, m_axisProperties->visibleRangeMax); - } - } -*/ } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimSummaryCurvesCalculator.h b/ApplicationCode/ProjectDataModel/RimSummaryCurvesCalculator.h index 4c73abcde5..2625317198 100644 --- a/ApplicationCode/ProjectDataModel/RimSummaryCurvesCalculator.h +++ b/ApplicationCode/ProjectDataModel/RimSummaryCurvesCalculator.h @@ -36,11 +36,14 @@ public: const std::vector& curves, const std::vector& curveFilters); - void applyPropertiesToPlot(RiuSummaryQwtPlot* qwtPlot); + RimSummaryCurvesCalculator(RimSummaryYAxisProperties* axisProperties, + const std::vector& curves); + + void applyPropertiesToPlot(RiuSummaryQwtPlot* qwtPlot); + void computeYRange(double* min, double* max) const; private: QString autoAxisTitle() const; - void computeYRange(double* min, double* max) const; bool curveValueRangeY(const QwtPlotCurve* qwtCurve, double* min, double* max) const; private: diff --git a/ApplicationCode/ProjectDataModel/RimSummaryPlot.cpp b/ApplicationCode/ProjectDataModel/RimSummaryPlot.cpp index af425de841..1399d462ef 100644 --- a/ApplicationCode/ProjectDataModel/RimSummaryPlot.cpp +++ b/ApplicationCode/ProjectDataModel/RimSummaryPlot.cpp @@ -132,20 +132,9 @@ void RimSummaryPlot::updateAxis(RimDefines::PlotAxis plotAxis) { if (!m_qwtPlot) return; - std::vector curvesForAxis; + std::vector curves = curvesForAxis(plotAxis); + std::vector curveFiltersForAxis; - - std::vector childCurves; - this->descendantsIncludingThisOfType(childCurves); - - for (RimSummaryCurve* curve : childCurves) - { - if (curve->associatedPlotAxis() == plotAxis) - { - curvesForAxis.push_back(curve); - } - } - for (RimSummaryCurveFilter* cs : m_curveFilters) { if (cs->associatedPlotAxis() == plotAxis) @@ -167,11 +156,11 @@ void RimSummaryPlot::updateAxis(RimDefines::PlotAxis plotAxis) yAxisProperties = m_rightYAxisProperties(); } - if (curvesForAxis.size() > 0) + if (curves.size() > 0) { m_qwtPlot->enableAxis(qwtAxis, true); - RimSummaryCurvesCalculator calc(yAxisProperties, curvesForAxis, curveFiltersForAxis); + RimSummaryCurvesCalculator calc(yAxisProperties, curves, curveFiltersForAxis); calc.applyPropertiesToPlot(m_qwtPlot); } else @@ -180,6 +169,27 @@ void RimSummaryPlot::updateAxis(RimDefines::PlotAxis plotAxis) } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimSummaryPlot::curvesForAxis(RimDefines::PlotAxis plotAxis) const +{ + std::vector curves; + + std::vector childCurves; + this->descendantsIncludingThisOfType(childCurves); + + for (RimSummaryCurve* curve : childCurves) + { + if (curve->associatedPlotAxis() == plotAxis) + { + curves.push_back(curve); + } + } + + return curves; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -247,7 +257,40 @@ void RimSummaryPlot::zoomAll() { if (m_qwtPlot) { - m_qwtPlot->zoomAll(); + m_qwtPlot->setAxisAutoScale(QwtPlot::xBottom, true); + + if (m_leftYAxisProperties->isLogarithmicScaleEnabled) + { + std::vector curves = curvesForAxis(RimDefines::PLOT_AXIS_LEFT); + + double min, max; + RimSummaryCurvesCalculator calc(m_leftYAxisProperties, curves); + calc.computeYRange(&min, &max); + + m_qwtPlot->setAxisScale(m_leftYAxisProperties->axis(), min, max); + } + else + { + m_qwtPlot->setAxisAutoScale(QwtPlot::yLeft, true); + } + + if (m_rightYAxisProperties->isLogarithmicScaleEnabled) + { + std::vector curves = curvesForAxis(RimDefines::PLOT_AXIS_RIGHT); + + double min, max; + RimSummaryCurvesCalculator calc(m_rightYAxisProperties, curves); + calc.computeYRange(&min, &max); + + m_qwtPlot->setAxisScale(m_rightYAxisProperties->axis(), min, max); + } + else + { + m_qwtPlot->setAxisAutoScale(QwtPlot::yRight, true); + } + + m_qwtPlot->replot(); + this->setZoomWindow(m_qwtPlot->currentVisibleWindow()); } diff --git a/ApplicationCode/ProjectDataModel/RimSummaryPlot.h b/ApplicationCode/ProjectDataModel/RimSummaryPlot.h index e012b7941d..4b790bf62b 100644 --- a/ApplicationCode/ProjectDataModel/RimSummaryPlot.h +++ b/ApplicationCode/ProjectDataModel/RimSummaryPlot.h @@ -90,6 +90,7 @@ private: void deletePlotWidget(); void updateAxis(RimDefines::PlotAxis plotAxis); + std::vector curvesForAxis(RimDefines::PlotAxis plotAxis) const; private: caf::PdmField m_showWindow; diff --git a/ApplicationCode/ProjectDataModel/RimSummaryYAxisProperties.cpp b/ApplicationCode/ProjectDataModel/RimSummaryYAxisProperties.cpp index e2e8cff4fa..2f66fb4b89 100644 --- a/ApplicationCode/ProjectDataModel/RimSummaryYAxisProperties.cpp +++ b/ApplicationCode/ProjectDataModel/RimSummaryYAxisProperties.cpp @@ -57,7 +57,6 @@ RimSummaryYAxisProperties::RimSummaryYAxisProperties() CAF_PDM_InitFieldNoDefault(&numberFormat, "NumberFormat", "Number Format", "", "", ""); CAF_PDM_InitField(&isLogarithmicScaleEnabled, "LogarithmicScale", false, "Logarithmic Scale", "", "", ""); - isLogarithmicScaleEnabled.uiCapability()->setUiHidden(true); updateOptionSensitivity(); } @@ -139,7 +138,14 @@ void RimSummaryYAxisProperties::fieldChangedByUi(const caf::PdmFieldHandle* chan rimSummaryPlot->disableAutoZoom(); } - rimSummaryPlot->updateAxes(); + if (changedField == &isLogarithmicScaleEnabled) + { + rimSummaryPlot->loadDataAndUpdate(); + } + else + { + rimSummaryPlot->updateAxes(); + } } //--------------------------------------------------------------------------------------------------