diff --git a/ApplicationCode/Application/Tools/RiaSummaryCurveAnalyzer.cpp b/ApplicationCode/Application/Tools/RiaSummaryCurveAnalyzer.cpp index 24ee187376..554ca64293 100644 --- a/ApplicationCode/Application/Tools/RiaSummaryCurveAnalyzer.cpp +++ b/ApplicationCode/Application/Tools/RiaSummaryCurveAnalyzer.cpp @@ -32,25 +32,6 @@ //-------------------------------------------------------------------------------------------------- RiaSummaryCurveAnalyzer::RiaSummaryCurveAnalyzer() {} -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RiaSummaryCurveAnalyzer::analyzeCurves(const RimSummaryCurveCollection* sumCurveCollection) -{ - clearAllSets(); - - if (!sumCurveCollection) - return; - - for (auto curve : sumCurveCollection->curves()) - { - m_summaryCases.insert(curve->summaryCaseY()); - - auto adr = curve->summaryAddressY(); - analyzeAddress(adr); - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -65,7 +46,7 @@ void RiaSummaryCurveAnalyzer::analyzeAdresses(const std::vector& allAddresses) { @@ -112,14 +93,6 @@ std::set RiaSummaryCurveAnalyzer::regionNumbers() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -std::set RiaSummaryCurveAnalyzer::summaryCases() const -{ - return m_summaryCases; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- std::set RiaSummaryCurveAnalyzer::categories() const { return m_categories; @@ -158,9 +131,11 @@ std::set RiaSummaryCurveAnalyzer::identifierTexts(RifEclipseSummaryAddr } //-------------------------------------------------------------------------------------------------- -/// +/// //-------------------------------------------------------------------------------------------------- -std::vector RiaSummaryCurveAnalyzer::addressesForCategory(const std::vector& addresses, RifEclipseSummaryAddress::SummaryVarCategory category) +std::vector + RiaSummaryCurveAnalyzer::addressesForCategory(const std::vector& addresses, + RifEclipseSummaryAddress::SummaryVarCategory category) { std::vector filteredAddresses; @@ -184,7 +159,6 @@ void RiaSummaryCurveAnalyzer::clearAllSets() m_wellNames.clear(); m_wellGroupNames.clear(); m_regionNumbers.clear(); - m_summaryCases.clear(); m_categories.clear(); } diff --git a/ApplicationCode/Application/Tools/RiaSummaryCurveAnalyzer.h b/ApplicationCode/Application/Tools/RiaSummaryCurveAnalyzer.h index 494b191c60..0836ea0eff 100644 --- a/ApplicationCode/Application/Tools/RiaSummaryCurveAnalyzer.h +++ b/ApplicationCode/Application/Tools/RiaSummaryCurveAnalyzer.h @@ -25,7 +25,6 @@ #include class RimSummaryCurveCollection; -class RimSummaryCase; class QString; @@ -37,7 +36,6 @@ class RiaSummaryCurveAnalyzer public: RiaSummaryCurveAnalyzer(); - void analyzeCurves(const RimSummaryCurveCollection* sumCurveCollection); void analyzeAdresses(const std::vector& allAddresses); void analyzeAdresses(const std::set& allAddresses); @@ -46,7 +44,6 @@ public: std::set wellGroupNames() const; std::set regionNumbers() const; - std::set summaryCases() const; std::set categories() const; std::set identifierTexts(RifEclipseSummaryAddress::SummaryVarCategory category) const; @@ -63,7 +60,6 @@ private: std::set m_wellNames; std::set m_wellGroupNames; std::set m_regionNumbers; - std::set m_summaryCases; std::set m_categories; }; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp index 5815f0812e..cf076ca72e 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp @@ -281,7 +281,16 @@ QString RimSummaryCurveCollection::compileAutoPlotTitle() const { RiaSummaryCurveAnalyzer analyzer; - analyzer.analyzeCurves(this); + std::set addresses; + for (auto c : m_curves) + { + addresses.insert(c->summaryAddressY()); + + // TODO : Improve how cross plot curves contribute to title + // Suggestion : Delegate to RimSummaryPlotSourceStepping to find title + } + + analyzer.analyzeAdresses(addresses); auto quantities = analyzer.quantities(); auto wellNames = analyzer.wellNames(); diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp index 027fa8a3e4..0f8dbf69d3 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.cpp @@ -169,10 +169,8 @@ std::vector RimSummaryPlotSourceStepping::fieldsToShowInTo { std::vector fields; - RiaSummaryCurveAnalyzer analyzer; - analyzer.analyzeAdresses(allAddressesUsedInCurveCollection()); - - if (analyzer.summaryCases().size() == 1) + auto sumCases = allSummaryCasesUsedInCurveCollection(); + if (sumCases.size() == 1) { RimProject* proj = RiaApplication::instance()->project(); if (proj->allSummaryCases().size() > 1) @@ -181,6 +179,9 @@ std::vector RimSummaryPlotSourceStepping::fieldsToShowInTo } } + RiaSummaryCurveAnalyzer analyzer; + analyzer.analyzeAdresses(allAddressesUsedInCurveCollection()); + if (analyzer.wellNames().size() == 1) { fields.push_back(&m_wellName); @@ -237,22 +238,19 @@ QList RimSummaryPlotSourceStepping::calculateValueOption RifSummaryReaderInterface* reader = summaryReader(); if (reader) { - const std::vector allAddresses = reader->allResultAddresses(); - - RiaSummaryCurveAnalyzer analyzer; - analyzer.analyzeAdresses(allAddresses); + RiaSummaryCurveAnalyzer* analyzer = analyzerForReader(reader); if (fieldNeedingOptions == &m_wellName) { - identifierTexts = analyzer.identifierTexts(RifEclipseSummaryAddress::SUMMARY_WELL); + identifierTexts = analyzer->identifierTexts(RifEclipseSummaryAddress::SUMMARY_WELL); } else if (fieldNeedingOptions == &m_region) { - identifierTexts = analyzer.identifierTexts(RifEclipseSummaryAddress::SUMMARY_REGION); + identifierTexts = analyzer->identifierTexts(RifEclipseSummaryAddress::SUMMARY_REGION); } else if (fieldNeedingOptions == &m_wellGroupName) { - identifierTexts = analyzer.identifierTexts(RifEclipseSummaryAddress::SUMMARY_WELL_GROUP); + identifierTexts = analyzer->identifierTexts(RifEclipseSummaryAddress::SUMMARY_WELL_GROUP); } else if (fieldNeedingOptions == &m_quantity) { @@ -268,7 +266,7 @@ QList RimSummaryPlotSourceStepping::calculateValueOption RiaSummaryCurveAnalyzer quantityAnalyzer; - auto subset = RiaSummaryCurveAnalyzer::addressesForCategory(allAddresses, category); + auto subset = RiaSummaryCurveAnalyzer::addressesForCategory(reader->allResultAddresses(), category); quantityAnalyzer.analyzeAdresses(subset); for (const auto& quantity : quantityAnalyzer.quantities()) @@ -502,16 +500,9 @@ void RimSummaryPlotSourceStepping::updateUiFromCurves() m_region.uiCapability()->setUiHidden(true); m_quantity.uiCapability()->setUiHidden(true); - RimSummaryCurveCollection* curveCollection = nullptr; - this->firstAncestorOrThisOfTypeAsserted(curveCollection); - - RiaSummaryCurveAnalyzer analyzer; - analyzer.analyzeAdresses(allAddressesUsedInCurveCollection()); - - if (analyzer.summaryCases().size() == 1) + auto sumCases = allSummaryCasesUsedInCurveCollection(); + if (sumCases.size() == 1) { - std::set sumCases = analyzer.summaryCases(); - if (sumCases.find(m_summaryCase) == sumCases.end()) { m_summaryCase = *(sumCases.begin()); @@ -524,6 +515,9 @@ void RimSummaryPlotSourceStepping::updateUiFromCurves() } } + RiaSummaryCurveAnalyzer analyzer; + analyzer.analyzeAdresses(allAddressesUsedInCurveCollection()); + RifEclipseSummaryAddress::SummaryVarCategory category = RifEclipseSummaryAddress::SUMMARY_INVALID; { if (analyzer.categories().size() == 1) @@ -593,7 +587,8 @@ caf::PdmFieldHandle* RimSummaryPlotSourceStepping::fieldToModify() // A pointer field is no a value field, so this must be improved // to be able to step between summary cases - if (analyzer.summaryCases().size() == 1) + auto sumCases = allSummaryCasesUsedInCurveCollection(); + if (sumCases.size() == 1) { RimProject* proj = RiaApplication::instance()->project(); if (proj->allSummaryCases().size() > 1) @@ -616,7 +611,7 @@ caf::PdmValueField* RimSummaryPlotSourceStepping::valueFieldToModify() } //-------------------------------------------------------------------------------------------------- -/// +/// //-------------------------------------------------------------------------------------------------- std::set RimSummaryPlotSourceStepping::allAddressesUsedInCurveCollection() const { @@ -642,6 +637,33 @@ std::set RimSummaryPlotSourceStepping::allAddressesUse return addresses; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::set RimSummaryPlotSourceStepping::allSummaryCasesUsedInCurveCollection() const +{ + std::set sumCases; + + RimSummaryCurveCollection* curveCollection = nullptr; + this->firstAncestorOrThisOfTypeAsserted(curveCollection); + + auto curves = curveCollection->curves(); + for (auto c : curves) + { + if (isYAxisStepping()) + { + sumCases.insert(c->summaryCaseY()); + } + + if (isXAxisStepping()) + { + sumCases.insert(c->summaryCaseX()); + } + } + + return sumCases; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -670,6 +692,25 @@ bool RimSummaryPlotSourceStepping::isYAxisStepping() const return false; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiaSummaryCurveAnalyzer* RimSummaryPlotSourceStepping::analyzerForReader(RifSummaryReaderInterface* reader) +{ + if (!reader) + return nullptr; + + if (m_curveAnalyzerForReader.first != reader) + { + RiaSummaryCurveAnalyzer analyzer; + m_curveAnalyzerForReader = std::make_pair(reader, analyzer); + } + + m_curveAnalyzerForReader.second.analyzeAdresses(reader->allResultAddresses()); + + return &m_curveAnalyzerForReader.second; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h index f2fab6f7bd..fa83705f3f 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotSourceStepping.h @@ -18,6 +18,7 @@ #pragma once +#include "RiaSummaryCurveAnalyzer.h" #include "RifEclipseSummaryAddress.h" #include "cafPdmField.h" @@ -77,10 +78,13 @@ private: caf::PdmValueField* valueFieldToModify(); std::set allAddressesUsedInCurveCollection() const; + std::set allSummaryCasesUsedInCurveCollection() const; bool isXAxisStepping() const; bool isYAxisStepping() const; + RiaSummaryCurveAnalyzer* analyzerForReader(RifSummaryReaderInterface* reader); + private: caf::PdmPtrField m_summaryCase; caf::PdmField m_wellName; @@ -88,4 +92,6 @@ private: caf::PdmField m_region; caf::PdmField m_quantity; SourceSteppingType m_sourceSteppingType; + + std::pair m_curveAnalyzerForReader; };