#4584 Text Based Curve Creation: Add <Outdated> flag if the actual curves does not match the filter

Add address access on gridTimeHistoryCurves.
This commit is contained in:
Jacob Støren
2019-09-13 14:55:41 +02:00
parent 3896b793a8
commit de17127a08
6 changed files with 108 additions and 2 deletions

View File

@@ -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;
}

View File

@@ -46,6 +46,7 @@ public:
RimEclipseCase* eclipseCase() const;
size_t gridIndex() const;
size_t cellIndex() const;
cvf::Vec3st cellIJK() const;
private:
caf::PdmPtrField<RimEclipseCase*> m_eclipseCase;

View File

@@ -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<RimEclipseGeometrySelectionItem*>(
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();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -26,6 +26,7 @@
#include "cafPdmPtrField.h"
#include <memory>
#include "SummaryPlotCommands/RicSummaryPlotFeatureImpl.h"
class RigMainGrid;
class RimEclipseCase;
@@ -62,6 +63,8 @@ public:
std::vector<time_t> timeStepValues() const;
std::vector<double> daysSinceSimulationStart() const;
RigGridCellResultAddress resultAddress();
QString quantityName() const;
QString caseName() const;
RimCase* gridCase() const;

View File

@@ -50,6 +50,8 @@
#include <QRegularExpression>
#define FILTER_TEXT_OUTDATED_TEXT "<Outdated>"
CAF_PDM_SOURCE_INIT( RimSummaryPlotFilterTextCurveSetEditor, "SummaryPlotFilterTextCurveSetEditor" );
//--------------------------------------------------------------------------------------------------
@@ -105,7 +107,7 @@ void RimSummaryPlotFilterTextCurveSetEditor::fieldChangedByUi( const caf::PdmFie
std::set<RiaSummaryCurveDefinition> curveDefinitions;
QStringList allCurveAddressFilters = m_curveFilterText().split( QRegExp( "\\s+" ) , QString::SkipEmptyParts);
QStringList allCurveAddressFilters = curveFilterTextWithoutOutdatedLabel().split( QRegExp( "\\s+" ) , QString::SkipEmptyParts);
std::vector<bool> 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<SummarySource*> sourcesFromExistingCurves;
std::set<RifEclipseSummaryAddress> addressesInUse;
std::vector<RigGridCellResultAddress> 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<RimSummaryCurve*> 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<bool> accumulatedUsedFilters( allCurveAddressFilters.size(), false );
std::vector<bool> usedFilters;
std::set<RifEclipseSummaryAddress> 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<SummarySource*> 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;
}

View File

@@ -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<caf::PdmOptionItemInfo>& options,
@@ -45,6 +46,7 @@ private:
bool hideEnsembles );
std::vector<SummarySource*> selectedSummarySources() const;
QString curveFilterTextWithoutOutdatedLabel() const;
caf::PdmPtrArrayField<SummarySource*> m_selectedSources;
caf::PdmField<QString> m_curveFilterText;