mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#1322 Several refactorings of RimSummaryPlot, added TimeHistoryCurve support
Removed unique_pointer, as childFields now owns (and deletes) the contained object Simplified extraction of visible curves Simplified calculation of zoom range
This commit is contained in:
parent
388fa2b70e
commit
ad90d3f38f
@ -97,12 +97,12 @@ public:
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimSummaryPlotYAxisFormater::RimSummaryPlotYAxisFormater(RimSummaryYAxisProperties* axisProperties,
|
||||
const std::vector<RimSummaryCurve*>& curves,
|
||||
const std::vector<RimSummaryCurveFilter*>& curveFilters)
|
||||
RimSummaryPlotYAxisFormatter::RimSummaryPlotYAxisFormatter(RimSummaryYAxisProperties* axisProperties,
|
||||
const std::vector<RimSummaryCurve*>& curves,
|
||||
const std::set<QString>& timeHistoryCurveQuantities)
|
||||
: m_axisProperties(axisProperties),
|
||||
m_singleCurves(curves),
|
||||
m_curveFilters(curveFilters)
|
||||
m_timeHistoryCurveQuantities(timeHistoryCurveQuantities)
|
||||
{
|
||||
}
|
||||
|
||||
@ -110,7 +110,7 @@ RimSummaryPlotYAxisFormater::RimSummaryPlotYAxisFormater(RimSummaryYAxisProperti
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimSummaryPlotYAxisFormater::applyYAxisPropertiesToPlot(RiuSummaryQwtPlot* qwtPlot)
|
||||
void RimSummaryPlotYAxisFormatter::applyYAxisPropertiesToPlot(RiuSummaryQwtPlot* qwtPlot)
|
||||
{
|
||||
if (!qwtPlot) return;
|
||||
|
||||
@ -189,34 +189,18 @@ void RimSummaryPlotYAxisFormater::applyYAxisPropertiesToPlot(RiuSummaryQwtPlot*
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString RimSummaryPlotYAxisFormater::autoAxisTitle() const
|
||||
QString RimSummaryPlotYAxisFormatter::autoAxisTitle() const
|
||||
{
|
||||
std::map<std::string, std::set<std::string> > unitToQuantityNameMap;
|
||||
|
||||
for ( RimSummaryCurve* rimCurve : m_singleCurves )
|
||||
{
|
||||
if ( rimCurve->isCurveVisible() && rimCurve->yAxis() == this->m_axisProperties->plotAxisType() )
|
||||
if ( rimCurve->yAxis() == this->m_axisProperties->plotAxisType() )
|
||||
{
|
||||
unitToQuantityNameMap[rimCurve->unitName()].insert(rimCurve->summaryAddress().quantityName());
|
||||
}
|
||||
}
|
||||
|
||||
for ( RimSummaryCurveFilter* curveFilter : m_curveFilters )
|
||||
{
|
||||
if ( curveFilter->isCurvesVisible() )
|
||||
{
|
||||
std::vector<RimSummaryCurve*> curveFilterCurves = curveFilter->curves();
|
||||
|
||||
for ( RimSummaryCurve* rimCurve : curveFilterCurves )
|
||||
{
|
||||
if ( rimCurve->isCurveVisible() && rimCurve->yAxis() == this->m_axisProperties->plotAxisType() )
|
||||
{
|
||||
unitToQuantityNameMap[rimCurve->unitName()].insert(rimCurve->summaryAddress().quantityName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QString assembledYAxisText;
|
||||
|
||||
for ( auto unitIt : unitToQuantityNameMap )
|
||||
@ -228,6 +212,19 @@ QString RimSummaryPlotYAxisFormater::autoAxisTitle() const
|
||||
assembledYAxisText += "[" + QString::fromStdString(unitIt.first) + "] ";
|
||||
}
|
||||
|
||||
if (m_timeHistoryCurveQuantities.size() > 0)
|
||||
{
|
||||
if (!assembledYAxisText.isEmpty())
|
||||
{
|
||||
assembledYAxisText += " : ";
|
||||
}
|
||||
|
||||
for (auto timeQuantity : m_timeHistoryCurveQuantities)
|
||||
{
|
||||
assembledYAxisText += timeQuantity + " ";
|
||||
}
|
||||
}
|
||||
|
||||
return assembledYAxisText;
|
||||
}
|
||||
|
||||
@ -241,9 +238,12 @@ QString RimSummaryPlotYAxisFormater::autoAxisTitle() const
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimSummaryPlotYAxisRangeCalculator::RimSummaryPlotYAxisRangeCalculator(RimSummaryYAxisProperties* axisProperties, const std::vector<RimSummaryCurve*>& curves)
|
||||
: m_axisProperties(axisProperties),
|
||||
m_singleCurves(curves)
|
||||
RimSummaryPlotYAxisRangeCalculator::RimSummaryPlotYAxisRangeCalculator(
|
||||
const std::vector<QwtPlotCurve*>& qwtCurves,
|
||||
const std::vector<double>& yValuesForAllCurves)
|
||||
:
|
||||
m_singleCurves(qwtCurves),
|
||||
m_yValuesForAllCurves(yValuesForAllCurves)
|
||||
{
|
||||
}
|
||||
|
||||
@ -255,12 +255,12 @@ void RimSummaryPlotYAxisRangeCalculator::computeYRange(double* min, double* max)
|
||||
double minValue = HUGE_VAL;
|
||||
double maxValue = -HUGE_VAL;
|
||||
|
||||
for (RimSummaryCurve* curve : m_singleCurves)
|
||||
for (QwtPlotCurve* curve : m_singleCurves)
|
||||
{
|
||||
double minCurveValue = HUGE_VAL;
|
||||
double maxCurveValue = -HUGE_VAL;
|
||||
|
||||
if (curve->isCurveVisible() && curveValueRangeY(curve->qwtPlotCurve(), &minCurveValue, &maxCurveValue))
|
||||
if (curveValueRangeY(curve, &minCurveValue, &maxCurveValue))
|
||||
{
|
||||
if (minCurveValue < minValue)
|
||||
{
|
||||
@ -280,26 +280,17 @@ void RimSummaryPlotYAxisRangeCalculator::computeYRange(double* min, double* max)
|
||||
maxValue = RimDefines::maximumDefaultValuePlot();
|
||||
}
|
||||
|
||||
if (m_axisProperties->isLogarithmicScaleEnabled)
|
||||
// For logarithmic auto scaling, compute positive curve value closest to zero and use
|
||||
// this value as the plot visible minimum
|
||||
|
||||
double pos = HUGE_VAL;
|
||||
double neg = -HUGE_VAL;
|
||||
|
||||
RigStatisticsCalculator::posNegClosestToZero(m_yValuesForAllCurves, pos, neg);
|
||||
|
||||
if (pos != HUGE_VAL)
|
||||
{
|
||||
// For logarithmic auto scaling, compute positive curve value closest to zero and use
|
||||
// this value as the plot visible minimum
|
||||
|
||||
double pos = HUGE_VAL;
|
||||
double neg = -HUGE_VAL;
|
||||
|
||||
for (RimSummaryCurve* curve : m_singleCurves)
|
||||
{
|
||||
if (curve->isCurveVisible())
|
||||
{
|
||||
RigStatisticsCalculator::posNegClosestToZero(curve->yValues(), pos, neg);
|
||||
}
|
||||
}
|
||||
|
||||
if (pos != HUGE_VAL)
|
||||
{
|
||||
minValue = pos;
|
||||
}
|
||||
minValue = pos;
|
||||
}
|
||||
|
||||
*min = minValue;
|
||||
|
@ -29,12 +29,12 @@ class RiuSummaryQwtPlot;
|
||||
|
||||
class QwtPlotCurve;
|
||||
|
||||
class RimSummaryPlotYAxisFormater
|
||||
class RimSummaryPlotYAxisFormatter
|
||||
{
|
||||
public:
|
||||
RimSummaryPlotYAxisFormater(RimSummaryYAxisProperties* axisProperties,
|
||||
RimSummaryPlotYAxisFormatter(RimSummaryYAxisProperties* axisProperties,
|
||||
const std::vector<RimSummaryCurve*>& curves,
|
||||
const std::vector<RimSummaryCurveFilter*>& curveFilters);
|
||||
const std::set<QString>& timeHistoryCurveQuantities);
|
||||
|
||||
void applyYAxisPropertiesToPlot(RiuSummaryQwtPlot* qwtPlot);
|
||||
|
||||
@ -43,16 +43,16 @@ private:
|
||||
|
||||
private:
|
||||
RimSummaryYAxisProperties* m_axisProperties;
|
||||
std::vector<RimSummaryCurve*> m_singleCurves;
|
||||
std::vector<RimSummaryCurveFilter*> m_curveFilters;
|
||||
const std::vector<RimSummaryCurve*> m_singleCurves;
|
||||
const std::set<QString> m_timeHistoryCurveQuantities;
|
||||
};
|
||||
|
||||
|
||||
class RimSummaryPlotYAxisRangeCalculator
|
||||
{
|
||||
public:
|
||||
RimSummaryPlotYAxisRangeCalculator(RimSummaryYAxisProperties* axisProperties,
|
||||
const std::vector<RimSummaryCurve*>& curves);
|
||||
RimSummaryPlotYAxisRangeCalculator( const std::vector<QwtPlotCurve*>& qwtCurves,
|
||||
const std::vector<double>& yValuesForAllCurves);
|
||||
|
||||
void computeYRange(double* min, double* max) const;
|
||||
|
||||
@ -61,6 +61,7 @@ private:
|
||||
|
||||
private:
|
||||
RimSummaryYAxisProperties* m_axisProperties;
|
||||
std::vector<RimSummaryCurve*> m_singleCurves;
|
||||
const std::vector<QwtPlotCurve*> m_singleCurves;
|
||||
const std::vector<double> m_yValuesForAllCurves;
|
||||
};
|
||||
|
||||
|
@ -20,6 +20,7 @@
|
||||
|
||||
#include "RiaApplication.h"
|
||||
|
||||
#include "RimGridTimeHistoryCurve.h"
|
||||
#include "RimSummaryCase.h"
|
||||
#include "RimSummaryCurve.h"
|
||||
#include "RimSummaryCurveFilter.h"
|
||||
@ -59,28 +60,28 @@ RimSummaryPlot::RimSummaryPlot()
|
||||
CAF_PDM_InitFieldNoDefault(&m_curveFilters, "SummaryCurveFilters", "", "", "", "");
|
||||
m_curveFilters.uiCapability()->setUiTreeHidden(true);
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_curves, "SummaryCurves", "", "", "", "");
|
||||
m_curves.uiCapability()->setUiTreeHidden(true);
|
||||
CAF_PDM_InitFieldNoDefault(&m_summaryCurves, "SummaryCurves", "", "", "", "");
|
||||
m_summaryCurves.uiCapability()->setUiTreeHidden(true);
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_gridTimeHistoryCurves, "GridTimeHistoryCurves", "", "", "", "");
|
||||
m_gridTimeHistoryCurves.uiCapability()->setUiTreeHidden(true);
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_leftYAxisProperties, "LeftYAxisProperties", "Left Y Axis", "", "", "");
|
||||
m_leftYAxisProperties.uiCapability()->setUiTreeHidden(true);
|
||||
|
||||
m_leftYAxisPropertiesObject = std::unique_ptr<RimSummaryYAxisProperties>(new RimSummaryYAxisProperties);
|
||||
m_leftYAxisPropertiesObject->setNameAndAxis("Left Y-Axis", QwtPlot::yLeft);
|
||||
m_leftYAxisProperties = m_leftYAxisPropertiesObject.get();
|
||||
m_leftYAxisProperties = new RimSummaryYAxisProperties;
|
||||
m_leftYAxisProperties->setNameAndAxis("Left Y-Axis", QwtPlot::yLeft);
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_rightYAxisProperties, "RightYAxisProperties", "Right Y Axis", "", "", "");
|
||||
m_rightYAxisProperties.uiCapability()->setUiTreeHidden(true);
|
||||
|
||||
m_rightYAxisPropertiesObject = std::unique_ptr<RimSummaryYAxisProperties>(new RimSummaryYAxisProperties);
|
||||
m_rightYAxisPropertiesObject->setNameAndAxis("Right Y-Axis", QwtPlot::yRight);
|
||||
m_rightYAxisProperties = m_rightYAxisPropertiesObject.get();
|
||||
m_rightYAxisProperties = new RimSummaryYAxisProperties;
|
||||
m_rightYAxisProperties->setNameAndAxis("Right Y-Axis", QwtPlot::yRight);
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_timeAxisProperties, "TimeAxisProperties", "Time Axis", "", "", "");
|
||||
m_timeAxisProperties.uiCapability()->setUiTreeHidden(true);
|
||||
|
||||
m_timeAxisPropertiesObject = std::unique_ptr<RimSummaryTimeAxisProperties>(new RimSummaryTimeAxisProperties);
|
||||
m_timeAxisProperties = m_timeAxisPropertiesObject.get();
|
||||
m_timeAxisProperties = new RimSummaryTimeAxisProperties;
|
||||
|
||||
CAF_PDM_InitField(&m_isAutoZoom, "AutoZoom", true, "Auto Zoom", "", "", "");
|
||||
m_isAutoZoom.uiCapability()->setUiHidden(true);
|
||||
@ -97,7 +98,7 @@ RimSummaryPlot::~RimSummaryPlot()
|
||||
|
||||
deleteViewWidget();
|
||||
|
||||
m_curves.deleteAllChildObjects();
|
||||
m_summaryCurves.deleteAllChildObjects();
|
||||
m_curveFilters.deleteAllChildObjects();
|
||||
}
|
||||
|
||||
@ -119,14 +120,7 @@ void RimSummaryPlot::updateAxes()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimSummaryPlot::isLogarithmicScaleEnabled(RimDefines::PlotAxis plotAxis) const
|
||||
{
|
||||
if (plotAxis == RimDefines::PLOT_AXIS_LEFT)
|
||||
{
|
||||
return m_leftYAxisProperties->isLogarithmicScaleEnabled();
|
||||
}
|
||||
else
|
||||
{
|
||||
return m_rightYAxisProperties->isLogarithmicScaleEnabled();
|
||||
}
|
||||
return yAxisPropertiesForAxis(plotAxis)->isLogarithmicScaleEnabled();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -181,9 +175,9 @@ time_t RimSummaryPlot::firstTimeStepOfFirstCurve()
|
||||
}
|
||||
|
||||
size_t i = 0;
|
||||
while (firstCurve == nullptr && i < m_curves.size())
|
||||
while (firstCurve == nullptr && i < m_summaryCurves.size())
|
||||
{
|
||||
firstCurve = m_curves[i];
|
||||
firstCurve = m_summaryCurves[i];
|
||||
++i;
|
||||
}
|
||||
|
||||
@ -284,8 +278,6 @@ QString RimSummaryPlot::asciiDataForPlotExport() const
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -294,62 +286,103 @@ void RimSummaryPlot::updateAxis(RimDefines::PlotAxis plotAxis)
|
||||
if (!m_qwtPlot) return;
|
||||
|
||||
QwtPlot::Axis qwtAxis = QwtPlot::yLeft;
|
||||
RimSummaryYAxisProperties* yAxisProperties = nullptr;
|
||||
if (plotAxis == RimDefines::PLOT_AXIS_LEFT)
|
||||
{
|
||||
qwtAxis = QwtPlot::yLeft;
|
||||
yAxisProperties = m_leftYAxisProperties();
|
||||
}
|
||||
else
|
||||
{
|
||||
qwtAxis = QwtPlot::yRight;
|
||||
yAxisProperties = m_rightYAxisProperties();
|
||||
}
|
||||
|
||||
if (!yAxisProperties->isActive())
|
||||
RimSummaryYAxisProperties* yAxisProperties = yAxisPropertiesForAxis(plotAxis);
|
||||
if (yAxisProperties->isActive() && hasVisibleCurvesForAxis(plotAxis))
|
||||
{
|
||||
m_qwtPlot->enableAxis(qwtAxis, false);
|
||||
m_qwtPlot->enableAxis(qwtAxis, true);
|
||||
|
||||
std::set<QString> timeHistoryQuantities;
|
||||
|
||||
for (auto c : visibleTimeHistoryCurvesForAxis(plotAxis))
|
||||
{
|
||||
timeHistoryQuantities.insert(c->quantityName());
|
||||
}
|
||||
|
||||
RimSummaryPlotYAxisFormatter calc(yAxisProperties, visibleSummaryCurvesForAxis(plotAxis), timeHistoryQuantities);
|
||||
calc.applyYAxisPropertiesToPlot(m_qwtPlot);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (hasVisibleCurvesForAxis(plotAxis))
|
||||
{
|
||||
std::vector<RimSummaryCurve*> curves;
|
||||
curves.insert(curves.begin(), m_curves.begin(), m_curves.end());
|
||||
|
||||
std::vector<RimSummaryCurveFilter*> curveFilters;
|
||||
curveFilters.insert(curveFilters.begin(), m_curveFilters.begin(), m_curveFilters.end());
|
||||
|
||||
m_qwtPlot->enableAxis(qwtAxis, true);
|
||||
|
||||
RimSummaryPlotYAxisFormater calc(yAxisProperties, curves, curveFilters);
|
||||
calc.applyYAxisPropertiesToPlot(m_qwtPlot);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_qwtPlot->enableAxis(qwtAxis, false);
|
||||
}
|
||||
m_qwtPlot->enableAxis(qwtAxis, false);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<RimSummaryCurve*> RimSummaryPlot::curvesForAxis(RimDefines::PlotAxis plotAxis) const
|
||||
void RimSummaryPlot::updateZoomForAxis(RimDefines::PlotAxis plotAxis)
|
||||
{
|
||||
RimSummaryYAxisProperties* yAxisProps = yAxisPropertiesForAxis(plotAxis);
|
||||
|
||||
if (yAxisProps->isLogarithmicScaleEnabled)
|
||||
{
|
||||
std::vector<double> yValues;
|
||||
std::vector<QwtPlotCurve*> plotCurves;
|
||||
|
||||
for (RimSummaryCurve* c : visibleSummaryCurvesForAxis(plotAxis))
|
||||
{
|
||||
std::vector<double> curveValues = c->yValues();
|
||||
yValues.insert(yValues.end(), curveValues.begin(), curveValues.end());
|
||||
plotCurves.push_back(c->qwtPlotCurve());
|
||||
}
|
||||
|
||||
for (RimGridTimeHistoryCurve* c : visibleTimeHistoryCurvesForAxis(plotAxis))
|
||||
{
|
||||
std::vector<double> curveValues = c->yValues();
|
||||
yValues.insert(yValues.end(), curveValues.begin(), curveValues.end());
|
||||
plotCurves.push_back(c->qwtPlotCurve());
|
||||
}
|
||||
|
||||
double min, max;
|
||||
RimSummaryPlotYAxisRangeCalculator calc(plotCurves, yValues);
|
||||
calc.computeYRange(&min, &max);
|
||||
|
||||
m_qwtPlot->setAxisScale(yAxisProps->qwtPlotAxisType(), min, max);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_qwtPlot->setAxisAutoScale(yAxisProps->qwtPlotAxisType(), true);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<RimSummaryCurve*> RimSummaryPlot::visibleSummaryCurvesForAxis(RimDefines::PlotAxis plotAxis) const
|
||||
{
|
||||
std::vector<RimSummaryCurve*> curves;
|
||||
|
||||
std::vector<RimSummaryCurve*> childCurves;
|
||||
this->descendantsIncludingThisOfType(childCurves);
|
||||
|
||||
for (RimSummaryCurve* curve : childCurves)
|
||||
for (RimSummaryCurve* curve : m_summaryCurves)
|
||||
{
|
||||
if (curve->yAxis() == plotAxis)
|
||||
if (curve->isCurveVisible() && curve->yAxis() == plotAxis)
|
||||
{
|
||||
curves.push_back(curve);
|
||||
}
|
||||
}
|
||||
|
||||
for (RimSummaryCurveFilter * curveFilter : m_curveFilters)
|
||||
{
|
||||
if (curveFilter->isCurvesVisible())
|
||||
{
|
||||
for (RimSummaryCurve* curve : curveFilter->curves())
|
||||
{
|
||||
if (curve->isCurveVisible() && curve->yAxis() == plotAxis)
|
||||
{
|
||||
curves.push_back(curve);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return curves;
|
||||
}
|
||||
|
||||
@ -358,25 +391,58 @@ std::vector<RimSummaryCurve*> RimSummaryPlot::curvesForAxis(RimDefines::PlotAxis
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimSummaryPlot::hasVisibleCurvesForAxis(RimDefines::PlotAxis plotAxis) const
|
||||
{
|
||||
for (RimSummaryCurve* curve : m_curves)
|
||||
if (visibleSummaryCurvesForAxis(plotAxis).size() > 0)
|
||||
{
|
||||
if (curve->isCurveVisible() && curve->yAxis() == plotAxis) return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
for (RimSummaryCurveFilter * curveFilter : m_curveFilters)
|
||||
if (visibleTimeHistoryCurvesForAxis(plotAxis).size() > 0)
|
||||
{
|
||||
if (curveFilter->isCurvesVisible())
|
||||
{
|
||||
for ( RimSummaryCurve* curve : curveFilter->curves() )
|
||||
{
|
||||
if ( curve->isCurveVisible() && curve->yAxis() == plotAxis ) return true;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimSummaryYAxisProperties* RimSummaryPlot::yAxisPropertiesForAxis(RimDefines::PlotAxis plotAxis) const
|
||||
{
|
||||
RimSummaryYAxisProperties* yAxisProps = nullptr;
|
||||
|
||||
if (plotAxis == RimDefines::PLOT_AXIS_LEFT)
|
||||
{
|
||||
yAxisProps = m_leftYAxisProperties();
|
||||
}
|
||||
else
|
||||
{
|
||||
yAxisProps = m_rightYAxisProperties();
|
||||
}
|
||||
|
||||
CVF_ASSERT(yAxisProps);
|
||||
|
||||
return yAxisProps;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<RimGridTimeHistoryCurve*> RimSummaryPlot::visibleTimeHistoryCurvesForAxis(RimDefines::PlotAxis plotAxis) const
|
||||
{
|
||||
std::vector<RimGridTimeHistoryCurve*> curves;
|
||||
|
||||
for (auto c : m_gridTimeHistoryCurves)
|
||||
{
|
||||
if (c->isCurveVisible() && c->yAxis() == plotAxis)
|
||||
{
|
||||
curves.push_back(c);
|
||||
}
|
||||
}
|
||||
|
||||
return curves;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -442,7 +508,7 @@ void RimSummaryPlot::updateTimeAxis()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimSummaryPlot::updateCaseNameHasChanged()
|
||||
{
|
||||
for (RimSummaryCurve* curve : m_curves)
|
||||
for (RimSummaryCurve* curve : m_summaryCurves)
|
||||
{
|
||||
curve->updateCurveName();
|
||||
curve->updateConnectedEditors();
|
||||
@ -483,40 +549,13 @@ void RimSummaryPlot::zoomAll()
|
||||
{
|
||||
m_qwtPlot->setAxisAutoScale(QwtPlot::xBottom, true);
|
||||
|
||||
if (m_leftYAxisProperties->isLogarithmicScaleEnabled)
|
||||
{
|
||||
std::vector<RimSummaryCurve*> curves = curvesForAxis(RimDefines::PLOT_AXIS_LEFT);
|
||||
|
||||
double min, max;
|
||||
RimSummaryPlotYAxisRangeCalculator calc(m_leftYAxisProperties, curves);
|
||||
calc.computeYRange(&min, &max);
|
||||
|
||||
m_qwtPlot->setAxisScale(m_leftYAxisProperties->qwtPlotAxisType(), min, max);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_qwtPlot->setAxisAutoScale(QwtPlot::yLeft, true);
|
||||
}
|
||||
|
||||
if (m_rightYAxisProperties->isLogarithmicScaleEnabled)
|
||||
{
|
||||
std::vector<RimSummaryCurve*> curves = curvesForAxis(RimDefines::PLOT_AXIS_RIGHT);
|
||||
|
||||
double min, max;
|
||||
RimSummaryPlotYAxisRangeCalculator calc(m_rightYAxisProperties, curves);
|
||||
calc.computeYRange(&min, &max);
|
||||
|
||||
m_qwtPlot->setAxisScale(m_rightYAxisProperties->qwtPlotAxisType(), min, max);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_qwtPlot->setAxisAutoScale(QwtPlot::yRight, true);
|
||||
}
|
||||
updateZoomForAxis(RimDefines::PLOT_AXIS_LEFT);
|
||||
updateZoomForAxis(RimDefines::PLOT_AXIS_RIGHT);
|
||||
|
||||
m_qwtPlot->replot();
|
||||
}
|
||||
|
||||
updateZoomFromQwt();
|
||||
updateZoomWindowFromQwt();
|
||||
|
||||
m_isAutoZoom = true;
|
||||
}
|
||||
@ -528,7 +567,7 @@ void RimSummaryPlot::addCurve(RimSummaryCurve* curve)
|
||||
{
|
||||
if (curve)
|
||||
{
|
||||
m_curves.push_back(curve);
|
||||
m_summaryCurves.push_back(curve);
|
||||
if (m_qwtPlot)
|
||||
{
|
||||
curve->setParentQwtPlot(m_qwtPlot);
|
||||
@ -553,6 +592,21 @@ void RimSummaryPlot::addCurveFilter(RimSummaryCurveFilter* curveFilter)
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimSummaryPlot::addGridTimeHistoryCurve(RimGridTimeHistoryCurve* curve)
|
||||
{
|
||||
CVF_ASSERT(curve);
|
||||
|
||||
m_gridTimeHistoryCurves.push_back(curve);
|
||||
if (m_qwtPlot)
|
||||
{
|
||||
curve->setParentQwtPlot(m_qwtPlot);
|
||||
this->updateAxes();
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -601,7 +655,8 @@ void RimSummaryPlot::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering
|
||||
axisFolder->add(&m_rightYAxisProperties);
|
||||
|
||||
uiTreeOrdering.add(&m_curveFilters);
|
||||
uiTreeOrdering.add(&m_curves);
|
||||
uiTreeOrdering.add(&m_summaryCurves);
|
||||
uiTreeOrdering.add(&m_gridTimeHistoryCurves);
|
||||
|
||||
uiTreeOrdering.setForgetRemainingFields(true);
|
||||
}
|
||||
@ -618,11 +673,16 @@ void RimSummaryPlot::loadDataAndUpdate()
|
||||
curveFilter->loadDataAndUpdate();
|
||||
}
|
||||
|
||||
for (RimSummaryCurve* curve : m_curves)
|
||||
for (RimSummaryCurve* curve : m_summaryCurves)
|
||||
{
|
||||
curve->loadDataAndUpdate();
|
||||
}
|
||||
|
||||
for (RimGridTimeHistoryCurve* curve : m_gridTimeHistoryCurves)
|
||||
{
|
||||
curve->loadDataAndUpdate();
|
||||
}
|
||||
|
||||
this->updateAxes();
|
||||
|
||||
updateZoomInQwt();
|
||||
@ -665,7 +725,7 @@ void RimSummaryPlot::setZoomIntervalsInQwtPlot()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimSummaryPlot::updateZoomFromQwt()
|
||||
void RimSummaryPlot::updateZoomWindowFromQwt()
|
||||
{
|
||||
if (!m_qwtPlot) return;
|
||||
|
||||
@ -713,7 +773,12 @@ QWidget* RimSummaryPlot::createViewWidget(QWidget* mainWindowParent)
|
||||
curveFilter->setParentQwtPlot(m_qwtPlot);
|
||||
}
|
||||
|
||||
for(RimSummaryCurve* curve : m_curves)
|
||||
for(RimSummaryCurve* curve : m_summaryCurves)
|
||||
{
|
||||
curve->setParentQwtPlot(m_qwtPlot);
|
||||
}
|
||||
|
||||
for (RimGridTimeHistoryCurve* curve : m_gridTimeHistoryCurves)
|
||||
{
|
||||
curve->setParentQwtPlot(m_qwtPlot);
|
||||
}
|
||||
@ -766,7 +831,12 @@ void RimSummaryPlot::detachAllCurves()
|
||||
curveFilter->detachQwtCurves();
|
||||
}
|
||||
|
||||
for(RimSummaryCurve* curve : m_curves)
|
||||
for(RimSummaryCurve* curve : m_summaryCurves)
|
||||
{
|
||||
curve->detachQwtCurve();
|
||||
}
|
||||
|
||||
for (RimGridTimeHistoryCurve* curve : m_gridTimeHistoryCurves)
|
||||
{
|
||||
curve->detachQwtCurve();
|
||||
}
|
||||
@ -775,13 +845,21 @@ void RimSummaryPlot::detachAllCurves()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimSummaryCurve* RimSummaryPlot::findRimCurveFromQwtCurve(const QwtPlotCurve* qwtCurve) const
|
||||
caf::PdmObject* RimSummaryPlot::findRimCurveFromQwtCurve(const QwtPlotCurve* qwtCurve) const
|
||||
{
|
||||
for(RimSummaryCurve* rimCurve: m_curves)
|
||||
for(RimSummaryCurve* curve : m_summaryCurves)
|
||||
{
|
||||
if(rimCurve->qwtPlotCurve() == qwtCurve)
|
||||
if(curve->qwtPlotCurve() == qwtCurve)
|
||||
{
|
||||
return rimCurve;
|
||||
return curve;
|
||||
}
|
||||
}
|
||||
|
||||
for (RimGridTimeHistoryCurve* curve : m_gridTimeHistoryCurves)
|
||||
{
|
||||
if (curve->qwtPlotCurve() == qwtCurve)
|
||||
{
|
||||
return curve;
|
||||
}
|
||||
}
|
||||
|
||||
@ -799,5 +877,5 @@ RimSummaryCurve* RimSummaryPlot::findRimCurveFromQwtCurve(const QwtPlotCurve* qw
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
size_t RimSummaryPlot::curveCount() const
|
||||
{
|
||||
return m_curves.size();
|
||||
return m_summaryCurves.size() + m_gridTimeHistoryCurves.size();
|
||||
}
|
||||
|
@ -30,13 +30,12 @@
|
||||
|
||||
#include <QPointer>
|
||||
|
||||
#include <memory>
|
||||
|
||||
class RiuSummaryQwtPlot;
|
||||
class RimSummaryCurve;
|
||||
class RimSummaryCurveFilter;
|
||||
class RimSummaryYAxisProperties;
|
||||
class RimSummaryTimeAxisProperties;
|
||||
class RimGridTimeHistoryCurve;
|
||||
class PdmUiTreeOrdering;
|
||||
|
||||
class QwtPlotCurve;
|
||||
@ -60,7 +59,9 @@ public:
|
||||
void addCurve(RimSummaryCurve* curve);
|
||||
void addCurveFilter(RimSummaryCurveFilter* curveFilter);
|
||||
|
||||
RimSummaryCurve* findRimCurveFromQwtCurve(const QwtPlotCurve* curve) const;
|
||||
void addGridTimeHistoryCurve(RimGridTimeHistoryCurve* curve);
|
||||
|
||||
caf::PdmObject* findRimCurveFromQwtCurve(const QwtPlotCurve* curve) const;
|
||||
size_t curveCount() const;
|
||||
|
||||
void loadDataAndUpdate();
|
||||
@ -75,7 +76,7 @@ public:
|
||||
const QwtInterval& timeAxis);
|
||||
|
||||
void updateZoomInQwt();
|
||||
void updateZoomFromQwt();
|
||||
void updateZoomWindowFromQwt();
|
||||
void disableAutoZoom();
|
||||
|
||||
bool isLogarithmicScaleEnabled(RimDefines::PlotAxis plotAxis) const;
|
||||
@ -98,11 +99,14 @@ protected:
|
||||
virtual QImage snapshotWindowContent() override;
|
||||
|
||||
private:
|
||||
|
||||
void updateAxis(RimDefines::PlotAxis plotAxis);
|
||||
std::vector<RimSummaryCurve*> curvesForAxis(RimDefines::PlotAxis plotAxis) const;
|
||||
std::vector<RimSummaryCurve*> visibleSummaryCurvesForAxis(RimDefines::PlotAxis plotAxis) const;
|
||||
std::vector<RimGridTimeHistoryCurve*> visibleTimeHistoryCurvesForAxis(RimDefines::PlotAxis plotAxis) const;
|
||||
bool hasVisibleCurvesForAxis(RimDefines::PlotAxis plotAxis) const;
|
||||
|
||||
RimSummaryYAxisProperties* yAxisPropertiesForAxis(RimDefines::PlotAxis plotAxis) const;
|
||||
void updateAxis(RimDefines::PlotAxis plotAxis);
|
||||
void updateZoomForAxis(RimDefines::PlotAxis plotAxis);
|
||||
|
||||
void updateTimeAxis();
|
||||
void setZoomIntervalsInQwtPlot();
|
||||
|
||||
@ -113,21 +117,17 @@ private:
|
||||
virtual void deleteViewWidget() override;
|
||||
|
||||
private:
|
||||
caf::PdmField<bool> m_showPlotTitle;
|
||||
caf::PdmField<QString> m_userName;
|
||||
caf::PdmField<bool> m_showPlotTitle;
|
||||
caf::PdmField<QString> m_userName;
|
||||
|
||||
caf::PdmChildArrayField<RimSummaryCurve*> m_curves;
|
||||
caf::PdmChildArrayField<RimSummaryCurveFilter*> m_curveFilters;
|
||||
caf::PdmChildArrayField<RimGridTimeHistoryCurve*> m_gridTimeHistoryCurves;
|
||||
caf::PdmChildArrayField<RimSummaryCurve*> m_summaryCurves;
|
||||
caf::PdmChildArrayField<RimSummaryCurveFilter*> m_curveFilters;
|
||||
|
||||
caf::PdmField<bool> m_isAutoZoom;
|
||||
caf::PdmChildField<RimSummaryYAxisProperties*> m_leftYAxisProperties;
|
||||
caf::PdmChildField<RimSummaryYAxisProperties*> m_rightYAxisProperties;
|
||||
caf::PdmChildField<RimSummaryTimeAxisProperties*> m_timeAxisProperties;
|
||||
caf::PdmField<bool> m_isAutoZoom;
|
||||
caf::PdmChildField<RimSummaryYAxisProperties*> m_leftYAxisProperties;
|
||||
caf::PdmChildField<RimSummaryYAxisProperties*> m_rightYAxisProperties;
|
||||
caf::PdmChildField<RimSummaryTimeAxisProperties*> m_timeAxisProperties;
|
||||
|
||||
QPointer<RiuSummaryQwtPlot> m_qwtPlot;
|
||||
|
||||
// Internal objects managed by unique_ptr
|
||||
std::unique_ptr<RimSummaryYAxisProperties> m_leftYAxisPropertiesObject;
|
||||
std::unique_ptr<RimSummaryYAxisProperties> m_rightYAxisPropertiesObject;
|
||||
std::unique_ptr<RimSummaryTimeAxisProperties> m_timeAxisPropertiesObject;
|
||||
QPointer<RiuSummaryQwtPlot> m_qwtPlot;
|
||||
};
|
||||
|
@ -399,14 +399,12 @@ void RiuSummaryQwtPlot::setDefaults()
|
||||
axisTitleY.setRenderFlags(Qt::AlignRight);
|
||||
setAxisTitle(QwtPlot::yLeft, axisTitleY);
|
||||
|
||||
|
||||
QwtLegend* legend = new QwtLegend(this);
|
||||
// The legend will be deleted in the destructor of the plot or when
|
||||
// another legend is inserted.
|
||||
this->insertLegend(legend, BottomLegend);
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -420,7 +418,6 @@ void RiuSummaryQwtPlot::useDateBasedTimeAxis()
|
||||
setAxisScaleDraw(QwtPlot::xBottom, scaleDraw);
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -490,7 +487,7 @@ void RiuSummaryQwtPlot::selectClosestCurve(const QPoint& pos)
|
||||
|
||||
if(closestCurve && distMin < 20)
|
||||
{
|
||||
RimSummaryCurve* selectedCurve = m_plotDefinition->findRimCurveFromQwtCurve(closestCurve);
|
||||
caf::PdmObject* selectedCurve = m_plotDefinition->findRimCurveFromQwtCurve(closestCurve);
|
||||
if(selectedCurve)
|
||||
{
|
||||
RiaApplication::instance()->getOrCreateAndShowMainPlotWindow()->selectAsCurrentItem(selectedCurve);
|
||||
@ -508,7 +505,7 @@ void RiuSummaryQwtPlot::onZoomedSlot()
|
||||
|
||||
this->setZoomWindow(left, right, time);
|
||||
|
||||
m_plotDefinition->updateZoomFromQwt();
|
||||
m_plotDefinition->updateZoomWindowFromQwt();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user