diff --git a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp index 0226463a36..bdefcbf893 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp @@ -40,6 +40,8 @@ #include "cvfAssert.h" #include "cvfMath.h" +#include // Needed for HUGE_VAL on Linux + namespace caf { // Obsolete stuff @@ -377,6 +379,81 @@ void RimEclipsePropertyFilter::computeResultValueRange() m_upperBound.uiCapability()->setUiName(QString("Max (%1)").arg(max)); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimEclipsePropertyFilter::updateFromCurrentTimeStep() +{ + if (resultDefinition->resultType() != RimDefines::FLOW_DIAGNOSTICS) + { + return; + } + + double threshold = 1e-6; + bool followMin = false; + if (fabs(m_lowerBound - m_minimumResultValue) < threshold || m_minimumResultValue == HUGE_VAL) + { + followMin = true; + } + + bool followMax = false; + if (fabs(m_upperBound - m_maximumResultValue) < threshold || m_maximumResultValue == -HUGE_VAL) + { + followMax = true; + } + + double min = HUGE_VAL; + double max = -HUGE_VAL; + + clearCategories(); + + RimView* view = nullptr; + this->firstAncestorOrThisOfTypeAsserted(view); + + int timeStep = view->currentTimeStep(); + RigFlowDiagResultAddress resAddr = resultDefinition->flowDiagResAddress(); + if (resultDefinition->flowDiagSolution()) + { + RigFlowDiagResults* results = resultDefinition->flowDiagSolution()->flowDiagResults(); + results->minMaxScalarValues(resAddr, timeStep, &min, &max); + + if (resultDefinition->hasCategoryResult()) + { + setCategoryNames(resultDefinition->flowDiagSolution()->tracerNames()); + } + } + + if (min == HUGE_VAL && max == -HUGE_VAL) + { + m_lowerBound.uiCapability()->setUiName(QString("Min (inf)")); + m_upperBound.uiCapability()->setUiName(QString("Max (inf)")); + } + else + { + m_maximumResultValue = max; + m_minimumResultValue = min; + + if (followMin) + { + m_lowerBound = min; + } + + if (followMax) + { + m_upperBound = m_maximumResultValue; + } + + m_lowerBound.uiCapability()->setUiName(QString("Min (%1)").arg(min)); + m_upperBound.uiCapability()->setUiName(QString("Max (%1)").arg(max)); + } + + m_lowerBound.uiCapability()->updateConnectedEditors(); + m_upperBound.uiCapability()->updateConnectedEditors(); + + updateFilterName(); + this->name.uiCapability()->updateConnectedEditors(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.h b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.h index 4878608612..30bec0c122 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.h +++ b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.h @@ -53,6 +53,7 @@ public: void setToDefaultValues(); void updateFilterName(); void computeResultValueRange(); + void updateFromCurrentTimeStep(); virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue); virtual void initAfterRead(); diff --git a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilterCollection.cpp b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilterCollection.cpp index 5f124bd5d7..40d65b47d7 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilterCollection.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilterCollection.cpp @@ -167,3 +167,14 @@ void RimEclipsePropertyFilterCollection::updateIconState() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimEclipsePropertyFilterCollection::updateFromCurrentTimeStep() +{ + for (RimEclipsePropertyFilter* cellFilter : propertyFilters()) + { + cellFilter->updateFromCurrentTimeStep(); + } +} + diff --git a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilterCollection.h b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilterCollection.h index 9e843b53ee..7abdeb7490 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilterCollection.h +++ b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilterCollection.h @@ -51,6 +51,7 @@ public: void loadAndInitializePropertyFilters(); void updateIconState(); + void updateFromCurrentTimeStep(); protected: // Overridden methods diff --git a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp index 1344d22156..60cf0a46d7 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp @@ -473,6 +473,8 @@ void RimEclipseView::createDisplayModel() //-------------------------------------------------------------------------------------------------- void RimEclipseView::updateCurrentTimeStep() { + m_propertyFilterCollection()->updateFromCurrentTimeStep(); + updateLegends(); // To make sure the scalar mappers are set up correctly std::vector geometriesToRecolor;