From 4a66feae264b8d02f5e7392606a2a25837c1d0a4 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Sun, 12 Mar 2017 13:14:03 +0100 Subject: [PATCH 01/13] #1288 Use view icon instead of case icon when selecting view --- ApplicationCode/Commands/FlowCommands/RicSelectViewUI.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ApplicationCode/Commands/FlowCommands/RicSelectViewUI.cpp b/ApplicationCode/Commands/FlowCommands/RicSelectViewUI.cpp index 9598a195e9..158439567a 100644 --- a/ApplicationCode/Commands/FlowCommands/RicSelectViewUI.cpp +++ b/ApplicationCode/Commands/FlowCommands/RicSelectViewUI.cpp @@ -92,13 +92,12 @@ QList RicSelectViewUI::calculateValueOptions(const caf:: if (fieldNeedingOptions == &m_selectedView) { - QIcon icon; if (m_currentCase) { - icon = m_currentCase->uiCapability()->uiIcon(); for (RimView* v : m_currentCase->views()) { - QString displayName = m_currentCase->caseUserDescription() + ": " + v->name; + QIcon icon = v->uiCapability()->uiIcon(); + QString displayName = v->name; options.push_back(caf::PdmOptionItemInfo(displayName, v, false, icon)); } From 866350756c56b82d6773b7d99a4b1081a7b1bf35 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 13 Mar 2017 06:59:42 +0100 Subject: [PATCH 02/13] #1260 Fixed typo in AppFwk --- .../cafCommand/defaultfeatures/cafCmdAddItemFeature.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Fwk/AppFwk/cafCommand/defaultfeatures/cafCmdAddItemFeature.cpp b/Fwk/AppFwk/cafCommand/defaultfeatures/cafCmdAddItemFeature.cpp index e60bc9f1d0..031209f85e 100644 --- a/Fwk/AppFwk/cafCommand/defaultfeatures/cafCmdAddItemFeature.cpp +++ b/Fwk/AppFwk/cafCommand/defaultfeatures/cafCmdAddItemFeature.cpp @@ -48,7 +48,7 @@ #include "cafPdmChildArrayField.h" #include "cafPdmField.h" -#include "cvfAssert.h" +#include "cafAssert.h" #include @@ -109,7 +109,7 @@ void CmdAddItemFeature::onActionTriggered(bool isChecked) } else { - CVF_ASSERT(0); + CAF_ASSERT(0); } } } From f5c03e7518130ff6818747dcd5c38232f6bb3018 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 13 Mar 2017 07:39:36 +0100 Subject: [PATCH 03/13] AppFwk : Added field used to test multi selection --- Fwk/AppFwk/cafTests/cafTestApplication/MainWindow.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Fwk/AppFwk/cafTests/cafTestApplication/MainWindow.cpp b/Fwk/AppFwk/cafTests/cafTestApplication/MainWindow.cpp index 35a053a93a..8c38ff6ea9 100644 --- a/Fwk/AppFwk/cafTests/cafTestApplication/MainWindow.cpp +++ b/Fwk/AppFwk/cafTests/cafTestApplication/MainWindow.cpp @@ -69,6 +69,10 @@ public: m_proxyDoubleField = 0; if (!(m_proxyDoubleField == 3)) { std::cout << "Double is not 3 " << std::endl; } + CAF_PDM_InitFieldNoDefault(&m_multiSelectList, "SelectedItems", " ", "", "", ""); + m_multiSelectList.xmlCapability()->setIOReadable(false); + m_multiSelectList.xmlCapability()->setIOWritable(false); + m_multiSelectList.uiCapability()->setUiEditorTypeName(caf::PdmUiListEditor::uiEditorTypeName()); } @@ -77,6 +81,9 @@ public: caf::PdmField m_textField; caf::PdmProxyValueField m_proxyDoubleField; + caf::PdmField > m_multiSelectList; + + caf::PdmField m_toggleField; virtual caf::PdmFieldHandle* objectToggleField() { From 5e79ed594a448585c4acd9d8d593e625fde7dc4e Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 14 Mar 2017 09:24:51 +0100 Subject: [PATCH 04/13] #1285 Use "Accumulated" and "Inflow Rates" --- .../ProjectDataModel/Flow/RimWellAllocationPlot.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/Flow/RimWellAllocationPlot.cpp b/ApplicationCode/ProjectDataModel/Flow/RimWellAllocationPlot.cpp index 5ffbd7a29d..49f5153e46 100644 --- a/ApplicationCode/ProjectDataModel/Flow/RimWellAllocationPlot.cpp +++ b/ApplicationCode/ProjectDataModel/Flow/RimWellAllocationPlot.cpp @@ -58,8 +58,8 @@ namespace caf template<> void AppEnum::setUp() { - addItem(RimWellAllocationPlot::ACCUMULATED, "ACCUMULATED", "Well Flow"); - addItem(RimWellAllocationPlot::INFLOW, "INFLOW", "In Flow"); + addItem(RimWellAllocationPlot::ACCUMULATED, "ACCUMULATED", "Accumulated"); + addItem(RimWellAllocationPlot::INFLOW, "INFLOW", "Inflow Rates"); setDefault(RimWellAllocationPlot::ACCUMULATED); } From 2b7927e5a6e5827eeec3a8546eb0ca95406ef957 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 14 Mar 2017 09:33:58 +0100 Subject: [PATCH 05/13] #1286 Rename --- .../ProjectDataModel/Flow/RimWellFlowRateCurve.cpp | 5 +++-- ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.cpp b/ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.cpp index ebe49f5658..5d5be954f7 100644 --- a/ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.cpp +++ b/ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.cpp @@ -233,10 +233,11 @@ RimWellAllocationPlot* RimWellFlowRateCurve::wellAllocationPlot() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimWellFlowRateCurve::setFlowValuesPrDepthValue(const QString& tracerName, const std::vector& connectionNumbers, const std::vector& flowRates) +void RimWellFlowRateCurve::setFlowValuesPrDepthValue(const QString& tracerName, const std::vector& depthValues, const std::vector& flowRates) { m_curveData = new RigWellLogCurveData; - m_curveData->setValuesAndMD(flowRates, connectionNumbers, RimDefines::UNIT_NONE, false); + + m_curveData->setValuesAndMD(flowRates, depthValues, RimDefines::UNIT_NONE, false); m_tracerName = tracerName; } diff --git a/ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.h b/ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.h index 5523bea6d7..089890dacf 100644 --- a/ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.h +++ b/ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.h @@ -38,7 +38,7 @@ public: RimWellFlowRateCurve(); virtual ~RimWellFlowRateCurve(); - void setFlowValuesPrDepthValue(const QString& tracerName , const std::vector& connectionNumbers, const std::vector& flowRates); + void setFlowValuesPrDepthValue(const QString& tracerName , const std::vector& depthValues, const std::vector& flowRates); void updateStackedPlotData(); virtual QString wellName() const override; From 4498e353dffdeafd730388c3e255ee04fb135a90 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 14 Mar 2017 13:15:00 +0100 Subject: [PATCH 06/13] #1263 ShowWellAllocationPlot must be available when well is selected --- .../RicShowWellAllocationPlotFeature.cpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/ApplicationCode/Commands/FlowCommands/RicShowWellAllocationPlotFeature.cpp b/ApplicationCode/Commands/FlowCommands/RicShowWellAllocationPlotFeature.cpp index f1df0067cc..d6a2143609 100644 --- a/ApplicationCode/Commands/FlowCommands/RicShowWellAllocationPlotFeature.cpp +++ b/ApplicationCode/Commands/FlowCommands/RicShowWellAllocationPlotFeature.cpp @@ -41,18 +41,12 @@ CAF_CMD_SOURCE_INIT(RicShowWellAllocationPlotFeature, "RicShowWellAllocationPlot //-------------------------------------------------------------------------------------------------- bool RicShowWellAllocationPlotFeature::isCommandEnabled() { - RimView* activeView = RiaApplication::instance()->activeReservoirView(); - if (!activeView) return false; + std::vector collection; + caf::SelectionManager::instance()->objectsByType(&collection); - RimEclipseResultCase* eclCase = nullptr; - activeView->firstAncestorOrThisOfType(eclCase); - if (eclCase) + if (collection.size() > 0) { - RimFlowDiagSolution* defaultFlowDiagSolution = eclCase->defaultFlowDiagSolution(); - if (defaultFlowDiagSolution) - { - return true; - } + return true; } return false; From 1f1c82e45ebf326bc857a4a283878afaa394c671 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 14 Mar 2017 13:15:45 +0100 Subject: [PATCH 07/13] #1286 Show negative depth values to TVD/pseudo plots --- .../Flow/RimWellFlowRateCurve.cpp | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.cpp b/ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.cpp index 5d5be954f7..b69a22fcc1 100644 --- a/ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.cpp +++ b/ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.cpp @@ -30,6 +30,9 @@ #include "qwt_plot.h" +#include "cvfMath.h" + +#include //================================================================================================== @@ -152,10 +155,10 @@ void RimWellFlowRateCurve::updateCurveAppearance() void RimWellFlowRateCurve::updateStackedPlotData() { RimWellLogPlot* wellLogPlot; - firstAncestorOrThisOfType(wellLogPlot); + firstAncestorOrThisOfTypeAsserted(wellLogPlot); RimWellLogTrack* wellLogTrack; - firstAncestorOrThisOfType(wellLogTrack); + firstAncestorOrThisOfTypeAsserted(wellLogTrack); bool isFirstTrack = (wellLogTrack == wellLogPlot->trackByIndex(0)); @@ -186,6 +189,29 @@ void RimWellFlowRateCurve::updateStackedPlotData() depthValues.insert(depthValues.begin(), depthValues[0]); stackedValues.insert(stackedValues.begin(), 0.0); polyLineStartStopIndices.front().second += 1; + + if (wellLogPlot->trackCount() > 1 && isFirstTrack) + { + // Add a dummy negative depth value to make the contribution + // from other branches connected to well head visible + + double availableMinDepth; + double availableMaxDepth; + wellLogPlot->availableDepthRange(&availableMinDepth, &availableMaxDepth); + + double depthSpan = 0.1 * cvf::Math::abs(availableMinDepth - availableMaxDepth); + + // Round off value to floored decade + double logDecValue = log10(depthSpan); + logDecValue = cvf::Math::floor(logDecValue); + depthSpan = pow(10.0, logDecValue); + + double dummyNegativeDepthValue = -depthSpan; + + depthValues.push_back(dummyNegativeDepthValue); + stackedValues.push_back(stackedValues.back()); + polyLineStartStopIndices.front().second += 1; + } } // Add a dummy point for the zeroth connection to make the "end" distribution show better. From 239e9259f58dae47795d85ba9b8a986d8e8e0ab6 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 14 Mar 2017 14:41:39 +0100 Subject: [PATCH 08/13] #1286 Subtract depth value to make TVD behave more nicely --- ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.cpp b/ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.cpp index b69a22fcc1..ee8d7a3fbd 100644 --- a/ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.cpp +++ b/ApplicationCode/ProjectDataModel/Flow/RimWellFlowRateCurve.cpp @@ -206,7 +206,7 @@ void RimWellFlowRateCurve::updateStackedPlotData() logDecValue = cvf::Math::floor(logDecValue); depthSpan = pow(10.0, logDecValue); - double dummyNegativeDepthValue = -depthSpan; + double dummyNegativeDepthValue = depthValues.back() - depthSpan; depthValues.push_back(dummyNegativeDepthValue); stackedValues.push_back(stackedValues.back()); From a8f225a74915e50d9b9a20ea6814e52a978d9daa Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 14 Mar 2017 16:13:40 +0100 Subject: [PATCH 09/13] #1297 Added text label to display range type --- .../RimEclipsePropertyFilter.cpp | 35 ++++++++++++++++--- .../RimEclipsePropertyFilter.h | 3 +- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp index ee03da27af..60f9936ae1 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp @@ -22,12 +22,14 @@ #include "RigCaseCellResultsData.h" #include "RigEclipseCaseData.h" +#include "RigFlowDiagResults.h" #include "RigFormationNames.h" #include "RimEclipseCase.h" #include "RimEclipsePropertyFilterCollection.h" #include "RimEclipseResultDefinition.h" #include "RimEclipseView.h" +#include "RimFlowDiagSolution.h" #include "RimReservoirCellResultsStorage.h" #include "RimViewController.h" @@ -37,8 +39,6 @@ #include "cvfAssert.h" #include "cvfMath.h" -#include "RigFlowDiagResults.h" -#include "RimFlowDiagSolution.h" namespace caf @@ -74,6 +74,11 @@ RimEclipsePropertyFilter::RimEclipsePropertyFilter() resultDefinition.uiCapability()->setUiHidden(true); resultDefinition.uiCapability()->setUiTreeChildrenHidden(true); + CAF_PDM_InitField(&m_rangeLabelText, "Dummy_keyword", QString("Range Type"), "Range Type", "", "", ""); + m_rangeLabelText.xmlCapability()->setIOReadable(false); + m_rangeLabelText.xmlCapability()->setIOWritable(false); + m_rangeLabelText.uiCapability()->setUiReadOnly(true); + CAF_PDM_InitField(&m_lowerBound, "LowerBound", 0.0, "Min", "", "", ""); m_lowerBound.uiCapability()->setUiEditorTypeName(caf::PdmUiDoubleSliderEditor::uiEditorTypeName()); @@ -180,6 +185,8 @@ void RimEclipsePropertyFilter::defineUiOrdering(QString uiConfigName, caf::PdmUi // Fields declared in RimCellFilter uiOrdering.add(&filterMode); + + uiOrdering.add(&m_rangeLabelText); if (resultDefinition->hasCategoryResult()) { @@ -199,6 +206,7 @@ void RimEclipsePropertyFilter::defineUiOrdering(QString uiConfigName, caf::PdmUi uiOrdering.setForgetRemainingFields(true); updateReadOnlyStateOfAllFields(); + updateRangeLabel(); } //-------------------------------------------------------------------------------------------------- @@ -226,9 +234,26 @@ void RimEclipsePropertyFilter::updateReadOnlyStateOfAllFields() objFields.push_back(&(resultDefinition->m_porosityModelUiField)); objFields.push_back(&(resultDefinition->m_resultVariableUiField)); - for (size_t i = 0; i < objFields.size(); i++) + for (auto f : objFields) { - objFields[i]->uiCapability()->setUiReadOnly(readOnlyState); + if (f == &m_rangeLabelText) continue; + + f->uiCapability()->setUiReadOnly(readOnlyState); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimEclipsePropertyFilter::updateRangeLabel() +{ + if (resultDefinition->resultType() == RimDefines::FLOW_DIAGNOSTICS) + { + m_rangeLabelText = "Current Timestep"; + } + else + { + m_rangeLabelText = "All Timesteps"; } } @@ -237,7 +262,7 @@ void RimEclipsePropertyFilter::updateReadOnlyStateOfAllFields() //-------------------------------------------------------------------------------------------------- bool RimEclipsePropertyFilter::isPropertyFilterControlled() { - RimView* rimView = NULL; + RimView* rimView = nullptr; firstAncestorOrThisOfType(rimView); CVF_ASSERT(rimView); diff --git a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.h b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.h index 639a004280..4878608612 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.h +++ b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.h @@ -57,7 +57,6 @@ public: virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue); virtual void initAfterRead(); - protected: virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering); virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName); @@ -70,9 +69,11 @@ private: void updateActiveState(); void updateReadOnlyStateOfAllFields(); + void updateRangeLabel(); bool isPropertyFilterControlled(); private: + caf::PdmField m_rangeLabelText; caf::PdmField m_lowerBound; caf::PdmField m_upperBound; From ceef7f20f43cf73d4324ecefc21f5d90677848d8 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 14 Mar 2017 16:20:59 +0100 Subject: [PATCH 10/13] Removed duplicate code --- ApplicationCode/ProjectDataModel/RimView.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimView.cpp b/ApplicationCode/ProjectDataModel/RimView.cpp index 7c4e6c0f96..1592ebcae2 100644 --- a/ApplicationCode/ProjectDataModel/RimView.cpp +++ b/ApplicationCode/ProjectDataModel/RimView.cpp @@ -298,14 +298,8 @@ void RimView::scheduleCreateDisplayModelAndRedraw() //-------------------------------------------------------------------------------------------------- void RimView::setCurrentTimeStepAndUpdate(int frameIndex) { - m_currentTimeStep = frameIndex; - clampCurrentTimestep(); + setCurrentTimeStep(frameIndex); - this->hasUserRequestedAnimation = true; - if (this->propertyFilterCollection() && this->propertyFilterCollection()->hasActiveDynamicFilters()) - { - m_currentReservoirCellVisibility = NULL; - } this->updateCurrentTimeStep(); } From f875824eaf9b4ccf0ff0195ae0d08cc2721c2aff Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 14 Mar 2017 17:06:41 +0100 Subject: [PATCH 11/13] #1297 Fixed missing update of min variable --- ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp index 60f9936ae1..fc77c3a98f 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp @@ -334,7 +334,7 @@ void RimEclipsePropertyFilter::computeResultValueRange() if ( resultDefinition->flowDiagSolution() ) { RigFlowDiagResults* results = resultDefinition->flowDiagSolution()->flowDiagResults(); - results->minMaxScalarValues(resAddr, timeStep, &max, &max); + results->minMaxScalarValues(resAddr, timeStep, &min, &max); if ( resultDefinition->hasCategoryResult() ) { From 7db6dc22597ee0f29094def7aa2678956ee2b4bc Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 14 Mar 2017 17:07:27 +0100 Subject: [PATCH 12/13] #1297 Fixed invalid initialization of min/max values --- ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp index fc77c3a98f..0226463a36 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipsePropertyFilter.cpp @@ -318,8 +318,8 @@ void RimEclipsePropertyFilter::computeResultValueRange() { CVF_ASSERT(parentContainer()); - double min = 0.0; - double max = 0.0; + double min = HUGE_VAL; + double max = -HUGE_VAL; clearCategories(); From a22a58dd5b95198dd2029515c9302dba9a8a5f06 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 14 Mar 2017 17:26:40 +0100 Subject: [PATCH 13/13] #1297 Property Filter : Update ranges when time step changes --- .../RimEclipsePropertyFilter.cpp | 77 +++++++++++++++++++ .../RimEclipsePropertyFilter.h | 1 + .../RimEclipsePropertyFilterCollection.cpp | 11 +++ .../RimEclipsePropertyFilterCollection.h | 1 + .../ProjectDataModel/RimEclipseView.cpp | 2 + 5 files changed, 92 insertions(+) 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;