From 1df25ed71c8add795802f37181b2357bfd4c0100 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Tue, 14 Sep 2021 10:44:52 +0200 Subject: [PATCH] #7966 Ensemble Well Log: depth equalization and filter by curve set options in well log plot (#8001) --- .../Tools/RiaOptionItemFactory.cpp | 19 +++++++++ .../Application/Tools/RiaOptionItemFactory.h | 1 + .../ProjectDataModel/RimDepthTrackPlot.cpp | 40 +++++++++++++++++++ .../ProjectDataModel/RimDepthTrackPlot.h | 7 ++++ .../Surfaces/RimEnsembleSurface.cpp | 11 +---- .../WellLog/RimEnsembleWellLogCurveSet.cpp | 27 ++++++++----- .../WellLog/RimEnsembleWellLogCurveSet.h | 3 ++ 7 files changed, 90 insertions(+), 18 deletions(-) diff --git a/ApplicationLibCode/Application/Tools/RiaOptionItemFactory.cpp b/ApplicationLibCode/Application/Tools/RiaOptionItemFactory.cpp index e8b487aa6d..ae38193454 100644 --- a/ApplicationLibCode/Application/Tools/RiaOptionItemFactory.cpp +++ b/ApplicationLibCode/Application/Tools/RiaOptionItemFactory.cpp @@ -20,6 +20,9 @@ #include "Rim3dView.h" #include "RimCase.h" +#include "RimEnsembleCurveSet.h" +#include "RimMainPlotCollection.h" +#include "RimProject.h" //-------------------------------------------------------------------------------------------------- /// @@ -35,3 +38,19 @@ void RiaOptionItemFactory::appendOptionItemFromViewNameAndCaseName( Rim3dView* optionItems->push_back( caf::PdmOptionItemInfo( displayName, view, false, iconProvider ) ); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiaOptionItemFactory::appendOptionItemsForEnsembleCurveSets( QList* options ) +{ + options->push_back( caf::PdmOptionItemInfo( "None", nullptr ) ); + + RimMainPlotCollection* mainPlotColl = RimProject::current()->mainPlotCollection(); + std::vector ensembleCurveSets; + mainPlotColl->descendantsOfType( ensembleCurveSets ); + for ( auto ensembleCurveSet : ensembleCurveSets ) + { + options->push_back( caf::PdmOptionItemInfo( ensembleCurveSet->name(), ensembleCurveSet ) ); + } +} diff --git a/ApplicationLibCode/Application/Tools/RiaOptionItemFactory.h b/ApplicationLibCode/Application/Tools/RiaOptionItemFactory.h index 6a8c146ca6..f8246803d2 100644 --- a/ApplicationLibCode/Application/Tools/RiaOptionItemFactory.h +++ b/ApplicationLibCode/Application/Tools/RiaOptionItemFactory.h @@ -28,4 +28,5 @@ class RiaOptionItemFactory { public: static void appendOptionItemFromViewNameAndCaseName( Rim3dView* view, QList* optionItems ); + static void appendOptionItemsForEnsembleCurveSets( QList* options ); }; diff --git a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp index c0c485e856..dc43979213 100644 --- a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.cpp @@ -20,6 +20,7 @@ #include "RimDepthTrackPlot.h" #include "RiaGuiApplication.h" +#include "RiaOptionItemFactory.h" #include "RiaPreferences.h" #include "RigWellLogCurveData.h" @@ -28,7 +29,10 @@ #include "RimEclipseCase.h" #include "RimEclipseCaseCollection.h" #include "RimEclipseResultCase.h" +#include "RimEnsembleCurveSet.h" +#include "RimEnsembleWellLogCurveSet.h" #include "RimGeoMechCase.h" +#include "RimMainPlotCollection.h" #include "RimOilField.h" #include "RimPlot.h" #include "RimProject.h" @@ -118,6 +122,9 @@ RimDepthTrackPlot::RimDepthTrackPlot() m_nameConfig.uiCapability()->setUiTreeChildrenHidden( true ); m_nameConfig = new RimWellLogPlotNameConfig(); + CAF_PDM_InitFieldNoDefault( &m_ensembleCurveSet, "FilterEnsembleCurveSet", "Filter by Ensemble Curve Set", "", "", "" ); + CAF_PDM_InitFieldNoDefault( &m_depthEqualization, "DepthEqualization", "Depth Equalization", "", "", "" ); + CAF_PDM_InitFieldNoDefault( &m_plots, "Tracks", "", "", "", "" ); m_plots.uiCapability()->setUiHidden( true ); auto reorderability = caf::PdmFieldReorderCapability::addToField( &m_plots ); @@ -830,6 +837,26 @@ void RimDepthTrackPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedFiel { performAutoNameUpdate(); } + else if ( changedField == &m_depthEqualization ) + { + std::vector ensembleWellLogCurveSets; + descendantsOfType( ensembleWellLogCurveSets ); + for ( auto ensembleWellLogCurveSet : ensembleWellLogCurveSets ) + { + ensembleWellLogCurveSet->setDepthEqualization( m_depthEqualization() ); + ensembleWellLogCurveSet->loadDataAndUpdate( true ); + } + } + else if ( changedField == &m_ensembleCurveSet ) + { + std::vector ensembleWellLogCurveSets; + descendantsOfType( ensembleWellLogCurveSets ); + for ( auto ensembleWellLogCurveSet : ensembleWellLogCurveSets ) + { + ensembleWellLogCurveSet->setFilterByEnsembleCurveSet( m_ensembleCurveSet() ); + ensembleWellLogCurveSet->loadDataAndUpdate( true ); + } + } updateConnectedEditors(); } @@ -856,6 +883,15 @@ void RimDepthTrackPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrderi plotLayoutGroup->add( &m_axisTitleFontSize ); plotLayoutGroup->add( &m_axisValueFontSize ); + std::vector ensembleWellLogCurveSets; + descendantsOfType( ensembleWellLogCurveSets ); + if ( !ensembleWellLogCurveSets.empty() ) + { + caf::PdmUiGroup* ensembleWellLogGroup = uiOrdering.addNewGroup( "Ensemble Well Log" ); + ensembleWellLogGroup->add( &m_depthEqualization ); + ensembleWellLogGroup->add( &m_ensembleCurveSet ); + } + uiOrdering.skipRemainingFields( true ); } @@ -893,6 +929,10 @@ QList RimDepthTrackPlot::calculateValueOptions( const ca { options = caf::FontTools::relativeSizeValueOptions( RiaPreferences::current()->defaultPlotFontSize() ); } + else if ( fieldNeedingOptions == &m_ensembleCurveSet ) + { + RiaOptionItemFactory::appendOptionItemsForEnsembleCurveSets( &options ); + } ( *useOptionsOnly ) = true; return options; diff --git a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h index e75748ec70..af772f2aff 100644 --- a/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h +++ b/ApplicationLibCode/ProjectDataModel/RimDepthTrackPlot.h @@ -21,6 +21,7 @@ #include "RiaDefines.h" #include "RimAbstractPlotCollection.h" +#include "RimEnsembleWellLogStatistics.h" #include "RimPlotWindow.h" #include "RimWellLogPlotNameConfig.h" @@ -30,6 +31,7 @@ #include "cafPdmField.h" #include "cafPdmFieldHandle.h" #include "cafPdmObject.h" +#include "cafPdmPtrField.h" #include @@ -38,6 +40,8 @@ class RimWellLogCurveCommonDataSource; class RiuWellLogPlot; class RimPlot; +class RimEnsembleCurveSet; + class QKeyEvent; //================================================================================================== @@ -175,6 +179,9 @@ protected: caf::PdmChildField m_nameConfig; caf::PdmChildArrayField m_plots; + caf::PdmField> m_depthEqualization; + caf::PdmPtrField m_ensembleCurveSet; + QPointer m_viewer; std::set m_availableDepthUnits; std::set m_availableDepthTypes; diff --git a/ApplicationLibCode/ProjectDataModel/Surfaces/RimEnsembleSurface.cpp b/ApplicationLibCode/ProjectDataModel/Surfaces/RimEnsembleSurface.cpp index 907b0ed4b6..529a7b4347 100644 --- a/ApplicationLibCode/ProjectDataModel/Surfaces/RimEnsembleSurface.cpp +++ b/ApplicationLibCode/ProjectDataModel/Surfaces/RimEnsembleSurface.cpp @@ -19,6 +19,7 @@ #include "RimEnsembleSurface.h" #include "RiaLogging.h" +#include "RiaOptionItemFactory.h" #include "RigSurfaceResampler.h" #include "RigSurfaceStatisticsCalculator.h" @@ -217,15 +218,7 @@ QList RimEnsembleSurface::calculateValueOptions( const c if ( fieldNeedingOptions == &m_ensembleCurveSet ) { - options.push_back( caf::PdmOptionItemInfo( "None", nullptr ) ); - - RimMainPlotCollection* mainPlotColl = RimProject::current()->mainPlotCollection(); - std::vector ensembleCurveSets; - mainPlotColl->descendantsOfType( ensembleCurveSets ); - for ( auto ensembleCurveSet : ensembleCurveSets ) - { - options.push_back( caf::PdmOptionItemInfo( ensembleCurveSet->name(), ensembleCurveSet ) ); - } + RiaOptionItemFactory::appendOptionItemsForEnsembleCurveSets( &options ); } return options; diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.cpp b/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.cpp index 0c19ccb6ce..edc5494e53 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.cpp +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.cpp @@ -20,6 +20,7 @@ #include "RiaColorTools.h" #include "RiaLogging.h" +#include "RiaOptionItemFactory.h" #include "RimEnsembleCurveFilter.h" #include "RimEnsembleCurveFilterCollection.h" @@ -571,15 +572,7 @@ QList } else if ( fieldNeedingOptions == &m_ensembleCurveSet ) { - options.push_back( caf::PdmOptionItemInfo( "None", nullptr ) ); - - RimMainPlotCollection* mainPlotColl = RimProject::current()->mainPlotCollection(); - std::vector ensembleCurveSets; - mainPlotColl->descendantsOfType( ensembleCurveSets ); - for ( auto ensembleCurveSet : ensembleCurveSets ) - { - options.push_back( caf::PdmOptionItemInfo( ensembleCurveSet->name(), ensembleCurveSet ) ); - } + RiaOptionItemFactory::appendOptionItemsForEnsembleCurveSets( &options ); } else if ( fieldNeedingOptions == &m_colorMode ) { @@ -925,6 +918,22 @@ RimEnsembleWellLogStatistics::DepthEqualization RimEnsembleWellLogCurveSet::dept return m_depthEqualization(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimEnsembleWellLogCurveSet::setDepthEqualization( RimEnsembleWellLogStatistics::DepthEqualization depthEqualization ) +{ + m_depthEqualization = depthEqualization; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimEnsembleWellLogCurveSet::setFilterByEnsembleCurveSet( RimEnsembleCurveSet* ensembleCurveSet ) +{ + m_ensembleCurveSet = ensembleCurveSet; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.h b/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.h index 6912ff52b2..52b33cfc76 100644 --- a/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.h +++ b/ApplicationLibCode/ProjectDataModel/WellLog/RimEnsembleWellLogCurveSet.h @@ -114,12 +114,15 @@ public: const RimEnsembleWellLogStatistics* ensembleWellLogStatistics() const; RimEnsembleWellLogStatistics::DepthEqualization depthEqualization() const; + void setDepthEqualization( RimEnsembleWellLogStatistics::DepthEqualization depthEqualization ); void updateStatistics(); void setEnsembleWellLogs( RimEnsembleWellLogs* ensembleWellLogs ); void setWellLogChannelName( const QString& wellLogChannelName ); + void setFilterByEnsembleCurveSet( RimEnsembleCurveSet* ensembleCurveSet ); + private: void updateEnsembleCurves( const std::vector& curves ); void updateStatisticsCurves( const std::vector& curves );