Grid Ensemble: add methods to add view

This commit is contained in:
Kristian Bendiksen
2024-02-19 09:23:23 +01:00
parent b84362dfc0
commit ade044adbf
12 changed files with 300 additions and 25 deletions

View File

@@ -49,6 +49,7 @@
#include "RimCustomObjectiveFunctionCollection.h"
#include "RimEclipseCase.h"
#include "RimEclipseCaseCollection.h"
#include "RimEclipseCaseEnsemble.h"
#include "RimEclipseCellColors.h"
#include "RimEclipseContourMapView.h"
#include "RimEclipseContourMapViewCollection.h"
@@ -273,6 +274,10 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection()
menuBuilder << "Separator";
menuBuilder << "RicNewStatisticsCaseFeature";
}
else if ( dynamic_cast<RimEclipseCaseEnsemble*>( firstUiItem ) )
{
menuBuilder << "RicNewViewForGridEnsembleFeature";
}
else if ( dynamic_cast<RimGeoMechModels*>( firstUiItem ) )
{
menuBuilder << "RicImportGeoMechCaseFeature";

View File

@@ -312,6 +312,14 @@ void RimEclipseCase::initAfterRead()
RimEclipseView* RimEclipseCase::createAndAddReservoirView( bool useGlobalViewCollection )
{
RimEclipseViewCollection* viewColl = useGlobalViewCollection ? globalViewCollection() : viewCollection();
return createAndAddReservoirView( viewColl );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimEclipseView* RimEclipseCase::createAndAddReservoirView( RimEclipseViewCollection* viewColl )
{
if ( !viewColl ) return nullptr;
return viewColl->addView( this );

View File

@@ -68,6 +68,7 @@ public:
~RimEclipseCase() override;
std::vector<RimEclipseView*> reservoirViews() const;
RimEclipseViewCollection* viewCollection() const;
std::vector<QString> filesContainingFaults() const;
void setFilesContainingFaults( const std::vector<QString>& val );
@@ -92,6 +93,7 @@ public:
const RimReservoirCellResultsStorage* resultsStorage( RiaDefines::PorosityModelType porosityModel ) const;
RimEclipseView* createAndAddReservoirView( bool useGlobalViewCollection = false );
RimEclipseView* createAndAddReservoirView( RimEclipseViewCollection* viewColl );
RimEclipseView* createCopyAndAddView( const RimEclipseView* sourceView );
const RigVirtualPerforationTransmissibilities* computeAndGetVirtualPerforationTransmissibilities();
@@ -140,7 +142,6 @@ protected:
void computeCachedData();
void setReservoirData( RigEclipseCaseData* eclipseCase );
std::vector<QString> additionalFiles() const;
RimEclipseViewCollection* viewCollection() const;
RimEclipseViewCollection* globalViewCollection() const;
RimEclipseContourMapViewCollection* contourMapViewCollection() const;
void addViewsFromViewCollection( std::vector<RimEclipseView*>& views, const RimEclipseViewCollection* viewColl ) const;

View File

@@ -20,8 +20,8 @@
#include "RimCaseCollection.h"
#include "RimEclipseCase.h"
#include "RimEclipseCellColors.h"
#include "RimEclipseResultCase.h"
#include "RimEclipseView.h"
#include "RimEclipseViewCollection.h"
#include "cafPdmFieldScriptingCapability.h"
#include "cafPdmObjectScriptingCapability.h"
@@ -40,11 +40,15 @@ RimEclipseCaseEnsemble::RimEclipseCaseEnsemble()
m_groupId.capability<caf::PdmAbstractFieldScriptingCapability>()->setIOWriteable( false );
CAF_PDM_InitFieldNoDefault( &m_caseCollection, "CaseCollection", "Ensemble Cases" );
m_caseCollection = new RimCaseCollection;
m_caseCollection->uiCapability()->setUiName( "Cases" );
m_caseCollection->uiCapability()->setUiIconFromResourceString( ":/Cases16x16.png" );
CAF_PDM_InitFieldNoDefault( &m_selectedCase, "SelectedCase", "Selected Case" );
CAF_PDM_InitFieldNoDefault( &m_viewCollection, "ViewCollection", "Views" );
m_viewCollection = new RimEclipseViewCollection;
setDeletable( true );
}
@@ -55,6 +59,9 @@ RimEclipseCaseEnsemble::~RimEclipseCaseEnsemble()
{
delete m_caseCollection;
m_caseCollection = nullptr;
delete m_viewCollection;
m_viewCollection = nullptr;
}
//--------------------------------------------------------------------------------------------------
@@ -91,3 +98,72 @@ bool RimEclipseCaseEnsemble::contains( RimEclipseCase* reservoir ) const
return false;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RimEclipseCase*> RimEclipseCaseEnsemble::cases() const
{
return m_caseCollection->reservoirs.childrenByType();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipseCaseEnsemble::addView( RimEclipseView* view )
{
m_viewCollection->addView( view );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimEclipseView* RimEclipseCaseEnsemble::addViewForCase( RimEclipseCase* eclipseCase )
{
return m_viewCollection->addView( eclipseCase );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QList<caf::PdmOptionItemInfo> RimEclipseCaseEnsemble::calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions )
{
QList<caf::PdmOptionItemInfo> options;
if ( fieldNeedingOptions == &m_selectedCase )
{
for ( auto eclCase : cases() )
{
options.push_back( caf::PdmOptionItemInfo( eclCase->caseUserDescription(), eclCase, false, eclCase->uiIconProvider() ) );
}
return options;
}
return options;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipseCaseEnsemble::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
{
if ( changedField == &m_selectedCase )
{
for ( auto view : m_viewCollection->views() )
{
view->setEclipseCase( m_selectedCase() );
view->loadDataAndUpdate();
view->updateGridBoxData();
view->updateAnnotationItems();
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimEclipseViewCollection* RimEclipseCaseEnsemble::viewCollection() const
{
return m_viewCollection;
}

View File

@@ -20,11 +20,15 @@
#include "RimNamedObject.h"
#include "cafPdmChildArrayField.h"
#include "cafPdmChildField.h"
#include "cafPdmField.h"
#include "cafPdmPtrField.h"
class RimCaseCollection;
class RimEclipseCase;
class RimEclipseView;
class RimEclipseViewCollection;
//==================================================================================================
//
@@ -43,7 +47,20 @@ public:
void removeCase( RimEclipseCase* reservoir );
bool contains( RimEclipseCase* reservoir ) const;
std::vector<RimEclipseCase*> cases() const;
void addView( RimEclipseView* view );
RimEclipseView* addViewForCase( RimEclipseCase* eclipseCase );
RimEclipseViewCollection* viewCollection() const;
protected:
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
private:
caf::PdmField<int> m_groupId;
caf::PdmChildField<RimCaseCollection*> m_caseCollection;
caf::PdmField<int> m_groupId;
caf::PdmChildField<RimCaseCollection*> m_caseCollection;
caf::PdmChildField<RimEclipseViewCollection*> m_viewCollection;
caf::PdmPtrField<RimEclipseCase*> m_selectedCase;
};

View File

@@ -1004,7 +1004,7 @@ void RimEclipseStatisticsCase::computeStatisticsAndUpdateViews()
if ( reservoirViews().empty() )
{
RicNewViewFeature::addReservoirView( this, nullptr );
RicNewViewFeature::addReservoirView( this, nullptr, viewCollection() );
}
if ( reservoirViews().size() == 1 )

View File

@@ -1270,10 +1270,9 @@ QString RimEclipseView::createAutoName() const
}
QStringList generatedAutoTags;
if ( m_eclipseCase && nameConfig()->addCaseName() )
if ( nameConfig()->addCaseName() && ownerCase() )
{
generatedAutoTags.push_back( m_eclipseCase->caseUserDescription() );
generatedAutoTags.push_back( ownerCase()->caseUserDescription() );
}
if ( nameConfig()->addProperty() )