#11357 Reorganize menu in 3D view

Simplify menu text for range filter
Reorganize to improve readability
Simplify cell filter menu in Project Tree
This commit is contained in:
Magne Sjaastad 2024-09-16 09:26:25 +02:00 committed by Kristian Bendiksen
parent 9d66e6195e
commit 89bd3a8c90
11 changed files with 72 additions and 63 deletions

View File

@ -26,6 +26,6 @@ CAF_CMD_SOURCE_INIT( RicNewCellRangeFilterFeature, "RicNewCellRangeFilterFeature
///
//--------------------------------------------------------------------------------------------------
RicNewCellRangeFilterFeature::RicNewCellRangeFilterFeature()
: RicNewRangeFilterSliceFeature( "New Range Filter", -1 )
: RicNewRangeFilterSliceFeature( "IJK Filter", -1 )
{
}

View File

@ -92,5 +92,5 @@ void RicNewPolygonFilterFeature::onActionTriggered( bool isChecked )
void RicNewPolygonFilterFeature::setupActionLook( QAction* actionToSetup )
{
actionToSetup->setIcon( QIcon( ":/CellFilter_Polygon.png" ) );
actionToSetup->setText( "New User Defined Polygon Filter" );
actionToSetup->setText( "User Defined Polygon Filter" );
}

View File

@ -18,10 +18,13 @@
#include "RicNewRangeFilterSliceFeature.h"
#include "RiaApplication.h"
#include "Rim3dView.h"
#include "RimCase.h"
#include "RimCellFilterCollection.h"
#include "RimCellRangeFilter.h"
#include "RimGridView.h"
#include "Riu3DMainWindowTools.h"
@ -41,18 +44,31 @@ RicNewRangeFilterSliceFeature::RicNewRangeFilterSliceFeature( QString cmdText, i
//--------------------------------------------------------------------------------------------------
void RicNewRangeFilterSliceFeature::onActionTriggered( bool isChecked )
{
// Find the selected Cell Filter Collection
RimCellFilterCollection* filterCollection = nullptr;
RimCase* sourceCase = nullptr;
std::vector<RimCellFilterCollection*> colls = caf::selectedObjectsByTypeStrict<RimCellFilterCollection*>();
if ( colls.empty() ) return;
RimCellFilterCollection* filtColl = colls[0];
if ( !colls.empty() )
{
filterCollection = colls.front();
sourceCase = filterCollection->firstAncestorOrThisOfTypeAsserted<Rim3dView>()->ownerCase();
}
// and the case to use
RimCase* sourceCase = filtColl->firstAncestorOrThisOfTypeAsserted<Rim3dView>()->ownerCase();
if ( !filterCollection )
{
// Find filter collection for active view
if ( sourceCase )
RimGridView* viewOrComparisonView = RiaApplication::instance()->activeMainOrComparisonGridView();
if ( !viewOrComparisonView ) return;
filterCollection = viewOrComparisonView->cellFilterCollection();
sourceCase = viewOrComparisonView->ownerCase();
}
if ( sourceCase && filterCollection )
{
int gridIndex = 0;
RimCellFilter* lastCreatedOrUpdated = filtColl->addNewCellRangeFilter( sourceCase, gridIndex, m_sliceDirection );
RimCellFilter* lastCreatedOrUpdated = filterCollection->addNewCellRangeFilter( sourceCase, gridIndex, m_sliceDirection );
if ( lastCreatedOrUpdated )
{
Riu3DMainWindowTools::selectAsCurrentItem( lastCreatedOrUpdated );

View File

@ -26,6 +26,6 @@ CAF_CMD_SOURCE_INIT( RicNewRangeFilterSliceIFeature, "RicNewRangeFilterSliceIFea
///
//--------------------------------------------------------------------------------------------------
RicNewRangeFilterSliceIFeature::RicNewRangeFilterSliceIFeature()
: RicNewRangeFilterSliceFeature( "New Range Filter - I slice", 0 )
: RicNewRangeFilterSliceFeature( "I Slice", 0 )
{
}

View File

@ -26,6 +26,6 @@ CAF_CMD_SOURCE_INIT( RicNewRangeFilterSliceJFeature, "RicNewRangeFilterSliceJFea
///
//--------------------------------------------------------------------------------------------------
RicNewRangeFilterSliceJFeature::RicNewRangeFilterSliceJFeature()
: RicNewRangeFilterSliceFeature( "New Range Filter - J slice", 1 )
: RicNewRangeFilterSliceFeature( "J Slice", 1 )
{
}

View File

@ -26,6 +26,6 @@ CAF_CMD_SOURCE_INIT( RicNewRangeFilterSliceKFeature, "RicNewRangeFilterSliceKFea
///
//--------------------------------------------------------------------------------------------------
RicNewRangeFilterSliceKFeature::RicNewRangeFilterSliceKFeature()
: RicNewRangeFilterSliceFeature( "New Range Filter - K slice", 2 )
: RicNewRangeFilterSliceFeature( "K Slice", 2 )
{
}

View File

@ -61,5 +61,5 @@ void RicNewUserDefinedFilterFeature::onActionTriggered( bool isChecked )
void RicNewUserDefinedFilterFeature::setupActionLook( QAction* actionToSetup )
{
actionToSetup->setIcon( QIcon( ":/CellFilter_UserDefined.png" ) );
actionToSetup->setText( "New User Defined IJK Filter" );
actionToSetup->setText( "User Defined IJK Filter" );
}

View File

@ -61,5 +61,5 @@ void RicNewUserDefinedIndexFilterFeature::onActionTriggered( bool isChecked )
void RicNewUserDefinedIndexFilterFeature::setupActionLook( QAction* actionToSetup )
{
actionToSetup->setIcon( QIcon( ":/CellFilter_UserDefined.png" ) );
actionToSetup->setText( "New User Defined Index Filter" );
actionToSetup->setText( "User Defined Index Filter" );
}

View File

@ -139,7 +139,7 @@ void RimCellFilterCollection::appendMenuItems( caf::CmdFeatureMenuBuilder& menuB
menuBuilder << "RicPasteCellFiltersFeature";
menuBuilder << "Separator";
menuBuilder.subMenuStart( "New Polygon Filter", QIcon( ":/CellFilter_Polygon.png" ) );
menuBuilder.subMenuStart( "Polygon Filter", QIcon( ":/CellFilter_Polygon.png" ) );
{
auto project = RimProject::current();
auto polygonCollection = project->activeOilField()->polygonCollection();
@ -154,12 +154,12 @@ void RimCellFilterCollection::appendMenuItems( caf::CmdFeatureMenuBuilder& menuB
menuBuilder << "RicNewPolygonFilterFeature";
menuBuilder << "Separator";
menuBuilder.subMenuStart( "Slice Filters" );
menuBuilder.subMenuStart( "Range Filter" );
menuBuilder << "RicNewRangeFilterSliceIFeature";
menuBuilder << "RicNewRangeFilterSliceJFeature";
menuBuilder << "RicNewRangeFilterSliceKFeature";
menuBuilder.subMenuEnd();
menuBuilder << "RicNewCellRangeFilterFeature";
menuBuilder.subMenuEnd();
menuBuilder << "RicNewCellIndexFilterFeature";
menuBuilder << "Separator";
menuBuilder << "RicNewUserDefinedFilterFeature";

View File

@ -250,7 +250,7 @@ void RimPolygon::onColorTagClicked( const SignalEmitter* emitter, size_t index )
void RimPolygon::appendPolygonMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder )
{
menuBuilder << "RicNewPolygonIntersectionFeature";
menuBuilder.addCmdFeature( "RicNewPolygonFilterFeature", "New Polygon Filter" );
menuBuilder.addCmdFeature( "RicNewPolygonFilterFeature", "Create Polygon Filter" );
menuBuilder << "Separator";
menuBuilder << "RicDuplicatePolygonFeature";

View File

@ -162,6 +162,9 @@ void RiuViewerCommands::setOwnerView( Rim3dView* owner )
m_reservoirView = owner;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuViewerCommands::addCompareToViewMenu( caf::CmdFeatureMenuBuilder* menuBuilder )
{
auto* mainGridView = m_reservoirView.p();
@ -266,18 +269,11 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event )
if ( firstHitPart && firstPartTriangleIndex != cvf::UNDEFINED_UINT )
{
const RivSourceInfo* rivSourceInfo = dynamic_cast<const RivSourceInfo*>( firstHitPart->sourceInfo() );
const RivFemPickSourceInfo* femSourceInfo = dynamic_cast<const RivFemPickSourceInfo*>( firstHitPart->sourceInfo() );
const RivReservoirSurfaceIntersectionSourceInfo* surfIntersectSourceInfo =
dynamic_cast<const RivReservoirSurfaceIntersectionSourceInfo*>( firstHitPart->sourceInfo() );
const RivExtrudedCurveIntersectionSourceInfo* crossSectionSourceInfo =
dynamic_cast<const RivExtrudedCurveIntersectionSourceInfo*>( firstHitPart->sourceInfo() );
const RivBoxIntersectionSourceInfo* intersectionBoxSourceInfo =
dynamic_cast<const RivBoxIntersectionSourceInfo*>( firstHitPart->sourceInfo() );
const auto* rivSourceInfo = dynamic_cast<const RivSourceInfo*>( firstHitPart->sourceInfo() );
const auto* femSourceInfo = dynamic_cast<const RivFemPickSourceInfo*>( firstHitPart->sourceInfo() );
const auto* surfIntersectSourceInfo = dynamic_cast<const RivReservoirSurfaceIntersectionSourceInfo*>( firstHitPart->sourceInfo() );
const auto* crossSectionSourceInfo = dynamic_cast<const RivExtrudedCurveIntersectionSourceInfo*>( firstHitPart->sourceInfo() );
const auto* intersectionBoxSourceInfo = dynamic_cast<const RivBoxIntersectionSourceInfo*>( firstHitPart->sourceInfo() );
if ( rivSourceInfo || femSourceInfo || crossSectionSourceInfo || intersectionBoxSourceInfo || surfIntersectSourceInfo )
{
@ -308,12 +304,6 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event )
RiuSelectionItem* selItem = new RiuGeneralSelectionItem( surfIntersectSourceInfo->intersection() );
Riu3dSelectionManager::instance()->setSelectedItem( selItem, Riu3dSelectionManager::RUI_TEMPORARY );
if ( gridView )
{
// menuBuilder << "RicHideSurfaceFeature"; // Not yet created...
// menuBuilder.addSeparator();
}
}
else if ( crossSectionSourceInfo )
{
@ -383,21 +373,23 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event )
kSliceList.push_back( std::max( static_cast<int>( k + 1 ), 1 ) );
kSliceList.push_back( static_cast<int>( m_currentGridIdx ) );
menuBuilder.subMenuStart( "Range Filter Slice", QIcon( ":/CellFilter_Range.png" ) );
menuBuilder.subMenuStart( "Range Filter", QIcon( ":/CellFilter_Range.png" ) );
menuBuilder.addCmdFeatureWithUserData( "RicNewRangeFilterSlice3dviewFeature", "I-slice Range Filter", iSliceList );
menuBuilder.addCmdFeatureWithUserData( "RicNewRangeFilterSlice3dviewFeature", "J-slice Range Filter", jSliceList );
menuBuilder.addCmdFeatureWithUserData( "RicNewRangeFilterSlice3dviewFeature", "K-slice Range Filter", kSliceList );
menuBuilder.addCmdFeatureWithUserData( "RicNewRangeFilterSlice3dviewFeature", "I Slice", iSliceList );
menuBuilder.addCmdFeatureWithUserData( "RicNewRangeFilterSlice3dviewFeature", "J Slice", jSliceList );
menuBuilder.addCmdFeatureWithUserData( "RicNewRangeFilterSlice3dviewFeature", "K Slice", kSliceList );
menuBuilder.addCmdFeature( "RicNewCellRangeFilterFeature", "IJK Filter" );
menuBuilder.subMenuEnd();
}
menuBuilder << "RicNewPolygonFilter3dviewFeature";
menuBuilder.addCmdFeature( "RicCreatePolygonFeature", "Polygon" );
// Property filter commands
menuBuilder << "RicEclipsePropertyFilterNewInViewFeature";
menuBuilder << "RicGeoMechPropertyFilterNewInViewFeature";
// Polygon commands
menuBuilder << "RicNewPolygonFilter3dviewFeature";
menuBuilder.addSeparator();
menuBuilder.subMenuStart( "Intersections", QIcon( ":/IntersectionXPlane16x16.png" ) );
@ -446,14 +438,15 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event )
menuBuilder << "RicToggleMeasurementModeFeature";
menuBuilder << "RicTogglePolyMeasurementModeFeature";
menuBuilder.addCmdFeature( "RicCreatePolygonFeature", "Polygon" );
}
}
// Well log curve creation commands
if ( firstHitPart && firstHitPart->sourceInfo() )
{
RimWellPath* wellPath = nullptr;
const RivWellPathSourceInfo* wellPathSourceInfo = dynamic_cast<const RivWellPathSourceInfo*>( firstHitPart->sourceInfo() );
RimWellPath* wellPath = nullptr;
const auto* wellPathSourceInfo = dynamic_cast<const RivWellPathSourceInfo*>( firstHitPart->sourceInfo() );
if ( wellPathSourceInfo )
{
wellPath = wellPathSourceInfo->wellPath();
@ -540,7 +533,7 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event )
menuBuilder << "RicDuplicateWellPathFeature";
}
const RivSimWellPipeSourceInfo* eclipseWellSourceInfo = dynamic_cast<const RivSimWellPipeSourceInfo*>( firstHitPart->sourceInfo() );
const auto* eclipseWellSourceInfo = dynamic_cast<const RivSimWellPipeSourceInfo*>( firstHitPart->sourceInfo() );
if ( eclipseWellSourceInfo )
{
RimSimWellInView* well = eclipseWellSourceInfo->well();
@ -597,11 +590,6 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event )
menuBuilder << "RicSelectColorResult";
}
}
else
{
menuBuilder.addSeparator();
menuBuilder << "RicCreateTextAnnotationIn3dViewFeature";
}
if ( gridView )
{
@ -613,19 +601,27 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event )
menuBuilder << "RicCreateGridCrossPlotFeature";
}
menuBuilder.addSeparator();
menuBuilder.subMenuStart( "Export" );
menuBuilder << "RicExportEclipseInputGridFeature";
menuBuilder << "RicSaveEclipseInputActiveVisibleCellsFeature";
menuBuilder << "RicSaveEclipseResultAsInputPropertyFeature";
menuBuilder << "RicExportContourMapToTextFeature";
menuBuilder.subMenuEnd();
menuBuilder.addSeparator();
#ifdef USE_QTCHARTS
menuBuilder << "RicCreateGridStatisticsPlotFeature";
#endif
menuBuilder << "RicShowGridStatisticsFeature";
menuBuilder << "RicSelectColorResult";
menuBuilder << "RicCopyGridStatisticsToClipboardFeature";
menuBuilder << "RicSelectColorResult";
}
menuBuilder << "RicExportContourMapToTextFeature";
if ( firstHitPart )
{
menuBuilder.addSeparator();
menuBuilder << "RicCreateTextAnnotationIn3dViewFeature";
}
menuBuilder.appendToMenu( &menu );
@ -719,12 +715,10 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard
if ( firstHitPart && firstHitPart->sourceInfo() )
{
// clang-format off
const RivObjectSourceInfo* rivObjectSourceInfo = dynamic_cast<const RivObjectSourceInfo*>( firstHitPart->sourceInfo() );
const RivSimWellPipeSourceInfo* eclipseWellSourceInfo = dynamic_cast<const RivSimWellPipeSourceInfo*>( firstHitPart->sourceInfo() );
const RivWellConnectionSourceInfo* wellConnectionSourceInfo = dynamic_cast<const RivWellConnectionSourceInfo*>( firstHitPart->sourceInfo() );
const RivSeismicSectionSourceInfo* seismicSourceInfo = dynamic_cast<const RivSeismicSectionSourceInfo*>(firstHitPart->sourceInfo());
// clang-format on
const auto* rivObjectSourceInfo = dynamic_cast<const RivObjectSourceInfo*>( firstHitPart->sourceInfo() );
const auto* eclipseWellSourceInfo = dynamic_cast<const RivSimWellPipeSourceInfo*>( firstHitPart->sourceInfo() );
const auto* wellConnectionSourceInfo = dynamic_cast<const RivWellConnectionSourceInfo*>( firstHitPart->sourceInfo() );
const auto* seismicSourceInfo = dynamic_cast<const RivSeismicSectionSourceInfo*>( firstHitPart->sourceInfo() );
if ( rivObjectSourceInfo )
{
@ -813,21 +807,20 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard
RiuMainWindow::instance()->setResultInfo( resultInfoText );
}
}
else if ( const RivReservoirSurfaceIntersectionSourceInfo* surfIntersectSourceInfo =
else if ( const auto* surfIntersectSourceInfo =
dynamic_cast<const RivReservoirSurfaceIntersectionSourceInfo*>( firstHitPart->sourceInfo() ) )
{
RiuMainWindow::instance()->selectAsCurrentItem( surfIntersectSourceInfo->intersection() );
}
else if ( const RivExtrudedCurveIntersectionSourceInfo* crossSectionSourceInfo =
else if ( const auto* crossSectionSourceInfo =
dynamic_cast<const RivExtrudedCurveIntersectionSourceInfo*>( firstHitPart->sourceInfo() ) )
{
bool allowActiveViewChange = dynamic_cast<Rim2dIntersectionView*>( m_viewer->ownerViewWindow() ) == nullptr;
RiuMainWindow::instance()->selectAsCurrentItem( crossSectionSourceInfo->intersection(), allowActiveViewChange );
}
else if ( const RivBoxIntersectionSourceInfo* intersectionBoxSourceInfo =
dynamic_cast<const RivBoxIntersectionSourceInfo*>( firstHitPart->sourceInfo() ) )
else if ( const auto* intersectionBoxSourceInfo = dynamic_cast<const RivBoxIntersectionSourceInfo*>( firstHitPart->sourceInfo() ) )
{
RiuMainWindow::instance()->selectAsCurrentItem( intersectionBoxSourceInfo->intersectionBox() );
}