From d2d1929f18c51f82776d5906c84e60e497231c74 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Fri, 17 Nov 2023 09:58:47 +0100 Subject: [PATCH] #10587 Improve filtering of comparable views. Filter views based on the content of the source view. The option to unsuccessfully compare 2D intersection views with 3D views is now removed. --- .../ProjectDataModel/Rim3dView.cpp | 49 +++++++++++++------ .../ProjectDataModel/Rim3dView.h | 11 +++-- .../UserInterface/RiuViewerCommands.cpp | 15 +----- 3 files changed, 41 insertions(+), 34 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp b/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp index 8f8de11b71..19f00ad9df 100644 --- a/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp +++ b/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp @@ -29,6 +29,7 @@ #include "RicfCommandObject.h" +#include "Rim2dIntersectionView.h" #include "Rim3dWellLogCurve.h" #include "RimAnnotationCollection.h" #include "RimAnnotationInViewCollection.h" @@ -40,6 +41,7 @@ #include "RimMeasurement.h" #include "RimOilField.h" #include "RimProject.h" +#include "RimSeismicView.h" #include "RimTools.h" #include "RimViewController.h" #include "RimViewLinker.h" @@ -581,8 +583,7 @@ std::set Rim3dView::viewsUsingThisAsComparisonView() { if ( field->keyword() == m_comparisonView.keyword() ) { - Rim3dView* containingView = nullptr; - containingView = dynamic_cast( field->ownerObject() ); + Rim3dView* containingView = dynamic_cast( field->ownerObject() ); if ( containingView && containingView->activeComparisonView() == this ) { containingViews.insert( containingView ); @@ -593,6 +594,32 @@ std::set Rim3dView::viewsUsingThisAsComparisonView() return containingViews; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector Rim3dView::validComparisonViews() const +{ + auto isIntersectionView = []( const Rim3dView* view ) { return dynamic_cast( view ) != nullptr; }; + + std::vector views; + RimProject::current()->allViews( views ); + + std::vector validComparisonViews; + for ( auto view : views ) + { + if ( dynamic_cast( view ) ) continue; + + bool isSameViewType = isIntersectionView( this ) == isIntersectionView( view ); + + if ( view != this && isSameViewType ) + { + validComparisonViews.push_back( view ); + } + } + + return validComparisonViews; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -1518,21 +1545,13 @@ QList Rim3dView::calculateValueOptions( const caf::PdmFi if ( fieldNeedingOptions == &m_comparisonView ) { - RimProject* proj = RimProject::current(); - if ( proj ) + std::vector views = validComparisonViews(); + for ( auto view : views ) { - std::vector views; - proj->allViews( views ); - for ( auto view : views ) - { - if ( view != this ) - { - RiaOptionItemFactory::appendOptionItemFromViewNameAndCaseName( view, &options ); - } - } - - options.push_front( caf::PdmOptionItemInfo( "None", nullptr ) ); + RiaOptionItemFactory::appendOptionItemFromViewNameAndCaseName( view, &options ); } + + options.push_front( caf::PdmOptionItemInfo( "None", nullptr ) ); } else if ( fieldNeedingOptions == &m_fontSize ) { diff --git a/ApplicationLibCode/ProjectDataModel/Rim3dView.h b/ApplicationLibCode/ProjectDataModel/Rim3dView.h index d27dbb01c8..c58b5daedd 100644 --- a/ApplicationLibCode/ProjectDataModel/Rim3dView.h +++ b/ApplicationLibCode/ProjectDataModel/Rim3dView.h @@ -183,11 +183,12 @@ class Rim3dView : public RimViewWindow, public RiuViewerToViewInterface, public bool isScaleZEditable(); double scaleZ() const; - bool isMasterView() const; - Rim3dView* activeComparisonView() const; - void setComparisonView( Rim3dView* compView ); - std::set viewsUsingThisAsComparisonView(); - void updateMdiWindowTitle() override; + bool isMasterView() const; + Rim3dView* activeComparisonView() const; + void setComparisonView( Rim3dView* compView ); + std::set viewsUsingThisAsComparisonView(); + void updateMdiWindowTitle() override; + std::vector validComparisonViews() const; RimViewLinker* assosiatedViewLinker() const override; RimViewController* viewController() const override; diff --git a/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp b/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp index aa1659bb75..37833f816a 100644 --- a/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp +++ b/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp @@ -167,20 +167,7 @@ void RiuViewerCommands::addCompareToViewMenu( caf::CmdFeatureMenuBuilder* menuBu auto* mainGridView = m_reservoirView.p(); if ( mainGridView && !mainGridView->activeComparisonView() ) { - std::vector validComparisonViews; - - std::vector views; - RimProject::current()->allViews( views ); - for ( auto view : views ) - { - if ( dynamic_cast( view ) ) continue; - - if ( view != mainGridView ) - { - validComparisonViews.push_back( view ); - } - } - + std::vector validComparisonViews = mainGridView->validComparisonViews(); if ( !validComparisonViews.empty() ) { menuBuilder->subMenuStart( "Compare To ...", QIcon( ":/ComparisonView16x16.png" ) );