Support linking of 2D intersection views

* Major refactor from RimGridView to Rim3dView
* Move view linker/controller functions to Rim3dView
* Add bitmask to define the content of a 3D view
* Link views based on matching content
* Enable bit mask operators at global scope
* Make it possible to use 2d intersection views as comparison views
* Fix crash when a view used as comparison view is deleted
* Move unlinking to Rim3dView

* Add options to snapshot only 3D views/plots as part of regression testing
* WBS plot: Improve default name, hide axis for some tracks
This commit is contained in:
Magne Sjaastad
2022-11-24 10:46:54 +01:00
committed by GitHub
parent 99e9944e6e
commit 82968ca1a9
42 changed files with 609 additions and 418 deletions

View File

@@ -95,8 +95,8 @@ RimViewController::RimViewController()
RimViewController::~RimViewController()
{
this->removeOverrides();
RimGridView* managedView = m_managedView;
m_managedView = nullptr;
auto managedView = m_managedView();
m_managedView = nullptr;
if ( managedView ) managedView->updateAutoName();
}
@@ -110,8 +110,8 @@ QList<caf::PdmOptionItemInfo> RimViewController::calculateValueOptions( const ca
if ( fieldNeedingOptions == &m_managedView )
{
RimProject* proj = RimProject::current();
std::vector<RimGridView*> views;
RimProject* proj = RimProject::current();
std::vector<Rim3dView*> views;
proj->allNotLinkedViews( views );
// Add currently linked view to list
@@ -124,7 +124,7 @@ QList<caf::PdmOptionItemInfo> RimViewController::calculateValueOptions( const ca
this->firstAncestorOrThisOfType( viewLinker );
CVF_ASSERT( viewLinker );
for ( RimGridView* view : views )
for ( auto view : views )
{
if ( view != viewLinker->masterView() )
{
@@ -221,8 +221,6 @@ void RimViewController::fieldChangedByUi( const caf::PdmFieldHandle* changedFiel
auto* previousManagedView = dynamic_cast<RimGridView*>( prevValue );
RimViewController::removeOverrides( previousManagedView );
ownerViewLinker()->notifyManagedViewChange( previousManagedView, m_managedView() );
setManagedView( m_managedView() );
m_name.uiCapability()->updateConnectedEditors();
@@ -239,9 +237,7 @@ void RimViewController::fieldChangedByUi( const caf::PdmFieldHandle* changedFiel
//--------------------------------------------------------------------------------------------------
RimEclipseView* RimViewController::managedEclipseView() const
{
RimGridView* rimView = m_managedView;
return dynamic_cast<RimEclipseView*>( rimView );
return dynamic_cast<RimEclipseView*>( m_managedView() );
}
//--------------------------------------------------------------------------------------------------
@@ -249,9 +245,7 @@ RimEclipseView* RimViewController::managedEclipseView() const
//--------------------------------------------------------------------------------------------------
RimGeoMechView* RimViewController::managedGeoView() const
{
RimGridView* rimView = m_managedView;
return dynamic_cast<RimGeoMechView*>( rimView );
return dynamic_cast<RimGeoMechView*>( m_managedView() );
}
//--------------------------------------------------------------------------------------------------
@@ -261,7 +255,7 @@ void RimViewController::updateOverrides()
{
RimViewLinker* viewLinker = ownerViewLinker();
RimGridView* masterView = viewLinker->masterView();
auto masterView = viewLinker->masterView();
CVF_ASSERT( masterView );
@@ -332,7 +326,7 @@ void RimViewController::updateOverrides()
//--------------------------------------------------------------------------------------------------
void RimViewController::removeOverrides()
{
removeOverrides( m_managedView );
removeOverrides( dynamic_cast<RimGridView*>( m_managedView() ) );
RimEclipseView* manEclView = managedEclipseView();
RimGeoMechView* manGeoView = managedGeoView();
@@ -369,7 +363,7 @@ void RimViewController::removeOverrides( RimGridView* view )
//--------------------------------------------------------------------------------------------------
void RimViewController::updateOptionSensitivity()
{
RimGridView* mainView = nullptr;
Rim3dView* mainView = nullptr;
{
RimViewLinker* linkedViews = nullptr;
@@ -445,7 +439,7 @@ void RimViewController::updateOptionSensitivity()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimGridView* RimViewController::managedView() const
Rim3dView* RimViewController::managedView() const
{
return m_managedView;
}
@@ -453,13 +447,8 @@ RimGridView* RimViewController::managedView() const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimViewController::setManagedView( RimGridView* view )
void RimViewController::setManagedView( Rim3dView* view )
{
if ( m_managedView != view )
{
ownerViewLinker()->notifyManagedViewChange( m_managedView(), view );
}
m_managedView = view;
updateOptionSensitivity();
@@ -648,7 +637,7 @@ const RigCaseToCaseCellMapper* RimViewController::cellMapper()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimGridView* RimViewController::masterView() const
Rim3dView* RimViewController::masterView() const
{
return ownerViewLinker()->masterView();
}
@@ -692,7 +681,8 @@ void RimViewController::scheduleCreateDisplayModelAndRedrawForDependentView() co
if ( this->isResultColorControlled() && this->managedView() )
{
this->managedView()->intersectionCollection()->scheduleCreateDisplayModelAndRedraw2dIntersectionViews();
auto gridView = dynamic_cast<RimGridView*>( this->managedView() );
if ( gridView ) gridView->intersectionCollection()->scheduleCreateDisplayModelAndRedraw2dIntersectionViews();
}
}
@@ -930,16 +920,19 @@ bool RimViewController::isPropertyFilterOveridden() const
//--------------------------------------------------------------------------------------------------
void RimViewController::updateCellFilterOverrides( const RimCellFilter* changedFilter )
{
if ( !m_managedView ) return;
auto controlledGridView = dynamic_cast<RimGridView*>( m_managedView() );
if ( !controlledGridView ) return;
if ( !isCellFiltersControlled() )
{
m_managedView->setOverrideCellFilterCollection( nullptr );
controlledGridView->setOverrideCellFilterCollection( nullptr );
return;
}
// Copy the rangeFilterCollection
auto masterGridView = dynamic_cast<RimGridView*>( masterView() );
if ( !masterGridView ) return;
RimCellFilterCollection* sourceFilterCollection = masterView()->cellFilterCollection();
RimCellFilterCollection* sourceFilterCollection = masterGridView->cellFilterCollection();
QString xmlFilterCollCopy = sourceFilterCollection->writeObjectToXmlString();
PdmObjectHandle* objectCopy =
PdmXmlObjectHandle::readUnknownObjectFromXmlString( xmlFilterCollCopy,
@@ -1041,7 +1034,7 @@ void RimViewController::updateCellFilterOverrides( const RimCellFilter* changedF
}
}
m_managedView->setOverrideCellFilterCollection( overrideFilterColl );
controlledGridView->setOverrideCellFilterCollection( overrideFilterColl );
}
//--------------------------------------------------------------------------------------------------
@@ -1057,33 +1050,33 @@ void RimViewController::updatePropertyFilterOverrides( RimPropertyFilter* change
//--------------------------------------------------------------------------------------------------
void RimViewController::applyCellFilterCollectionByUserChoice()
{
if ( !m_managedView ) return;
auto managedGridView = dynamic_cast<RimGridView*>( m_managedView() );
if ( !m_managedView->hasOverriddenCellFilterCollection() )
if ( !managedGridView ) return;
if ( !managedGridView->hasOverriddenCellFilterCollection() )
{
return;
}
RimViewLinker* viewLinker = ownerViewLinker();
RimGridView* masterView = viewLinker->masterView();
auto* masterView = dynamic_cast<RimGridView*>( viewLinker->masterView() );
bool restoreOriginal = true;
bool anyActiveFilter = false;
bool anyActiveFilter = !masterView->cellFilterCollection()->filters().empty() ||
masterView->propertyFilterCollection()->hasActiveFilters();
if ( anyActiveFilter )
if ( masterView )
{
restoreOriginal = askUserToRestoreOriginalCellFilterCollection( m_managedView->name() );
anyActiveFilter = !masterView->cellFilterCollection()->filters().empty() ||
masterView->propertyFilterCollection()->hasActiveFilters();
}
if ( restoreOriginal )
if ( anyActiveFilter && askUserToRestoreOriginalCellFilterCollection( m_managedView->name() ) )
{
m_managedView->setOverrideCellFilterCollection( nullptr );
managedGridView->setOverrideCellFilterCollection( nullptr );
}
else
{
m_managedView->replaceCellFilterCollectionWithOverride();
managedGridView->replaceCellFilterCollectionWithOverride();
}
}