Support global and local views.

This commit is contained in:
Kristian Bendiksen
2024-04-12 12:43:16 +02:00
parent b5666c333a
commit 4f8c081669
6 changed files with 86 additions and 19 deletions

View File

@@ -23,8 +23,10 @@
#include "Rim3dView.h"
#include "RimEclipseCase.h"
#include "RimEclipseCaseTools.h"
#include "RimEclipseContourMapView.h"
#include "RimEclipseView.h"
#include "RimEclipseViewCollection.h"
#include "RimGeoMechCase.h"
#include "RimGeoMechView.h"
@@ -39,9 +41,9 @@ CAF_CMD_SOURCE_INIT( RicNewViewFeature, "RicNewViewFeature" );
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicNewViewFeature::addReservoirView( RimEclipseCase* eclipseCase, RimGeoMechCase* geomCase )
void RicNewViewFeature::addReservoirView( RimEclipseCase* eclipseCase, RimGeoMechCase* geomCase, bool useGlobalViewCollection )
{
Rim3dView* newView = createReservoirView( eclipseCase, geomCase );
Rim3dView* newView = createReservoirView( eclipseCase, geomCase, useGlobalViewCollection );
if ( newView )
{
@@ -58,7 +60,7 @@ void RicNewViewFeature::addReservoirView( RimEclipseCase* eclipseCase, RimGeoMec
bool RicNewViewFeature::isCommandEnabled() const
{
return selectedEclipseCase() != nullptr || selectedEclipseView() != nullptr || selectedGeoMechCase() != nullptr ||
selectedGeoMechView() != nullptr;
selectedGeoMechView() != nullptr || selectedEclipseViewCollection() != nullptr;
}
//--------------------------------------------------------------------------------------------------
@@ -76,7 +78,21 @@ void RicNewViewFeature::onActionTriggered( bool isChecked )
if ( geoMechView ) geomCase = geoMechView->geoMechCase();
if ( reservoirView ) eclipseCase = reservoirView->eclipseCase();
addReservoirView( eclipseCase, geomCase );
bool useGlobalViewCollection = false;
if ( selectedEclipseViewCollection() )
{
// Use global view collection if view collection is not descendant of Eclipse case.
useGlobalViewCollection = selectedEclipseViewCollection()->firstAncestorOrThisOfType<RimEclipseCase>() == nullptr;
if ( !eclipseCase )
{
auto eclipseCases = RimEclipseCaseTools::allEclipseGridCases();
if ( !eclipseCases.empty() )
{
eclipseCase = eclipseCases[0];
}
}
}
addReservoirView( eclipseCase, geomCase, useGlobalViewCollection );
}
//--------------------------------------------------------------------------------------------------
@@ -91,13 +107,13 @@ void RicNewViewFeature::setupActionLook( QAction* actionToSetup )
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
Rim3dView* RicNewViewFeature::createReservoirView( RimEclipseCase* eclipseCase, RimGeoMechCase* geomCase )
Rim3dView* RicNewViewFeature::createReservoirView( RimEclipseCase* eclipseCase, RimGeoMechCase* geomCase, bool useGlobalViewCollection )
{
RimGridView* insertedView = nullptr;
if ( eclipseCase )
{
insertedView = eclipseCase->createAndAddReservoirView();
insertedView = eclipseCase->createAndAddReservoirView( useGlobalViewCollection );
}
else if ( geomCase )
{
@@ -171,6 +187,17 @@ RimEclipseView* RicNewViewFeature::selectedEclipseView()
return nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimEclipseViewCollection* RicNewViewFeature::selectedEclipseViewCollection()
{
std::vector<RimEclipseViewCollection*> selection;
caf::SelectionManager::instance()->objectsByType( &selection );
if ( !selection.empty() ) return selection[0];
return nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -26,6 +26,7 @@ class RimEclipseView;
class RimGeoMechCase;
class RimGeoMechView;
class Rim3dView;
class RimEclipseViewCollection;
//==================================================================================================
///
@@ -35,7 +36,7 @@ class RicNewViewFeature : public caf::CmdFeature
CAF_CMD_HEADER_INIT;
public:
static void addReservoirView( RimEclipseCase* eclipseCase, RimGeoMechCase* geomCase );
static void addReservoirView( RimEclipseCase* eclipseCase, RimGeoMechCase* geomCase, bool useGlobalViewCollection = false );
protected:
bool isCommandEnabled() const override;
@@ -43,10 +44,11 @@ protected:
void setupActionLook( QAction* actionToSetup ) override;
private:
static Rim3dView* createReservoirView( RimEclipseCase* eclipseCase, RimGeoMechCase* geomCase );
static Rim3dView* createReservoirView( RimEclipseCase* eclipseCase, RimGeoMechCase* geomCase, bool useGlobalViewCollectin );
static RimEclipseCase* selectedEclipseCase();
static RimGeoMechCase* selectedGeoMechCase();
static RimEclipseView* selectedEclipseView();
static RimGeoMechView* selectedGeoMechView();
static RimEclipseViewCollection* selectedEclipseViewCollection();
};

View File

@@ -60,6 +60,7 @@
#include "RimEclipseResultCase.h"
#include "RimEclipseStatisticsCase.h"
#include "RimEclipseView.h"
#include "RimEclipseViewCollection.h"
#include "RimElasticProperties.h"
#include "RimEllipseFractureTemplate.h"
#include "RimEnsembleCurveFilterCollection.h"
@@ -282,6 +283,10 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection()
menuBuilder << "RicComputeStatisticsFeature";
menuBuilder << "Separator";
}
else if ( dynamic_cast<RimEclipseViewCollection*>( firstUiItem ) )
{
menuBuilder << "RicNewViewFeature";
}
else if ( dynamic_cast<RimEclipseCase*>( firstUiItem ) )
{
menuBuilder << "RicRenameCaseFeature";

View File

@@ -117,6 +117,9 @@ RimEclipseCase::RimEclipseCase()
m_resultAddressCollections.uiCapability()->setUiHidden( true );
m_resultAddressCollections.xmlCapability()->disableIO();
CAF_PDM_InitFieldNoDefault( &m_viewCollection, "ViewCollection", "Views" );
m_viewCollection = new RimEclipseViewCollection;
// Init
m_matrixModelResults = new RimReservoirCellResultsStorage;
@@ -136,6 +139,7 @@ RimEclipseCase::~RimEclipseCase()
delete m_matrixModelResults();
delete m_fractureModelResults();
delete m_inputPropertyCollection;
delete m_viewCollection;
RimProject* project = RimProject::current();
if ( project )
@@ -307,9 +311,9 @@ void RimEclipseCase::initAfterRead()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimEclipseView* RimEclipseCase::createAndAddReservoirView()
RimEclipseView* RimEclipseCase::createAndAddReservoirView( bool useGlobalViewCollection )
{
RimEclipseViewCollection* viewColl = viewCollection();
RimEclipseViewCollection* viewColl = useGlobalViewCollection ? globalViewCollection() : viewCollection();
if ( !viewColl ) return nullptr;
return viewColl->addView( this );
@@ -550,6 +554,11 @@ void RimEclipseCase::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrderin
{
if ( uiConfigName == "MainWindow.ProjectTree" )
{
for ( auto view : m_viewCollection->views() )
{
uiTreeOrdering.add( view );
}
if ( !m_2dIntersectionViewCollection->views().empty() )
{
uiTreeOrdering.add( &m_2dIntersectionViewCollection );
@@ -1195,6 +1204,14 @@ void RimEclipseCase::updateResultAddressCollection()
///
//--------------------------------------------------------------------------------------------------
RimEclipseViewCollection* RimEclipseCase::viewCollection() const
{
return m_viewCollection;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimEclipseViewCollection* RimEclipseCase::globalViewCollection() const
{
RimProject* project = RimProject::current();
if ( !project ) return nullptr;
@@ -1211,7 +1228,18 @@ RimEclipseViewCollection* RimEclipseCase::viewCollection() const
std::vector<RimEclipseView*> RimEclipseCase::reservoirViews() const
{
std::vector<RimEclipseView*> views;
if ( RimEclipseViewCollection* viewColl = viewCollection() )
addViewsFromViewCollection( views, viewCollection() );
addViewsFromViewCollection( views, globalViewCollection() );
return views;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipseCase::addViewsFromViewCollection( std::vector<RimEclipseView*>& views, const RimEclipseViewCollection* viewColl ) const
{
if ( viewColl )
{
for ( auto view : viewColl->views() )
{
@@ -1221,8 +1249,6 @@ std::vector<RimEclipseView*> RimEclipseCase::reservoirViews() const
}
}
}
return views;
}
//--------------------------------------------------------------------------------------------------

View File

@@ -91,7 +91,7 @@ public:
RimReservoirCellResultsStorage* resultsStorage( RiaDefines::PorosityModelType porosityModel );
const RimReservoirCellResultsStorage* resultsStorage( RiaDefines::PorosityModelType porosityModel ) const;
RimEclipseView* createAndAddReservoirView();
RimEclipseView* createAndAddReservoirView( bool useGlobalViewCollection = false );
RimEclipseView* createCopyAndAddView( const RimEclipseView* sourceView );
const RigVirtualPerforationTransmissibilities* computeAndGetVirtualPerforationTransmissibilities();
@@ -141,7 +141,9 @@ protected:
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;
private:
void createTimeStepFormatString();
@@ -168,6 +170,7 @@ private:
caf::PdmChildField<RimReservoirCellResultsStorage*> m_matrixModelResults;
caf::PdmChildField<RimReservoirCellResultsStorage*> m_fractureModelResults;
caf::PdmChildField<RimEclipseViewCollection*> m_viewCollection;
caf::PdmField<std::vector<caf::FilePath>> m_filesContainingFaults;

View File

@@ -19,6 +19,7 @@
#include "RimGridCollection.h"
#include "RimEclipseCase.h"
#include "RimEclipseView.h"
#include "RimGridView.h"
#include "RigMainGrid.h"
@@ -479,7 +480,10 @@ void RimGridCollection::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrde
//--------------------------------------------------------------------------------------------------
const RigMainGrid* RimGridCollection::mainEclipseGrid() const
{
auto eclipseCase = firstAncestorOrThisOfType<RimEclipseCase>();
RimEclipseView* gridView = firstAncestorOrThisOfType<RimEclipseView>();
if ( !gridView ) return nullptr;
auto eclipseCase = gridView->eclipseCase();
return eclipseCase ? eclipseCase->mainGrid() : nullptr;
}