From 12e95c37a63b0421b8991d5d08b1ec401d1d391e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Jensen?= Date: Wed, 20 Dec 2017 13:14:43 +0100 Subject: [PATCH] #2140 Fracture colors. Set default result to Conductivity when selecting template --- .../Completions/RimFracture.cpp | 25 +++++++ .../ProjectDataModel/RimProject.cpp | 38 ++++++++++- ApplicationCode/ProjectDataModel/RimProject.h | 7 +- .../ProjectDataModel/RimStimPlanColors.cpp | 68 ++++++++++++++++--- .../ProjectDataModel/RimStimPlanColors.h | 2 +- 5 files changed, 126 insertions(+), 14 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFracture.cpp b/ApplicationCode/ProjectDataModel/Completions/RimFracture.cpp index 25d1c6960e..52a52f83e2 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFracture.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimFracture.cpp @@ -46,6 +46,7 @@ #include "RimProject.h" #include "RimReservoirCellResultsStorage.h" #include "RimStimPlanFractureTemplate.h" +#include "RimStimPlanColors.h" #include "RimView.h" #include "RivWellFracturePartMgr.h" @@ -69,6 +70,29 @@ CAF_PDM_XML_ABSTRACT_SOURCE_INIT(RimFracture, "Fracture"); +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void setDefaultFractureColorResult() +{ + RiaApplication* app = RiaApplication::instance(); + RimProject* proj = app->project(); + + for (RimEclipseCase* const eclCase : proj->eclipseCases()) + { + for (RimView* const view : eclCase->views()) + { + std::vector fractureColors; + view->descendantsIncludingThisOfType(fractureColors); + + for (RimStimPlanColors* const stimPlanColors : fractureColors) + { + stimPlanColors->setDefaultResultNameForStimPlan(); + } + } + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -151,6 +175,7 @@ void RimFracture::fieldChangedByUi(const caf::PdmFieldHandle* changedField, cons if (changedField == &m_fractureTemplate) { setFractureTemplate(m_fractureTemplate); + setDefaultFractureColorResult(); } if (changedField == &azimuth || diff --git a/ApplicationCode/ProjectDataModel/RimProject.cpp b/ApplicationCode/ProjectDataModel/RimProject.cpp index 48b5d6f81b..e121e1600d 100644 --- a/ApplicationCode/ProjectDataModel/RimProject.cpp +++ b/ApplicationCode/ProjectDataModel/RimProject.cpp @@ -40,6 +40,7 @@ #ifdef USE_PROTOTYPE_FEATURE_FRACTURES #include "RimFractureTemplateCollection.h" +#include "RimFractureTemplate.h" #endif // USE_PROTOTYPE_FEATURE_FRACTURES #include "RimGeoMechCase.h" @@ -653,7 +654,7 @@ void RimProject::createDisplayModelAndRedrawAllViews() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimProject::allOilFields(std::vector& oilFields) +void RimProject::allOilFields(std::vector& oilFields) const { oilFields.clear(); for (const auto& oilField : this->oilFields) @@ -879,6 +880,41 @@ std::vector RimProject::geoMechCases() const return cases; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimProject::allFractureTemplateCollections() const +{ + std::vector templColls; + std::vector oilFields; + + allOilFields(oilFields); + for (RimOilField* oilField : oilFields) + { + templColls.push_back(oilField->fractureDefinitionCollection()); + } + return templColls; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimProject::allFractureTemplates() const +{ + std::vector templates; + std::vector oilFields; + + allOilFields(oilFields); + for (RimFractureTemplateCollection* templColl : allFractureTemplateCollections()) + { + for (RimFractureTemplate* templ : templColl->fractureDefinitions()) + { + templates.push_back(templ); + } + } + return templates; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimProject.h b/ApplicationCode/ProjectDataModel/RimProject.h index be82cfa27d..31e3419234 100644 --- a/ApplicationCode/ProjectDataModel/RimProject.h +++ b/ApplicationCode/ProjectDataModel/RimProject.h @@ -52,6 +52,8 @@ class RimViewLinker; class RimViewLinkerCollection; class RimWellPath; class RimWellPathImport; +class RimFractureTemplateCollection; +class RimFractureTemplate; namespace caf { @@ -110,7 +112,7 @@ public: void computeUtmAreaOfInterest(); - void allOilFields(std::vector& oilFields); + void allOilFields(std::vector& oilFields) const; RimOilField* activeOilField(); const RimOilField* activeOilField() const; @@ -133,6 +135,9 @@ public: std::vector geoMechCases() const; + std::vector allFractureTemplateCollections() const; + std::vector allFractureTemplates() const; + protected: // Overridden methods void initScriptDirectories(); diff --git a/ApplicationCode/ProjectDataModel/RimStimPlanColors.cpp b/ApplicationCode/ProjectDataModel/RimStimPlanColors.cpp index c92d520a0c..05f4acd568 100644 --- a/ApplicationCode/ProjectDataModel/RimStimPlanColors.cpp +++ b/ApplicationCode/ProjectDataModel/RimStimPlanColors.cpp @@ -18,6 +18,8 @@ #include "RimStimPlanColors.h" +#include "RiaApplication.h" + #include "RimEclipseView.h" #include "RimFractureTemplateCollection.h" #include "RimLegendConfig.h" @@ -28,6 +30,7 @@ #include "cafPdmUiDoubleSliderEditor.h" #include "cafPdmUiItem.h" #include "cafPdmUiTreeOrdering.h" +#include "cafSelectionManagerTools.h" #include "cvfqtUtils.h" @@ -37,6 +40,12 @@ CAF_PDM_SOURCE_INIT(RimStimPlanColors, "RimStimPlanColors"); +//-------------------------------------------------------------------------------------------------- +/// Internal methods +//-------------------------------------------------------------------------------------------------- +static void setDefaultResultIfStimPlan(caf::PdmField &field); +static QString toString(const std::pair& resultNameAndUnit); + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -84,7 +93,7 @@ void RimStimPlanColors::loadDataAndUpdate() bool found = false; for (auto resultNameAndUnit : resultNameAndUnits) { - if (RimStimPlanColors::toString(resultNameAndUnit) == legendVariableName) + if (toString(resultNameAndUnit) == legendVariableName) { found = true; } @@ -107,7 +116,7 @@ void RimStimPlanColors::loadDataAndUpdate() // Create legend for result if not already present for (auto resultNameAndUnit : resultNameAndUnits) { - QString resultNameUnitString = RimStimPlanColors::toString(resultNameAndUnit); + QString resultNameUnitString = toString(resultNameAndUnit); bool foundResult = false; for (RimLegendConfig* legend : m_legendConfigurations) @@ -148,7 +157,7 @@ QList RimStimPlanColors::calculateValueOptions(const caf for (auto resultNameAndUnit : fractureTemplates->stimPlanResultNamesAndUnits()) { - QString resultNameAndUnitString = RimStimPlanColors::toString(resultNameAndUnit); + QString resultNameAndUnitString = toString(resultNameAndUnit); options.push_back(caf::PdmOptionItemInfo(resultNameAndUnitString, resultNameAndUnitString)); } } @@ -213,6 +222,14 @@ QString RimStimPlanColors::resultName() const return RimStimPlanColors::toResultName(m_resultNameAndUnit()); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimStimPlanColors::setDefaultResultNameForStimPlan() +{ + setDefaultResultIfStimPlan(m_resultNameAndUnit); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -275,14 +292,6 @@ RimFractureTemplateCollection* RimStimPlanColors::fractureTemplateCollection() c return proj->activeOilField()->fractureDefinitionCollection(); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -QString RimStimPlanColors::toString(const std::pair& resultNameAndUnit) -{ - return QString("%1 [%2]").arg(resultNameAndUnit.first).arg(resultNameAndUnit.second); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -356,3 +365,40 @@ void RimStimPlanColors::defineEditorAttribute(const caf::PdmFieldHandle* field, } } + +//-------------------------------------------------------------------------------------------------- +/// Internal methods +//-------------------------------------------------------------------------------------------------- + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString toString(const std::pair& resultNameAndUnit) +{ + return QString("%1 [%2]").arg(resultNameAndUnit.first).arg(resultNameAndUnit.second); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void setDefaultResultIfStimPlan(caf::PdmField &field) +{ + RimProject* proj = RiaApplication::instance()->project(); + + std::vector stimPlanFracTemplates = proj->allFractureTemplates(); + + if (!stimPlanFracTemplates.empty() && field() == "None") + { + RimFractureTemplateCollection* templColl = proj->allFractureTemplateCollections().front(); + + for (auto resultNameAndUnit : templColl->stimPlanResultNamesAndUnits()) + { + if (resultNameAndUnit.first == "CONDUCTIVITY") + { + field = toString(resultNameAndUnit); + break; + } + } + } + +} diff --git a/ApplicationCode/ProjectDataModel/RimStimPlanColors.h b/ApplicationCode/ProjectDataModel/RimStimPlanColors.h index f11fa32209..098d31adbb 100644 --- a/ApplicationCode/ProjectDataModel/RimStimPlanColors.h +++ b/ApplicationCode/ProjectDataModel/RimStimPlanColors.h @@ -50,6 +50,7 @@ public: RimLegendConfig* activeLegend() const; QString resultName() const; + void setDefaultResultNameForStimPlan(); QString unit() const; float opacityLevel() const; cvf::Color3f defaultColor() const; @@ -66,7 +67,6 @@ protected: private: RimFractureTemplateCollection* fractureTemplateCollection() const; - static QString toString(const std::pair& resultNameAndUnit); static QString toResultName(const QString& resultNameAndUnit); static QString toUnit(const QString& resultNameAndUnit);