#11618 Add menu to create filter from existing polygons

This commit is contained in:
Magne Sjaastad
2024-08-15 12:15:12 +02:00
parent bf471b6c73
commit f561973319
5 changed files with 62 additions and 32 deletions

View File

@@ -42,6 +42,13 @@ CAF_CMD_SOURCE_INIT( RicNewPolygonFilterFeature, "RicNewPolygonFilterFeature" );
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RicNewPolygonFilterFeature::onActionTriggered( bool isChecked ) void RicNewPolygonFilterFeature::onActionTriggered( bool isChecked )
{ {
RimPolygon* polygonDataSource = nullptr;
QVariant userData = this->userData();
if ( !userData.isNull() && userData.canConvert<void*>() )
{
polygonDataSource = static_cast<RimPolygon*>( userData.value<void*>() );
}
auto cellFilterCollection = caf::SelectionManager::instance()->selectedItemOfType<RimCellFilterCollection>(); auto cellFilterCollection = caf::SelectionManager::instance()->selectedItemOfType<RimCellFilterCollection>();
if ( !cellFilterCollection ) if ( !cellFilterCollection )
@@ -55,19 +62,24 @@ void RicNewPolygonFilterFeature::onActionTriggered( bool isChecked )
if ( !cellFilterCollection ) return; if ( !cellFilterCollection ) return;
auto polygon = caf::SelectionManager::instance()->selectedItemOfType<RimPolygon>(); if ( !polygonDataSource )
if ( !polygon )
{ {
if ( auto polygonInView = caf::SelectionManager::instance()->selectedItemOfType<RimPolygonInView>() ) auto selectedPolygon = caf::SelectionManager::instance()->selectedItemOfType<RimPolygon>();
if ( !selectedPolygon )
{ {
polygon = polygonInView->polygon(); if ( auto polygonInView = caf::SelectionManager::instance()->selectedItemOfType<RimPolygonInView>() )
{
selectedPolygon = polygonInView->polygon();
}
} }
polygonDataSource = selectedPolygon;
} }
auto sourceCase = cellFilterCollection->firstAncestorOrThisOfTypeAsserted<Rim3dView>()->ownerCase(); auto sourceCase = cellFilterCollection->firstAncestorOrThisOfTypeAsserted<Rim3dView>()->ownerCase();
if ( sourceCase ) if ( sourceCase )
{ {
if ( auto lastCreatedOrUpdated = cellFilterCollection->addNewPolygonFilter( sourceCase, polygon ) ) if ( auto lastCreatedOrUpdated = cellFilterCollection->addNewPolygonFilter( sourceCase, polygonDataSource ) )
{ {
Riu3DMainWindowTools::selectAsCurrentItem( lastCreatedOrUpdated ); Riu3DMainWindowTools::selectAsCurrentItem( lastCreatedOrUpdated );
} }
@@ -80,5 +92,5 @@ void RicNewPolygonFilterFeature::onActionTriggered( bool isChecked )
void RicNewPolygonFilterFeature::setupActionLook( QAction* actionToSetup ) void RicNewPolygonFilterFeature::setupActionLook( QAction* actionToSetup )
{ {
actionToSetup->setIcon( QIcon( ":/CellFilter_Polygon.png" ) ); actionToSetup->setIcon( QIcon( ":/CellFilter_Polygon.png" ) );
actionToSetup->setText( "New Polygon Filter" ); actionToSetup->setText( "New User Defined Polygon Filter" );
} }

View File

@@ -23,6 +23,7 @@
#include "RimCellFilter.h" #include "RimCellFilter.h"
#include "RimCellIndexFilter.h" #include "RimCellIndexFilter.h"
#include "RimCellRangeFilter.h" #include "RimCellRangeFilter.h"
#include "RimOilField.h"
#include "RimPolygonFilter.h" #include "RimPolygonFilter.h"
#include "RimProject.h" #include "RimProject.h"
#include "RimUserDefinedFilter.h" #include "RimUserDefinedFilter.h"
@@ -30,6 +31,10 @@
#include "RimViewController.h" #include "RimViewController.h"
#include "RimViewLinker.h" #include "RimViewLinker.h"
#include "Polygons/RimPolygon.h"
#include "Polygons/RimPolygonCollection.h"
#include "cafCmdFeatureMenuBuilder.h"
#include "cafPdmFieldReorderCapability.h" #include "cafPdmFieldReorderCapability.h"
#include "cafPdmFieldScriptingCapability.h" #include "cafPdmFieldScriptingCapability.h"
#include "cafPdmObjectScriptingCapability.h" #include "cafPdmObjectScriptingCapability.h"
@@ -126,6 +131,41 @@ void RimCellFilterCollection::setCase( RimCase* theCase )
} }
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimCellFilterCollection::appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const
{
menuBuilder << "RicPasteCellFiltersFeature";
menuBuilder << "Separator";
menuBuilder.subMenuStart( "New Polygon Filter", QIcon( ":/CellFilter_Polygon.png" ) );
{
auto project = RimProject::current();
auto polygonCollection = project->activeOilField()->polygonCollection();
for ( auto p : polygonCollection->allPolygons() )
{
if ( !p ) continue;
menuBuilder.addCmdFeatureWithUserData( "RicNewPolygonFilterFeature", p->name(), QVariant::fromValue( static_cast<void*>( p ) ) );
}
}
menuBuilder.subMenuEnd();
menuBuilder << "RicNewPolygonFilterFeature";
menuBuilder << "Separator";
menuBuilder.subMenuStart( "Slice Filters" );
menuBuilder << "RicNewRangeFilterSliceIFeature";
menuBuilder << "RicNewRangeFilterSliceJFeature";
menuBuilder << "RicNewRangeFilterSliceKFeature";
menuBuilder.subMenuEnd();
menuBuilder << "RicNewCellRangeFilterFeature";
menuBuilder << "RicNewCellIndexFilterFeature";
menuBuilder << "Separator";
menuBuilder << "RicNewUserDefinedFilterFeature";
menuBuilder << "RicNewUserDefinedIndexFilterFeature";
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -93,6 +93,8 @@ public:
void setCase( RimCase* theCase ); void setCase( RimCase* theCase );
void appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const override;
protected: protected:
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;

View File

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

View File

@@ -37,8 +37,6 @@
#include "RimCalcScript.h" #include "RimCalcScript.h"
#include "RimCaseCollection.h" #include "RimCaseCollection.h"
#include "RimCellEdgeColors.h" #include "RimCellEdgeColors.h"
#include "RimCellFilterCollection.h"
#include "RimCellRangeFilter.h"
#include "RimColorLegend.h" #include "RimColorLegend.h"
#include "RimColorLegendCollection.h" #include "RimColorLegendCollection.h"
#include "RimColorLegendItem.h" #include "RimColorLegendItem.h"
@@ -51,14 +49,12 @@
#include "RimEclipseCaseCollection.h" #include "RimEclipseCaseCollection.h"
#include "RimEclipseCaseEnsemble.h" #include "RimEclipseCaseEnsemble.h"
#include "RimEclipseCellColors.h" #include "RimEclipseCellColors.h"
#include "RimEclipseContourMapView.h"
#include "RimEclipseContourMapViewCollection.h" #include "RimEclipseContourMapViewCollection.h"
#include "RimEclipseFaultColors.h" #include "RimEclipseFaultColors.h"
#include "RimEclipseInputProperty.h" #include "RimEclipseInputProperty.h"
#include "RimEclipsePropertyFilter.h" #include "RimEclipsePropertyFilter.h"
#include "RimEclipsePropertyFilterCollection.h" #include "RimEclipsePropertyFilterCollection.h"
#include "RimEclipseResultAddress.h" #include "RimEclipseResultAddress.h"
#include "RimEclipseResultCase.h"
#include "RimEclipseStatisticsCase.h" #include "RimEclipseStatisticsCase.h"
#include "RimEclipseView.h" #include "RimEclipseView.h"
#include "RimEclipseViewCollection.h" #include "RimEclipseViewCollection.h"
@@ -70,7 +66,6 @@
#include "RimEnsembleFractureStatisticsCollection.h" #include "RimEnsembleFractureStatisticsCollection.h"
#include "RimExtrudedCurveIntersection.h" #include "RimExtrudedCurveIntersection.h"
#include "RimFaultInView.h" #include "RimFaultInView.h"
#include "RimFaultInViewCollection.h"
#include "RimFaultReactivationModel.h" #include "RimFaultReactivationModel.h"
#include "RimFishbones.h" #include "RimFishbones.h"
#include "RimFishbonesCollection.h" #include "RimFishbonesCollection.h"
@@ -79,11 +74,9 @@
#include "RimFlowPlotCollection.h" #include "RimFlowPlotCollection.h"
#include "RimFormationNames.h" #include "RimFormationNames.h"
#include "RimFormationNamesCollection.h" #include "RimFormationNamesCollection.h"
#include "RimFractureTemplate.h"
#include "RimFractureTemplateCollection.h" #include "RimFractureTemplateCollection.h"
#include "RimGeoMechCase.h" #include "RimGeoMechCase.h"
#include "RimGeoMechCellColors.h" #include "RimGeoMechCellColors.h"
#include "RimGeoMechContourMapView.h"
#include "RimGeoMechContourMapViewCollection.h" #include "RimGeoMechContourMapViewCollection.h"
#include "RimGeoMechModels.h" #include "RimGeoMechModels.h"
#include "RimGeoMechPropertyFilter.h" #include "RimGeoMechPropertyFilter.h"
@@ -100,7 +93,6 @@
#include "RimIntersectionResultsDefinitionCollection.h" #include "RimIntersectionResultsDefinitionCollection.h"
#include "RimModeledWellPath.h" #include "RimModeledWellPath.h"
#include "RimMultiPlot.h" #include "RimMultiPlot.h"
#include "RimMultiPlotCollection.h"
#include "RimObservedSummaryData.h" #include "RimObservedSummaryData.h"
#include "RimOsduWellPath.h" #include "RimOsduWellPath.h"
#include "RimParameterResultCrossPlot.h" #include "RimParameterResultCrossPlot.h"
@@ -128,7 +120,6 @@
#include "RimStimPlanFractureTemplate.h" #include "RimStimPlanFractureTemplate.h"
#include "RimStimPlanModel.h" #include "RimStimPlanModel.h"
#include "RimStimPlanModelCollection.h" #include "RimStimPlanModelCollection.h"
#include "RimStimPlanModelPlot.h"
#include "RimStimPlanModelTemplate.h" #include "RimStimPlanModelTemplate.h"
#include "RimStimPlanModelTemplateCollection.h" #include "RimStimPlanModelTemplateCollection.h"
#include "RimStreamlineInViewCollection.h" #include "RimStreamlineInViewCollection.h"
@@ -1034,22 +1025,6 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection()
menuBuilder << "RicCopySurfaceFeature"; menuBuilder << "RicCopySurfaceFeature";
menuBuilder << "RicReloadSurfaceFeature"; menuBuilder << "RicReloadSurfaceFeature";
} }
else if ( dynamic_cast<RimCellFilterCollection*>( firstUiItem ) )
{
menuBuilder << "RicPasteCellFiltersFeature";
menuBuilder << "Separator";
menuBuilder << "RicNewPolygonFilterFeature";
menuBuilder << "RicNewCellRangeFilterFeature";
menuBuilder.subMenuStart( "Slice Filters" );
menuBuilder << "RicNewRangeFilterSliceIFeature";
menuBuilder << "RicNewRangeFilterSliceJFeature";
menuBuilder << "RicNewRangeFilterSliceKFeature";
menuBuilder.subMenuEnd();
menuBuilder << "RicNewCellIndexFilterFeature";
menuBuilder << "Separator";
menuBuilder << "RicNewUserDefinedFilterFeature";
menuBuilder << "RicNewUserDefinedIndexFilterFeature";
}
else if ( dynamic_cast<RimSeismicSectionCollection*>( firstUiItem ) ) else if ( dynamic_cast<RimSeismicSectionCollection*>( firstUiItem ) )
{ {
menuBuilder << "RicNewInlineSeismicSectionFeature"; menuBuilder << "RicNewInlineSeismicSectionFeature";