From b7d04375c8ffb4fde3cda357af57179150ff59eb Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 27 Aug 2015 14:57:04 +0200 Subject: [PATCH] (#395) Added support for control of geo mech results --- .../RimEclipseResultDefinition.cpp | 2 +- .../RimGeoMechResultDefinition.cpp | 32 +++++++-- .../RimManagedViewCollection.cpp | 67 ++++++++++++++++--- .../RimManagedViewCollection.h | 3 +- .../ProjectDataModel/RimManagedViewConfig.cpp | 22 ++++++ 5 files changed, 105 insertions(+), 21 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp index 855adb2d97..cf623da098 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp @@ -149,7 +149,7 @@ void RimEclipseResultDefinition::fieldChangedByUi(const caf::PdmFieldHandle* cha this->firstAnchestorOrThisOfType(view); if (view) { - view->managedViewCollection->updateResult(this); + view->managedViewCollection->updateCellResult(); } } diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechResultDefinition.cpp b/ApplicationCode/ProjectDataModel/RimGeoMechResultDefinition.cpp index 68db88a5d2..3a575eb5cd 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechResultDefinition.cpp +++ b/ApplicationCode/ProjectDataModel/RimGeoMechResultDefinition.cpp @@ -18,16 +18,23 @@ ///////////////////////////////////////////////////////////////////////////////// #include "RimGeoMechResultDefinition.h" -#include "RimGeoMechView.h" + +#include "RifGeoMechReaderInterface.h" + +#include "RigFemPartResultsCollection.h" +#include "RigFemResultAddress.h" +#include "RigGeoMechCaseData.h" + #include "RimDefines.h" #include "RimGeoMechCase.h" -#include "RifGeoMechReaderInterface.h" -#include "cafPdmUiListEditor.h" -#include "RigGeoMechCaseData.h" -#include "RigFemPartResultsCollection.h" -#include "RiuMainWindow.h" +#include "RimGeoMechCellColors.h" #include "RimGeoMechPropertyFilter.h" -#include "RigFemResultAddress.h" +#include "RimGeoMechView.h" +#include "RimManagedViewCollection.h" + +#include "RiuMainWindow.h" + +#include "cafPdmUiListEditor.h" namespace caf { @@ -197,6 +204,17 @@ void RimGeoMechResultDefinition::fieldChangedByUi(const caf::PdmFieldHandle* cha } reservoirView()->scheduleCreateDisplayModelAndRedraw(); + + if (dynamic_cast(this)) + { + RimView* view = NULL; + this->firstAnchestorOrThisOfType(view); + if (view) + { + view->managedViewCollection->updateCellResult(); + } + } + } } diff --git a/ApplicationCode/ProjectDataModel/RimManagedViewCollection.cpp b/ApplicationCode/ProjectDataModel/RimManagedViewCollection.cpp index c1812d26ea..596107eb26 100644 --- a/ApplicationCode/ProjectDataModel/RimManagedViewCollection.cpp +++ b/ApplicationCode/ProjectDataModel/RimManagedViewCollection.cpp @@ -29,6 +29,9 @@ #include "cvfCamera.h" #include "cvfMatrix4.h" +#include "RimGeoMechView.h" +#include "RimGeoMechResultDefinition.h" +#include "RimGeoMechCellColors.h" @@ -95,22 +98,55 @@ void RimManagedViewCollection::updateTimeStep(int timeStep) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimManagedViewCollection::updateResult(RimEclipseResultDefinition* resultDefinition) +void RimManagedViewCollection::updateCellResult() { - for (size_t i = 0; i < managedViews.size(); i++) + RimView* masterView = NULL; + firstAnchestorOrThisOfType(masterView); + + RimEclipseView* masterEclipseView = dynamic_cast(masterView); + if (masterEclipseView && masterEclipseView->cellResult()) { - RimManagedViewConfig* managedViewConfig = managedViews[i]; - if (managedViewConfig->managedView()) + RimEclipseResultDefinition* eclipseCellResultDefinition = masterEclipseView->cellResult(); + + for (size_t i = 0; i < managedViews.size(); i++) { - if (managedViewConfig->syncCellResult()) + RimManagedViewConfig* managedViewConfig = managedViews[i]; + if (managedViewConfig->managedView()) { - RimView* rimView = managedViewConfig->managedView(); - RimEclipseView* eclipeView = dynamic_cast(rimView); - if (eclipeView) + if (managedViewConfig->syncCellResult()) { - eclipeView->cellResult()->setPorosityModel(resultDefinition->porosityModel()); - eclipeView->cellResult()->setResultType(resultDefinition->resultType()); - eclipeView->cellResult()->setResultVariable(resultDefinition->resultVariable()); + RimView* rimView = managedViewConfig->managedView(); + RimEclipseView* eclipeView = dynamic_cast(rimView); + if (eclipeView) + { + eclipeView->cellResult()->setPorosityModel(eclipseCellResultDefinition->porosityModel()); + eclipeView->cellResult()->setResultType(eclipseCellResultDefinition->resultType()); + eclipeView->cellResult()->setResultVariable(eclipseCellResultDefinition->resultVariable()); + } + } + } + } + } + + RimGeoMechView* masterGeoView = dynamic_cast(masterView); + if (masterGeoView && masterGeoView->cellResult()) + { + RimGeoMechResultDefinition* geoMechResultDefinition = masterGeoView->cellResult(); + + for (size_t i = 0; i < managedViews.size(); i++) + { + RimManagedViewConfig* managedViewConfig = managedViews[i]; + if (managedViewConfig->managedView()) + { + if (managedViewConfig->syncCellResult()) + { + RimView* rimView = managedViewConfig->managedView(); + RimGeoMechView* geoView = dynamic_cast(rimView); + if (geoView) + { + geoView->cellResult()->setResultAddress(geoMechResultDefinition->resultAddress()); + geoView->scheduleCreateDisplayModelAndRedraw(); + } } } } @@ -138,6 +174,15 @@ void RimManagedViewCollection::updateRangeFilters() eclipeView->scheduleCreateDisplayModelAndRedraw(); } + + RimGeoMechView* geoView = dynamic_cast(rimView); + if (geoView) + { + geoView->scheduleGeometryRegen(RANGE_FILTERED); + geoView->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE); + + geoView->scheduleCreateDisplayModelAndRedraw(); + } } } } diff --git a/ApplicationCode/ProjectDataModel/RimManagedViewCollection.h b/ApplicationCode/ProjectDataModel/RimManagedViewCollection.h index e7e84c0e67..eee965823b 100644 --- a/ApplicationCode/ProjectDataModel/RimManagedViewCollection.h +++ b/ApplicationCode/ProjectDataModel/RimManagedViewCollection.h @@ -25,7 +25,6 @@ #include "cafPdmField.h" #include "cafPdmObject.h" -class RimEclipseResultDefinition; class RimManagedViewConfig; class RiuViewer; @@ -45,7 +44,7 @@ public: void updateViewers(RiuViewer* masterViewer); void updateTimeStep(int timeStep); - void updateResult(RimEclipseResultDefinition* resultDefinition); + void updateCellResult(); void updateRangeFilters(); }; diff --git a/ApplicationCode/ProjectDataModel/RimManagedViewConfig.cpp b/ApplicationCode/ProjectDataModel/RimManagedViewConfig.cpp index c5427278a5..d6a069dbcc 100644 --- a/ApplicationCode/ProjectDataModel/RimManagedViewConfig.cpp +++ b/ApplicationCode/ProjectDataModel/RimManagedViewConfig.cpp @@ -23,6 +23,7 @@ #include "RimCase.h" #include "RimCellRangeFilterCollection.h" +#include "RimManagedViewCollection.h" #include "RimProject.h" #include "RimView.h" @@ -131,6 +132,19 @@ void RimManagedViewConfig::fieldChangedByUi(const caf::PdmFieldHandle* changedFi masterView->viewer()->update(); } + else if (changedField == &syncCellResult) + { + // When cell result is activated, update cell result in managed views + // Original result Will not be restored when cell result is disabled + + if (syncCellResult()) + { + RimView* masterView = NULL; + firstAnchestorOrThisOfType(masterView); + + masterView->managedViewCollection()->updateCellResult(); + } + } else if (changedField == &syncRangeFilters) { configureOverrides(); @@ -147,6 +161,14 @@ void RimManagedViewConfig::fieldChangedByUi(const caf::PdmFieldHandle* changedFi if (managedView) { managedView->rangeFilterCollection()->updateUiUpdateDisplayModel(); + + if (syncCellResult()) + { + RimView* masterView = NULL; + firstAnchestorOrThisOfType(masterView); + + masterView->managedViewCollection()->updateCellResult(); + } } PdmObjectHandle* prevValue = oldValue.value >().rawPtr();