#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.
This commit is contained in:
Kristian Bendiksen 2023-11-17 09:58:47 +01:00
parent 78544f5c70
commit d2d1929f18
3 changed files with 41 additions and 34 deletions

View File

@ -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*> Rim3dView::viewsUsingThisAsComparisonView()
{
if ( field->keyword() == m_comparisonView.keyword() )
{
Rim3dView* containingView = nullptr;
containingView = dynamic_cast<Rim3dView*>( field->ownerObject() );
Rim3dView* containingView = dynamic_cast<Rim3dView*>( field->ownerObject() );
if ( containingView && containingView->activeComparisonView() == this )
{
containingViews.insert( containingView );
@ -593,6 +594,32 @@ std::set<Rim3dView*> Rim3dView::viewsUsingThisAsComparisonView()
return containingViews;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<Rim3dView*> Rim3dView::validComparisonViews() const
{
auto isIntersectionView = []( const Rim3dView* view ) { return dynamic_cast<const Rim2dIntersectionView*>( view ) != nullptr; };
std::vector<Rim3dView*> views;
RimProject::current()->allViews( views );
std::vector<Rim3dView*> validComparisonViews;
for ( auto view : views )
{
if ( dynamic_cast<RimSeismicView*>( view ) ) continue;
bool isSameViewType = isIntersectionView( this ) == isIntersectionView( view );
if ( view != this && isSameViewType )
{
validComparisonViews.push_back( view );
}
}
return validComparisonViews;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -1518,21 +1545,13 @@ QList<caf::PdmOptionItemInfo> Rim3dView::calculateValueOptions( const caf::PdmFi
if ( fieldNeedingOptions == &m_comparisonView )
{
RimProject* proj = RimProject::current();
if ( proj )
std::vector<Rim3dView*> views = validComparisonViews();
for ( auto view : views )
{
std::vector<Rim3dView*> 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 )
{

View File

@ -183,11 +183,12 @@ public:
bool isScaleZEditable();
double scaleZ() const;
bool isMasterView() const;
Rim3dView* activeComparisonView() const;
void setComparisonView( Rim3dView* compView );
std::set<Rim3dView*> viewsUsingThisAsComparisonView();
void updateMdiWindowTitle() override;
bool isMasterView() const;
Rim3dView* activeComparisonView() const;
void setComparisonView( Rim3dView* compView );
std::set<Rim3dView*> viewsUsingThisAsComparisonView();
void updateMdiWindowTitle() override;
std::vector<Rim3dView*> validComparisonViews() const;
RimViewLinker* assosiatedViewLinker() const override;
RimViewController* viewController() const override;

View File

@ -167,20 +167,7 @@ void RiuViewerCommands::addCompareToViewMenu( caf::CmdFeatureMenuBuilder* menuBu
auto* mainGridView = m_reservoirView.p();
if ( mainGridView && !mainGridView->activeComparisonView() )
{
std::vector<Rim3dView*> validComparisonViews;
std::vector<Rim3dView*> views;
RimProject::current()->allViews( views );
for ( auto view : views )
{
if ( dynamic_cast<RimSeismicView*>( view ) ) continue;
if ( view != mainGridView )
{
validComparisonViews.push_back( view );
}
}
std::vector<Rim3dView*> validComparisonViews = mainGridView->validComparisonViews();
if ( !validComparisonViews.empty() )
{
menuBuilder->subMenuStart( "Compare To ...", QIcon( ":/ComparisonView16x16.png" ) );