diff --git a/ApplicationCode/ProjectDataModel/RimEclipseGeometrySelectionItem.cpp b/ApplicationCode/ProjectDataModel/RimEclipseGeometrySelectionItem.cpp index 798a0c0388..4aac6cc689 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseGeometrySelectionItem.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseGeometrySelectionItem.cpp @@ -127,3 +127,22 @@ size_t RimEclipseGeometrySelectionItem::cellIndex() const { return m_cellIndex; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Vec3st RimEclipseGeometrySelectionItem::cellIJK() const +{ + cvf::Vec3st IJK( -1, -1, -1 ); + + if ( m_cellIndex != cvf::UNDEFINED_SIZE_T ) + { + if ( m_eclipseCase && m_eclipseCase->eclipseCaseData() && m_eclipseCase->eclipseCaseData()->grid( m_gridIndex ) ) + { + m_eclipseCase->eclipseCaseData()->grid( m_gridIndex )->ijkFromCellIndex( m_cellIndex, &IJK[0], &IJK[1], &IJK[2] ); + } + } + + return IJK; +} + diff --git a/ApplicationCode/ProjectDataModel/RimEclipseGeometrySelectionItem.h b/ApplicationCode/ProjectDataModel/RimEclipseGeometrySelectionItem.h index 72e6d2df30..03d2e1fc19 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseGeometrySelectionItem.h +++ b/ApplicationCode/ProjectDataModel/RimEclipseGeometrySelectionItem.h @@ -46,6 +46,7 @@ public: RimEclipseCase* eclipseCase() const; size_t gridIndex() const; size_t cellIndex() const; + cvf::Vec3st cellIJK() const; private: caf::PdmPtrField m_eclipseCase; diff --git a/ApplicationCode/ProjectDataModel/RimGridTimeHistoryCurve.cpp b/ApplicationCode/ProjectDataModel/RimGridTimeHistoryCurve.cpp index e4724ff24d..a5258bd1f9 100644 --- a/ApplicationCode/ProjectDataModel/RimGridTimeHistoryCurve.cpp +++ b/ApplicationCode/ProjectDataModel/RimGridTimeHistoryCurve.cpp @@ -45,6 +45,7 @@ #include "RiuQwtPlotCurve.h" #include "qwt_plot.h" +#include "SummaryPlotCommands/RicSummaryPlotFeatureImpl.h" CAF_PDM_SOURCE_INIT( RimGridTimeHistoryCurve, "GridTimeHistoryCurve" ); @@ -169,6 +170,30 @@ void RimGridTimeHistoryCurve::setFromEclipseCellAndResult( geomSelectionItem->setFromCaseGridAndIJK( eclCase, gridIdx, i, j, k ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RigGridCellResultAddress RimGridTimeHistoryCurve::resultAddress() +{ + RimEclipseGeometrySelectionItem* eclipseGeomSelectionItem = dynamic_cast( + m_geometrySelectionItem.value() ); + + if ( m_eclipseResultDefinition && eclipseGeomSelectionItem ) + { + cvf::Vec3st IJK = eclipseGeomSelectionItem->cellIJK(); + + return RigGridCellResultAddress( eclipseGeomSelectionItem->gridIndex(), + IJK[0], + IJK[1], + IJK[2], + m_eclipseResultDefinition->eclipseResultAddress() ); + } + + // Todo: support geomech stuff + + return RigGridCellResultAddress(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimGridTimeHistoryCurve.h b/ApplicationCode/ProjectDataModel/RimGridTimeHistoryCurve.h index 62fb999b84..3053e1ab13 100644 --- a/ApplicationCode/ProjectDataModel/RimGridTimeHistoryCurve.h +++ b/ApplicationCode/ProjectDataModel/RimGridTimeHistoryCurve.h @@ -26,6 +26,7 @@ #include "cafPdmPtrField.h" #include +#include "SummaryPlotCommands/RicSummaryPlotFeatureImpl.h" class RigMainGrid; class RimEclipseCase; @@ -62,6 +63,8 @@ public: std::vector timeStepValues() const; std::vector daysSinceSimulationStart() const; + RigGridCellResultAddress resultAddress(); + QString quantityName() const; QString caseName() const; RimCase* gridCase() const; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.cpp index 626f4ccca7..8c21ef0d70 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.cpp @@ -50,6 +50,8 @@ #include +#define FILTER_TEXT_OUTDATED_TEXT "" + CAF_PDM_SOURCE_INIT( RimSummaryPlotFilterTextCurveSetEditor, "SummaryPlotFilterTextCurveSetEditor" ); //-------------------------------------------------------------------------------------------------- @@ -105,7 +107,7 @@ void RimSummaryPlotFilterTextCurveSetEditor::fieldChangedByUi( const caf::PdmFie std::set curveDefinitions; - QStringList allCurveAddressFilters = m_curveFilterText().split( QRegExp( "\\s+" ) , QString::SkipEmptyParts); + QStringList allCurveAddressFilters = curveFilterTextWithoutOutdatedLabel().split( QRegExp( "\\s+" ) , QString::SkipEmptyParts); std::vector accumulatedUsedFilters( allCurveAddressFilters.size(), false ); for ( SummarySource* currSource : selectedSummarySources() ) @@ -258,6 +260,11 @@ void RimSummaryPlotFilterTextCurveSetEditor::fieldChangedByUi( const caf::PdmFie parentPlot->updateConnectedEditors(); } + if (changedField == &m_curveFilterText) + { + m_curveFilterText = curveFilterTextWithoutOutdatedLabel(); + } + m_isFieldRecentlyChangedFromGui = true; } @@ -273,6 +280,9 @@ void RimSummaryPlotFilterTextCurveSetEditor::defineUiOrdering(QString uiConfigNa RimSummaryPlot* parentPlot; this->firstAncestorOrThisOfType( parentPlot ); std::set sourcesFromExistingCurves; + std::set addressesInUse; + std::vector gridaddressesInUse; + if ( parentPlot ) { @@ -280,12 +290,14 @@ void RimSummaryPlotFilterTextCurveSetEditor::defineUiOrdering(QString uiConfigNa for (auto ensCurvSet: ensembleCurveSets) { sourcesFromExistingCurves.insert(ensCurvSet->summaryCaseCollection()); + addressesInUse.insert(ensCurvSet->summaryAddress()); } std::vector sumCurves = parentPlot->summaryCurveCollection()->curves(); for (auto sumCurve: sumCurves) { sourcesFromExistingCurves.insert(sumCurve->summaryCaseY()); + addressesInUse.insert(sumCurve->summaryAddressY()); } @@ -296,6 +308,7 @@ void RimSummaryPlotFilterTextCurveSetEditor::defineUiOrdering(QString uiConfigNa if (eclCase) { sourcesFromExistingCurves.insert(eclCase); + gridaddressesInUse.push_back(grCurve->resultAddress()); } } } @@ -305,11 +318,40 @@ void RimSummaryPlotFilterTextCurveSetEditor::defineUiOrdering(QString uiConfigNa m_selectedSources.clear(); m_selectedSources.setValue(usedSources); + // Check if existing filtertext matches all the curves + // Todo: possibly check grid time history curves also + + QStringList allCurveAddressFilters = curveFilterTextWithoutOutdatedLabel().split( QRegExp( "\\s+" ) , QString::SkipEmptyParts); + std::vector accumulatedUsedFilters( allCurveAddressFilters.size(), false ); + + std::vector usedFilters; + std::set filteredAddressesFromSource; + RicSummaryPlotFeatureImpl::filteredSummaryAdressesFromCase( allCurveAddressFilters, + addressesInUse, + &filteredAddressesFromSource, + &usedFilters ); + + if (filteredAddressesFromSource != addressesInUse) + { + m_curveFilterText = FILTER_TEXT_OUTDATED_TEXT + curveFilterTextWithoutOutdatedLabel(); + } + else + { + m_curveFilterText = curveFilterTextWithoutOutdatedLabel(); + } } m_isFieldRecentlyChangedFromGui = false; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryPlotFilterTextCurveSetEditor::setupBeforeSave() +{ + m_curveFilterText = curveFilterTextWithoutOutdatedLabel(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -425,3 +467,17 @@ std::vector RimSummaryPlotFilterTextCurveSetEditor::selectedSumm return sources; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimSummaryPlotFilterTextCurveSetEditor::curveFilterTextWithoutOutdatedLabel() const +{ + QString filterText = m_curveFilterText(); + + if ( filterText.startsWith( FILTER_TEXT_OUTDATED_TEXT ) ) + { + return filterText.right( filterText.length() - QString( FILTER_TEXT_OUTDATED_TEXT ).length() ); + } + + return filterText; +} diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.h index 8cafed4ddf..f7e4869593 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.h @@ -38,6 +38,7 @@ protected: const QVariant& oldValue, const QVariant& newValue ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; + virtual void setupBeforeSave() override; private: static void appendOptionItemsForSources( QList& options, @@ -45,9 +46,10 @@ private: bool hideEnsembles ); std::vector selectedSummarySources() const; + QString curveFilterTextWithoutOutdatedLabel() const; caf::PdmPtrArrayField m_selectedSources; caf::PdmField m_curveFilterText; - bool m_isFieldRecentlyChangedFromGui; + bool m_isFieldRecentlyChangedFromGui; };