Create a menu for each ensemble in the plot

Create a QVariant using caf::PdmPointer, and send this variant to the feature. The feature converts the QVariant to an ensemble curve set.

Make sure the right-click menu in the summary plot shows the Create from filtered cases independent to the selection in project tree.
This commit is contained in:
Magne Sjaastad committed 2025-05-08 07:27:42 +02:00
1 parent a93d717e1c
commit 9b613ba4f0
3 files changed
+42 -3

No files matched your search

@@ -30,6 +30,7 @@
#include "RimSummaryCase.h"
#include "RimSummaryEnsemble.h"
#include "cafPdmPointer.h"
#include "cafSelectionManager.h"
#include "cafSelectionManagerTools.h"
@@ -54,7 +55,17 @@ RimParameterResultCrossPlot* selectedCrossPlot()
RimEnsembleCurveSet* ensembleCurveSet()
{
return caf::firstAncestorOfTypeFromSelectedObject<RimEnsembleCurveSet>();
auto ancestor = caf::firstAncestorOfTypeFromSelectedObject<RimEnsembleCurveSet>();
if ( ancestor != nullptr ) return ancestor;
auto selectedObject = caf::SelectionManager::instance()->selectedItemOfType<caf::PdmObject>();
if ( selectedObject != nullptr )
{
auto ensembleCurveSet = selectedObject->descendantsIncludingThisOfType<RimEnsembleCurveSet>();
if ( !ensembleCurveSet.empty() ) return ensembleCurveSet.front();
}
return nullptr;
}
} // namespace internal
@@ -92,6 +103,21 @@ void RicCreateEnsembleFromFilteredCasesFeature::onActionTriggered( bool isChecke
}
}
if ( casesForNewEnsemble.empty() )
{
QVariant userData = this->userData();
if ( !userData.isNull() && userData.canConvert<caf::PdmPointer<RimEnsembleCurveSet>>() )
{
if ( auto ensembleCurveSet = userData.value<caf::PdmPointer<RimEnsembleCurveSet>>() )
{
if ( auto ensemble = ensembleCurveSet->summaryEnsemble() )
{
casesForNewEnsemble = ensembleCurveSet->filterEnsembleCases( ensemble->allSummaryCases() );
}
}
}
}
if ( casesForNewEnsemble.empty() )
{
if ( auto curveSet = internal::ensembleCurveSet() )
@@ -328,7 +328,11 @@ void RimEnsembleCurveSetCollection::onChildDeleted( caf::PdmChildArrayFieldHandl
std::vector<caf::PdmObjectHandle*>& referringObjects )
{
auto plot = firstAncestorOrThisOfType<RimSummaryPlot>();
if ( plot ) plot->updateConnectedEditors();
if ( plot )
{
plot->updateConnectedEditors();
plot->updateAndRedrawTimeAnnotations();
}
}
//--------------------------------------------------------------------------------------------------
@@ -72,7 +72,16 @@ void RiuSummaryPlot::showContextMenu( QPoint pos )
menuBuilder.addSeparator();
menuBuilder.addCmdFeatureWithUserData( "RicDeleteSubPlotCtxFeature", "Delete Plot", plotVariant );
menuBuilder.addSeparator();
menuBuilder.addCmdFeature( "RicCreateEnsembleFromFilteredCasesFeature" );
for ( auto curveSet : plot->curveSets() )
{
if ( curveSet->isFiltered() )
{
auto curveSetVariant = QVariant::fromValue( caf::PdmPointer<RimEnsembleCurveSet>( curveSet ) );
auto name = "Create Ensemble from Filtered Cases: " + curveSet->name();
menuBuilder.addCmdFeatureWithUserData( "RicCreateEnsembleFromFilteredCasesFeature", name, curveSetVariant );
}
}
}
menuBuilder.addSeparator();