From d6437b285728f188b4846c2496a73c9fe692a45f Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 14 Feb 2025 07:19:26 +0100 Subject: [PATCH] Refactor Rim classes and update selection handling Refactored RimAutomationSettings to replace cellSelectionDestination with summaryPlots and updated related methods and fields. Enhanced RimGridTimeHistoryCurve with updateResultDefinition parameter. Updated RiuSelectionChangedHandler to handle grid cell curve updates and removed obsolete references. Included necessary headers and forward declarations. --- .../RimGridTimeHistoryCurve.cpp | 18 ++-- .../RimGridTimeHistoryCurve.h | 2 +- .../Tools/RimAutomationSettings.cpp | 63 +++++-------- .../Tools/RimAutomationSettings.h | 10 +- .../RiuSelectionChangedHandler.cpp | 93 +++++++++++++++---- .../RiuSelectionChangedHandler.h | 2 + 6 files changed, 113 insertions(+), 75 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/RimGridTimeHistoryCurve.cpp b/ApplicationLibCode/ProjectDataModel/RimGridTimeHistoryCurve.cpp index dde477be4ac..84b44d5425f 100644 --- a/ApplicationLibCode/ProjectDataModel/RimGridTimeHistoryCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimGridTimeHistoryCurve.cpp @@ -83,19 +83,16 @@ RimGridTimeHistoryCurve::~RimGridTimeHistoryCurve() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimGridTimeHistoryCurve::setFromSelectionItem( const RiuSelectionItem* selectionItem ) +void RimGridTimeHistoryCurve::setFromSelectionItem( const RiuSelectionItem* selectionItem, bool updateResultDefinition ) { - delete m_eclipseResultDefinition(); - delete m_geoMechResultDefinition(); - if ( const RiuEclipseSelectionItem* eclSelectionItem = dynamic_cast( selectionItem ) ) { m_eclipseDataSource = new RimEclipseGeometrySelectionItem; m_eclipseDataSource->setFromSelectionItem( eclSelectionItem ); - if ( eclSelectionItem->m_resultDefinition ) + if ( updateResultDefinition && eclSelectionItem->m_resultDefinition ) { - m_eclipseResultDefinition = new RimEclipseResultDefinition; + if ( !m_eclipseResultDefinition() ) m_eclipseResultDefinition = new RimEclipseResultDefinition; m_eclipseResultDefinition->simpleCopy( eclSelectionItem->m_resultDefinition ); } } @@ -105,9 +102,9 @@ void RimGridTimeHistoryCurve::setFromSelectionItem( const RiuSelectionItem* sele m_geoMechDataSource = new RimGeoMechGeometrySelectionItem; m_geoMechDataSource->setFromSelectionItem( geoMechSelectionItem ); - if ( geoMechSelectionItem->m_resultDefinition ) + if ( updateResultDefinition && geoMechSelectionItem->m_resultDefinition ) { - m_geoMechResultDefinition = new RimGeoMechResultDefinition; + if ( !m_geoMechResultDefinition ) m_geoMechResultDefinition = new RimGeoMechResultDefinition; m_geoMechResultDefinition->setGeoMechCase( geoMechSelectionItem->m_resultDefinition->geoMechCase() ); m_geoMechResultDefinition->setResultAddress( geoMechSelectionItem->m_resultDefinition->resultAddress() ); } @@ -305,8 +302,9 @@ void RimGridTimeHistoryCurve::createCurveFromSelectionItem( const RiuSelectionIt { if ( !selectionItem || !plot ) return; - RimGridTimeHistoryCurve* newCurve = new RimGridTimeHistoryCurve(); - newCurve->setFromSelectionItem( selectionItem ); + RimGridTimeHistoryCurve* newCurve = new RimGridTimeHistoryCurve(); + bool updateResultDefinition = true; + newCurve->setFromSelectionItem( selectionItem, updateResultDefinition ); newCurve->setLineThickness( 2 ); cvf::Color3f curveColor = RicWellLogPlotCurveFeatureImpl::curveColorFromTable( plot->curveCount() ); diff --git a/ApplicationLibCode/ProjectDataModel/RimGridTimeHistoryCurve.h b/ApplicationLibCode/ProjectDataModel/RimGridTimeHistoryCurve.h index a21e51d7422..29eeadf67df 100644 --- a/ApplicationLibCode/ProjectDataModel/RimGridTimeHistoryCurve.h +++ b/ApplicationLibCode/ProjectDataModel/RimGridTimeHistoryCurve.h @@ -51,7 +51,7 @@ class RimGridTimeHistoryCurve : public RimPlotCurve RimGridTimeHistoryCurve(); ~RimGridTimeHistoryCurve() override; - void setFromSelectionItem( const RiuSelectionItem* selectionItem ); + void setFromSelectionItem( const RiuSelectionItem* selectionItem, bool updateResultDefinition ); void setFromEclipseCellAndResult( RimEclipseCase* eclCase, size_t gridIdx, size_t i, size_t j, size_t k, const RigEclipseResultAddress& resAddr ); RiuPlotAxis yAxis() const; void setYAxis( RiaDefines::PlotAxis plotAxis ); diff --git a/ApplicationLibCode/ProjectDataModel/Tools/RimAutomationSettings.cpp b/ApplicationLibCode/ProjectDataModel/Tools/RimAutomationSettings.cpp index be03ada86dc..7a3191239b2 100644 --- a/ApplicationLibCode/ProjectDataModel/Tools/RimAutomationSettings.cpp +++ b/ApplicationLibCode/ProjectDataModel/Tools/RimAutomationSettings.cpp @@ -26,7 +26,7 @@ #include "PlotBuilderCommands/RicSummaryPlotBuilder.h" #include "RiuPlotMainWindowTools.h" -#include "cafPdmUiPushButtonEditor.h" +#include "RimSummaryMultiPlot.h" CAF_PDM_SOURCE_INIT( RimAutomationSettings, "RimAutomationSettings" ); @@ -42,36 +42,24 @@ RimAutomationSettings::RimAutomationSettings() "Cell Selection Destination", "", "Add curves to the selected Summary Plot when clicking on cells in a 3D view." ); - - CAF_PDM_InitFieldNoDefault( &m_createSummaryPlot, "CreateSummaryPlot", "Create Summary Plot" ); - caf::PdmUiPushButtonEditor::configureEditorLabelHidden( &m_createSummaryPlot ); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -RimSummaryPlot* RimAutomationSettings::cellSelectionDestination() const -{ - return m_cellSelectionDestination(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimAutomationSettings::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) +std::vector RimAutomationSettings::summaryPlots() const { - if ( changedField == &m_createSummaryPlot ) + if ( auto summaryPlot = dynamic_cast( m_cellSelectionDestination() ) ) { - if ( m_createSummaryPlot ) - { - RimSummaryPlot* newPlot = new RimSummaryPlot(); - RicSummaryPlotBuilder::createAndAppendSingleSummaryMultiPlot( newPlot ); - - RiuPlotMainWindowTools::selectAsCurrentItem( this ); + return { summaryPlot }; + } - m_cellSelectionDestination = newPlot; - } + if ( auto multiSummaryPlot = dynamic_cast( m_cellSelectionDestination() ) ) + { + return multiSummaryPlot->summaryPlots(); } + + return {}; } //-------------------------------------------------------------------------------------------------- @@ -83,9 +71,6 @@ void RimAutomationSettings::defineUiOrdering( QString uiConfigName, caf::PdmUiOr group->add( &m_cellSelectionDestination ); m_cellSelectionDestination.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN ); - - // group->add( &m_createSummaryPlot ); - uiOrdering.skipRemainingFields(); } //-------------------------------------------------------------------------------------------------- @@ -99,7 +84,19 @@ QList RimAutomationSettings::calculateValueOptions( cons { if ( auto summaryPlotColl = RiaSummaryTools::summaryMultiPlotCollection() ) { - summaryPlotColl->summaryPlotItemInfos( &options ); + for ( RimSummaryMultiPlot* multiPlot : summaryPlotColl->multiPlots() ) + { + auto mainPlotName = multiPlot->description(); + + options.push_back( caf::PdmOptionItemInfo( mainPlotName, multiPlot, false, multiPlot->uiIconProvider() ) ); + + for ( RimSummaryPlot* plot : multiPlot->summaryPlots() ) + { + QString displayName = mainPlotName + " : "; + displayName += plot->userDescriptionField()->uiCapability()->uiValue().toString(); + options.push_back( caf::PdmOptionItemInfo( displayName, plot, false, plot->uiIconProvider() ) ); + } + } } options.push_back( caf::PdmOptionItemInfo( "None", nullptr ) ); @@ -107,17 +104,3 @@ QList RimAutomationSettings::calculateValueOptions( cons return options; } - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimAutomationSettings::defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) -{ - if ( field == &m_createSummaryPlot ) - { - if ( auto* attr = dynamic_cast( attribute ) ) - { - attr->m_buttonText = "Create Plot"; - } - } -} diff --git a/ApplicationLibCode/ProjectDataModel/Tools/RimAutomationSettings.h b/ApplicationLibCode/ProjectDataModel/Tools/RimAutomationSettings.h index ec70baea7a7..4645633899b 100644 --- a/ApplicationLibCode/ProjectDataModel/Tools/RimAutomationSettings.h +++ b/ApplicationLibCode/ProjectDataModel/Tools/RimAutomationSettings.h @@ -22,6 +22,7 @@ #include "cafPdmObject.h" #include "cafPdmPtrField.h" +class RimPlotWindow; class RimSummaryPlot; //================================================================================================== @@ -35,15 +36,12 @@ class RimAutomationSettings : public caf::PdmObject public: RimAutomationSettings(); - RimSummaryPlot* cellSelectionDestination() const; + std::vector summaryPlots() const; private: - 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; QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; - void defineEditorAttribute( const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute ) override; private: - caf::PdmPtrField m_cellSelectionDestination; - caf::PdmField m_createSummaryPlot; + caf::PdmPtrField m_cellSelectionDestination; }; diff --git a/ApplicationLibCode/UserInterface/RiuSelectionChangedHandler.cpp b/ApplicationLibCode/UserInterface/RiuSelectionChangedHandler.cpp index dde9733812c..3c1b0d478f9 100644 --- a/ApplicationLibCode/UserInterface/RiuSelectionChangedHandler.cpp +++ b/ApplicationLibCode/UserInterface/RiuSelectionChangedHandler.cpp @@ -19,6 +19,7 @@ #include "RiuSelectionChangedHandler.h" +#include "RiaColorTables.h" #include "RiaResultNames.h" #include "RigCaseCellResultsData.h" @@ -102,12 +103,6 @@ void RiuSelectionChangedHandler::handleSelectionDeleted() const RiuMohrsCirclePlot* mohrsCirclePlot = RiuMainWindow::instance()->mohrsCirclePlot(); if ( mohrsCirclePlot ) mohrsCirclePlot->clearPlot(); - auto autoSettings = RimProject::current()->automationSettings(); - if ( auto summaryPlot = autoSettings->cellSelectionDestination() ) - { - summaryPlot->deleteAllGridTimeHistoryCurves(); - } - updateResultInfo( nullptr ); scheduleUpdateForAllVisibleViews(); @@ -134,6 +129,7 @@ void RiuSelectionChangedHandler::handleItemAppended( const RiuSelectionItem* ite if ( mohrsCirclePlot ) mohrsCirclePlot->appendSelection( item ); updateResultInfo( item ); + updateGridCellCurvesFromSelection(); scheduleUpdateForAllVisibleViews(); } @@ -151,12 +147,6 @@ void RiuSelectionChangedHandler::handleSetSelectedItem( const RiuSelectionItem* RiuMohrsCirclePlot* mohrsCirclePlot = RiuMainWindow::instance()->mohrsCirclePlot(); if ( mohrsCirclePlot ) mohrsCirclePlot->clearPlot(); - auto autoSettings = RimProject::current()->automationSettings(); - if ( auto summaryPlot = autoSettings->cellSelectionDestination() ) - { - summaryPlot->deleteAllGridTimeHistoryCurves(); - } - handleItemAppended( item ); } @@ -208,12 +198,6 @@ void RiuSelectionChangedHandler::addResultCurveFromSelectionItem( const RiuEclip { RiuMainWindow::instance()->resultPlot()->showTimeStep( timeStepDates[eclipseSelectionItem->m_timestepIdx] ); } - - auto autoSettings = RimProject::current()->automationSettings(); - if ( auto summaryPlot = autoSettings->cellSelectionDestination() ) - { - RimGridTimeHistoryCurve::createCurveFromSelectionItem( eclipseSelectionItem, summaryPlot ); - } } } @@ -438,6 +422,79 @@ void RiuSelectionChangedHandler::updateResultInfo( const RiuSelectionItem* itemA mainWnd->setResultInfo( resultInfo ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuSelectionChangedHandler::updateGridCellCurvesFromSelection() +{ + std::vector items; + Riu3dSelectionManager::instance()->selectedItems( items ); + if ( items.empty() ) return; + + auto autoSettings = RimProject::current()->automationSettings(); + for ( auto summaryPlot : autoSettings->summaryPlots() ) + { + // if no curves present, create from selection + if ( summaryPlot->gridTimeHistoryCurves().empty() ) + { + for ( auto item : items ) + { + RimGridTimeHistoryCurve::createCurveFromSelectionItem( item, summaryPlot ); + } + } + else + { + // find unique result types like soil, swat + // for each result type, create a curve for all cells in selection + + auto curves = summaryPlot->gridTimeHistoryCurves(); + + std::map uniqueCurves; + for ( auto curve : curves ) + { + uniqueCurves[curve->quantityName()] = curve; + } + + std::vector sourceCurves; + std::transform( uniqueCurves.begin(), + uniqueCurves.end(), + std::back_inserter( sourceCurves ), + []( const auto& pair ) { return pair.second; } ); + + std::vector newCurves; + + for ( auto curve : sourceCurves ) + { + int index = 0; + for ( auto item : items ) + { + auto newCurve = curve->copyObject(); + bool updateResultDefinition = false; + newCurve->setFromSelectionItem( item, updateResultDefinition ); + + if ( index != 0 ) + { + cvf::Color3f curveColor = RiaColorTables::wellLogPlotPaletteColors().cycledColor3f( index ); + newCurve->setColor( curveColor ); + } + index++; + + newCurves.push_back( newCurve ); + } + } + + summaryPlot->deleteAllGridTimeHistoryCurves(); + for ( auto c : newCurves ) + { + summaryPlot->addGridTimeHistoryCurve( c ); + } + + summaryPlot->updateConnectedEditors(); + summaryPlot->loadDataAndUpdate(); + } + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/UserInterface/RiuSelectionChangedHandler.h b/ApplicationLibCode/UserInterface/RiuSelectionChangedHandler.h index f7ac86a5b17..a551dc39a07 100644 --- a/ApplicationLibCode/UserInterface/RiuSelectionChangedHandler.h +++ b/ApplicationLibCode/UserInterface/RiuSelectionChangedHandler.h @@ -47,4 +47,6 @@ class RiuSelectionChangedHandler void scheduleUpdateForAllVisibleViews() const; void updateResultInfo( const RiuSelectionItem* itemAdded ) const; + + static void updateGridCellCurvesFromSelection(); };