#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:
Magne Sjaastad 2017-03-19 08:45:29 +01:00
parent 388fa2b70e
commit ad90d3f38f
5 changed files with 251 additions and 184 deletions

View File

@ -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;

View File

@ -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;
};

View File

@ -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();
}

View File

@ -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;
};

View File

@ -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();
}
//--------------------------------------------------------------------------------------------------