#2658 Ensemble curves. Warning when too many ensemble curves

This commit is contained in:
Bjørn Erik Jensen
2018-05-14 14:51:52 +02:00
parent 956d221c48
commit 7c0017923c
4 changed files with 63 additions and 6 deletions

View File

@@ -21,6 +21,15 @@
#include "RifSummaryReaderInterface.h"
#include "RimSummaryCase.h"
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiaSummaryCurveDefinition::RiaSummaryCurveDefinition()
{
m_curveDefinition = std::make_pair(nullptr, RifEclipseSummaryAddress());
m_ensemble = nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -64,6 +73,14 @@ bool RiaSummaryCurveDefinition::isEnsembleCurve() const
return m_ensemble != nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiaSummaryCurveDefinition::isValid() const
{
return m_curveDefinition.first != nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -34,6 +34,7 @@ class RimSummaryCaseCollection;
class RiaSummaryCurveDefinition
{
public:
RiaSummaryCurveDefinition();
explicit RiaSummaryCurveDefinition(RimSummaryCase* summaryCase,
const RifEclipseSummaryAddress& summaryAddress,
RimSummaryCaseCollection* emsemble = nullptr);
@@ -43,6 +44,8 @@ public:
RimSummaryCaseCollection* ensemble() const;
bool isEnsembleCurve() const;
bool isValid() const;
bool operator < (const RiaSummaryCurveDefinition& other) const;
// TODO: Consider moving to a separate tools class

View File

@@ -54,6 +54,7 @@
#include "cafPdmUiPushButtonEditor.h"
#include <QInputDialog>
#include <QMessageBox>
#include <algorithm>
#include <sstream>
@@ -65,6 +66,11 @@ CAF_PDM_SOURCE_INIT(RicSummaryCurveCreator, "RicSummaryCurveCreator");
//--------------------------------------------------------------------------------------------------
const QString RicSummaryCurveCreator::CONFIGURATION_NAME = "CurveCreatorCfg";
//--------------------------------------------------------------------------------------------------
/// Internal functions
//--------------------------------------------------------------------------------------------------
int ensembleCurveCount(const std::set<RiaSummaryCurveDefinition>& allCurveDefs);
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -367,10 +373,14 @@ void RicSummaryCurveCreator::syncPreviewCurvesFromUiSelection()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicSummaryCurveCreator::updatePreviewCurvesFromCurveDefinitions(const std::set<RiaSummaryCurveDefinition>& allCurveDefsToDisplay,
const std::set<RiaSummaryCurveDefinition>& curveDefsToAdd,
const std::set<RimSummaryCurve*>& curvesToDelete)
void RicSummaryCurveCreator::updatePreviewCurvesFromCurveDefinitions(
const std::set<RiaSummaryCurveDefinition>& allCurveDefsToDisplay,
const std::set<RiaSummaryCurveDefinition>& curveDefsToAdd,
const std::set<RimSummaryCurve*>& curvesToDelete)
{
const size_t ENSEMBLE_CURVE_COUNT_THRESHOLD = 200;
static bool warningDisplayed = false;
RimSummaryCase* prevCase = nullptr;
std::set<RiaSummaryCurveDefinition> summaryCurveDefsToDisplay;
@@ -380,7 +390,8 @@ void RicSummaryCurveCreator::updatePreviewCurvesFromCurveDefinitions(const std::
if (!def.isEnsembleCurve()) summaryCurveDefsToDisplay.insert(def);
}
RimSummaryCurveAppearanceCalculator curveLookCalc(summaryCurveDefsToDisplay, getAllSummaryCaseNames(), getAllSummaryWellNames());
RimSummaryCurveAppearanceCalculator curveLookCalc(
summaryCurveDefsToDisplay, getAllSummaryCaseNames(), getAllSummaryWellNames());
initCurveAppearanceCalculator(curveLookCalc);
// Delete curves
@@ -389,6 +400,8 @@ void RicSummaryCurveCreator::updatePreviewCurvesFromCurveDefinitions(const std::
m_previewPlot->deleteCurve(curve);
}
size_t ensembleCurveCnt = ensembleCurveCount(allCurveDefsToDisplay);
// Add new curves
for (const auto& curveDef : curveDefsToAdd)
{
@@ -420,6 +433,22 @@ void RicSummaryCurveCreator::updatePreviewCurvesFromCurveDefinitions(const std::
// Set single curve set color
size_t colorIndex = m_previewPlot->ensembleCurveSetCollection()->curveSetCount();
curveSet->setColor(RiaColorTables::summaryCurveDefaultPaletteColors().cycledColor3f(colorIndex));
if (m_previewPlot->ensembleCurveSetCollection()->curveSets().size() > 1 && ensembleCurveCnt > ENSEMBLE_CURVE_COUNT_THRESHOLD)
{
// Toggle off new curve set and display warning
curveSet->showCurves(false);
if (!warningDisplayed)
{
QMessageBox mbox;
mbox.setIcon(QMessageBox::Icon::Warning);
mbox.setInformativeText(
"The new curve set is hidden. Too many visible curve sets may lead to poor performance");
mbox.exec();
warningDisplayed = true;
}
}
}
curveSet->addCurve(curve);
}
@@ -911,3 +940,12 @@ void RicSummaryCurveCreator::setInitialCurveVisibility(const RimSummaryPlot* tar
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
int ensembleCurveCount(const std::set<RiaSummaryCurveDefinition>& allCurveDefs)
{
return std::count_if(
allCurveDefs.begin(), allCurveDefs.end(), [](const RiaSummaryCurveDefinition& def) { return def.isEnsembleCurve(); });
}

View File

@@ -34,7 +34,6 @@
#include <memory>
#define OBSERVED_DATA_AVALUE_POSTFIX "_OBSDATA"
class RimSummaryCase;
@@ -107,7 +106,7 @@ private:
void proxyEnablePlotAutoTitle(const bool& enable);
bool proxyPlotAutoTitle() const;
void setInitialCurveVisibility(const RimSummaryPlot* targetPlot);
private:
caf::PdmPtrField<RimSummaryPlot*> m_targetPlot;