#782 Avoid creating curves for none existing data.

This commit is contained in:
Jacob Støren 2016-06-21 15:56:09 +02:00
parent 833de65df6
commit 5c09935ac5
3 changed files with 54 additions and 17 deletions

View File

@ -230,16 +230,7 @@ RifEclipseSummaryAddress addressFromErtSmSpecNode(const smspec_node_type * ertSu
//--------------------------------------------------------------------------------------------------
const std::vector<RifEclipseSummaryAddress>& RifReaderEclipseSummary::allResultAddresses()
{
if (m_allResultAddresses.size() == 0)
{
int varCount = ecl_smspec_num_nodes( eclSmSpec);
for(int i = 0; i < varCount; i++)
{
const smspec_node_type * ertSumVarNode = ecl_smspec_iget_node(eclSmSpec, i);
m_allResultAddresses.push_back(addressFromErtSmSpecNode(ertSumVarNode));
}
}
buildMetaData();
return m_allResultAddresses;
}
@ -318,17 +309,47 @@ std::vector<QDateTime> RifReaderEclipseSummary::fromTimeT(const std::vector<time
//--------------------------------------------------------------------------------------------------
int RifReaderEclipseSummary::indexFromAddress(const RifEclipseSummaryAddress& resultAddress)
{
// For now, a slow linear search
int resIndex = -1;
int addrCount = static_cast<int>(this->allResultAddresses().size());
for (int idx = 0; idx < addrCount; ++idx)
{
if (m_allResultAddresses[idx] == resultAddress) return idx;
}
this->buildMetaData();
auto it = m_resultAddressToErtNodeIdx.find(resultAddress);
if (it != m_resultAddressToErtNodeIdx.end())
{
return it->second;
}
return -1;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifReaderEclipseSummary::buildMetaData()
{
if(m_allResultAddresses.size() == 0)
{
int varCount = ecl_smspec_num_nodes(eclSmSpec);
for(int i = 0; i < varCount; i++)
{
const smspec_node_type * ertSumVarNode = ecl_smspec_iget_node(eclSmSpec, i);
RifEclipseSummaryAddress addr = addressFromErtSmSpecNode(ertSumVarNode);
m_allResultAddresses.push_back(addr);
m_resultAddressToErtNodeIdx[addr] = i;
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RifReaderEclipseSummary::hasAddress(const RifEclipseSummaryAddress& resultAddress)
{
this->buildMetaData();
auto it = m_resultAddressToErtNodeIdx.find(resultAddress);
return (it != m_resultAddressToErtNodeIdx.end());
}
#if 0
//--------------------------------------------------------------------------------------------------
///

View File

@ -22,6 +22,7 @@
#include <string>
#include <vector>
#include <map>
#include "cvfObject.h"
@ -42,6 +43,7 @@ public:
bool open(const std::string& headerFileName, const std::vector<std::string>& dataFileNames);
void close();
bool hasAddress(const RifEclipseSummaryAddress& resultAddress);
const std::vector<RifEclipseSummaryAddress>& allResultAddresses();
std::vector<time_t> timeSteps() const;
@ -55,6 +57,7 @@ private:
int timeStepCount() const;
int indexFromAddress(const RifEclipseSummaryAddress& resultAddress);
void buildMetaData();
private:
// Taken from ecl_sum.h
typedef struct ecl_sum_struct ecl_sum_type;
@ -64,5 +67,7 @@ private:
const ecl_smspec_type * eclSmSpec;
std::vector<RifEclipseSummaryAddress> m_allResultAddresses;
std::map<RifEclipseSummaryAddress, int> m_resultAddressToErtNodeIdx;
};

View File

@ -242,12 +242,19 @@ void RimSummaryCurveFilter::syncCurvesFromUiSelection()
for (RimSummaryCase* currentCase: m_selectedSummaryCases)
{
if (!currentCase || !currentCase->caseData() || !currentCase->caseData()->summaryReader()) continue;
RifReaderEclipseSummary* reader = currentCase->caseData()->summaryReader();
for(const RifEclipseSummaryAddress& addr: m_uiFilterResultMultiSelection.v())
{
if(!reader->hasAddress(addr)) continue;
newCurveDefinitions.insert(std::make_pair(currentCase, addr));
}
}
#if 0
// Delete all existing curves that is not matching
// Remove the entries in the search set that we already have
for(RimSummaryCurve* curve: m_curves)
@ -263,6 +270,10 @@ void RimSummaryCurveFilter::syncCurvesFromUiSelection()
}
}
m_curves.removeChildObject(nullptr);
#else
m_curves.deleteAllChildObjects();
#endif
// Create all new curves that is missing