#3901 Summary Stepping : Improve source case stepping

This commit is contained in:
Magne Sjaastad 2018-12-18 21:22:25 +01:00
parent 07f8221676
commit a442ddff04
3 changed files with 51 additions and 14 deletions

View File

@ -196,7 +196,7 @@ std::vector<RimSummaryCurve*> RimSummaryCurveCollection::curves() const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
std::vector<RimSummaryCurve*> RimSummaryCurveCollection::curvesForSourceStepping() const std::vector<RimSummaryCurve*> RimSummaryCurveCollection::curvesForSourceStepping(RimSummaryPlotSourceStepping::SourceSteppingType steppingType) const
{ {
std::vector<RimSummaryCurve*> stepCurves; std::vector<RimSummaryCurve*> stepCurves;
@ -209,7 +209,16 @@ std::vector<RimSummaryCurve*> RimSummaryCurveCollection::curvesForSourceStepping
const std::string historyIdentifier = "H"; const std::string historyIdentifier = "H";
std::string quantity = m_curveForSourceStepping->summaryAddressY().quantityName(); std::string quantity;
if (steppingType == RimSummaryPlotSourceStepping::X_AXIS)
{
quantity = m_curveForSourceStepping->summaryAddressX().quantityName();
}
else if (steppingType == RimSummaryPlotSourceStepping::Y_AXIS)
{
quantity = m_curveForSourceStepping->summaryAddressY().quantityName();
}
std::string candidateName; std::string candidateName;
if (RiaStdStringTools::endsWith(quantity, historyIdentifier)) if (RiaStdStringTools::endsWith(quantity, historyIdentifier))
@ -223,9 +232,21 @@ std::vector<RimSummaryCurve*> RimSummaryCurveCollection::curvesForSourceStepping
for (const auto& c : curves()) for (const auto& c : curves())
{ {
if (c->summaryAddressY().quantityName() == candidateName) if (steppingType == RimSummaryPlotSourceStepping::X_AXIS)
{ {
stepCurves.push_back(c); if (c->summaryCaseX() == m_curveForSourceStepping->summaryCaseX() &&
c->summaryAddressX().quantityName() == candidateName)
{
stepCurves.push_back(c);
}
}
else if (steppingType == RimSummaryPlotSourceStepping::Y_AXIS)
{
if (c->summaryCaseY() == m_curveForSourceStepping->summaryCaseY() &&
c->summaryAddressY().quantityName() == candidateName)
{
stepCurves.push_back(c);
}
} }
} }
} }

View File

@ -19,6 +19,8 @@
#pragma once #pragma once
#include "RimSummaryPlotSourceStepping.h"
#include "cafPdmChildArrayField.h" #include "cafPdmChildArrayField.h"
#include "cafPdmChildField.h" #include "cafPdmChildField.h"
#include "cafPdmField.h" #include "cafPdmField.h"
@ -29,7 +31,6 @@ class QwtPlot;
class QwtPlotCurve; class QwtPlotCurve;
class RimSummaryCase; class RimSummaryCase;
class RimSummaryCurve; class RimSummaryCurve;
class RimSummaryPlotSourceStepping;
class QKeyEvent; class QKeyEvent;
//================================================================================================== //==================================================================================================
@ -56,7 +57,7 @@ public:
void deleteCurve(RimSummaryCurve* curve); void deleteCurve(RimSummaryCurve* curve);
std::vector<RimSummaryCurve*> curves() const; std::vector<RimSummaryCurve*> curves() const;
std::vector<RimSummaryCurve*> curvesForSourceStepping() const; std::vector<RimSummaryCurve*> curvesForSourceStepping(RimSummaryPlotSourceStepping::SourceSteppingType steppingType) const;
void deleteCurvesAssosiatedWithCase(RimSummaryCase* summaryCase); void deleteCurvesAssosiatedWithCase(RimSummaryCase* summaryCase);
void deleteAllCurves(); void deleteAllCurves();

View File

@ -368,18 +368,27 @@ void RimSummaryPlotSourceStepping::fieldChangedByUi(const caf::PdmFieldHandle* c
{ {
if (m_summaryCase()) if (m_summaryCase())
{ {
caf::PdmPointer<caf::PdmObjectHandle> variantHandle = oldValue.value<caf::PdmPointer<caf::PdmObjectHandle>>();
RimSummaryCase* previousCase = dynamic_cast<RimSummaryCase*>(variantHandle.p());
for (auto curve : curves) for (auto curve : curves)
{ {
if (isYAxisStepping()) if (isYAxisStepping())
{ {
bool doSetAppearance = curve->summaryCaseY()->isObservedData() != m_summaryCase->isObservedData(); if (previousCase == curve->summaryCaseY())
curve->setSummaryCaseY(m_summaryCase); {
if (doSetAppearance) curve->forceUpdateCurveAppearanceFromCaseType(); bool doSetAppearance = curve->summaryCaseY()->isObservedData() != m_summaryCase->isObservedData();
curve->setSummaryCaseY(m_summaryCase);
if (doSetAppearance) curve->forceUpdateCurveAppearanceFromCaseType();
}
} }
if (isXAxisStepping()) if (isXAxisStepping())
{ {
curve->setSummaryCaseX(m_summaryCase); if (previousCase == curve->summaryCaseX())
{
curve->setSummaryCaseX(m_summaryCase);
}
} }
} }
@ -395,9 +404,15 @@ void RimSummaryPlotSourceStepping::fieldChangedByUi(const caf::PdmFieldHandle* c
{ {
if (m_ensemble() && ensembleCurveColl) if (m_ensemble() && ensembleCurveColl)
{ {
for (auto curve : ensembleCurveColl->curveSets()) caf::PdmPointer<caf::PdmObjectHandle> variantHandle = oldValue.value<caf::PdmPointer<caf::PdmObjectHandle>>();
RimSummaryCaseCollection* previousCollection = dynamic_cast<RimSummaryCaseCollection*>(variantHandle.p());
for (auto curveSet : ensembleCurveColl->curveSets())
{ {
curve->setSummaryCaseCollection(m_ensemble); if (curveSet->summaryCaseCollection() == previousCollection)
{
curveSet->setSummaryCaseCollection(m_ensemble);
}
} }
triggerLoadDataAndUpdate = true; triggerLoadDataAndUpdate = true;
@ -674,7 +689,7 @@ std::set<RifEclipseSummaryAddress> RimSummaryPlotSourceStepping::addressesCurveC
if (curveCollection) if (curveCollection)
{ {
auto curves = curveCollection->curvesForSourceStepping(); auto curves = curveCollection->curvesForSourceStepping(m_sourceSteppingType);
for (auto c : curves) for (auto c : curves)
{ {
if (isYAxisStepping()) if (isYAxisStepping())
@ -715,7 +730,7 @@ std::set<RimSummaryCase*> RimSummaryPlotSourceStepping::summaryCasesCurveCollect
if (!curveCollection) return sumCases; if (!curveCollection) return sumCases;
auto curves = curveCollection->curves(); auto curves = curveCollection->curvesForSourceStepping(m_sourceSteppingType);
for (auto c : curves) for (auto c : curves)
{ {
if (isYAxisStepping()) if (isYAxisStepping())