From d71ee1176fa18a53edcff31f2bd0d06110aa4268 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 23 Jun 2026 09:53:43 +0200 Subject: [PATCH] #14292 Update stepping dimension after summary address change When a summary vector is selected by manipulation of a curve, recompute the source stepping dimension from the current curve content and refresh the stepping toolbar. This keeps the toolbar consistent with the displayed vectors, which is required for 3D view well selection to step the plot correctly. --- .../Summary/RimSummaryCurve.cpp | 18 +++++++++++++ .../Summary/RimSummaryCurve.h | 2 ++ .../Summary/RimSummaryMultiPlot.cpp | 26 +++++++++++++++++-- .../Summary/RimSummaryMultiPlot.h | 3 +++ 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.cpp index f7651b97e6..0ec3138221 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.cpp @@ -1096,6 +1096,7 @@ void RimSummaryCurve::fieldChangedByUi( const caf::PdmFieldHandle* changedField, m_yValuesSummaryAddress->setAddress( m_yValuesSummaryAddressUiField() ); calculateCurveInterpolationFromAddress(); + updateSourceSteppingAfterAddressChange(); loadAndUpdate = true; } @@ -1104,6 +1105,7 @@ void RimSummaryCurve::fieldChangedByUi( const caf::PdmFieldHandle* changedField, m_xValuesSummaryAddress->setAddress( m_xValuesSummaryAddressUiField() ); calculateCurveInterpolationFromAddress(); + updateSourceSteppingAfterAddressChange(); loadAndUpdate = true; } @@ -1205,6 +1207,8 @@ void RimSummaryCurve::selectYSummaryAddress() m_yValuesSummaryCase = curveSelection[0].summaryCaseY(); m_yValuesSummaryAddress->setAddress( curveSelection[0].summaryAddressY() ); + updateSourceSteppingAfterAddressChange(); + checkForMatchingCrossPlotTimeSteps(); loadAndUpdateDataAndPlot(); } @@ -1241,6 +1245,8 @@ void RimSummaryCurve::selectXSummaryAddress() m_xValuesSummaryCase = curveSelection[0].summaryCaseY(); m_xValuesSummaryAddress->setAddress( curveSelection[0].summaryAddressY() ); + updateSourceSteppingAfterAddressChange(); + checkForMatchingCrossPlotTimeSteps(); loadAndUpdateDataAndPlot(); } @@ -1324,6 +1330,18 @@ void RimSummaryCurve::loadAndUpdateDataAndPlot() dataChanged.send(); } +//-------------------------------------------------------------------------------------------------- +/// When the summary vector of this curve is changed, make sure the toolbar 'Step By' field stays +/// consistent with the selected vector. +//-------------------------------------------------------------------------------------------------- +void RimSummaryCurve::updateSourceSteppingAfterAddressChange() +{ + if ( auto summaryMultiPlot = firstAncestorOrThisOfType() ) + { + summaryMultiPlot->updateStepDimensionFromCurves(); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.h index 13ef31016a..1f139ab5a9 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryCurve.h @@ -146,6 +146,8 @@ private: void calculateCurveInterpolationFromAddress(); void calculateCurveTypeFromAddress(); + void updateSourceSteppingAfterAddressChange(); + static void appendOptionItemsForSummaryAddresses( QList* options, RimSummaryCase* summaryCase ); private: diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp index 2f617bd345..3aaf07a197 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.cpp @@ -826,7 +826,7 @@ void RimSummaryMultiPlot::updateTimeAxisRangesFromFirstTimePlot() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimSummaryMultiPlot::setDefaultRangeAggregationSteppingDimension() +RimSummaryDataSourceStepping::SourceSteppingDimension RimSummaryMultiPlot::calculateStepDimensionFromCurves() { RiaSummaryAddressAnalyzer analyzer; @@ -879,7 +879,15 @@ void RimSummaryMultiPlot::setDefaultRangeAggregationSteppingDimension() stepDimension = RimSummaryDataSourceStepping::SourceSteppingDimension::BLOCK; } - m_sourceStepping->setStepDimension( stepDimension ); + return stepDimension; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryMultiPlot::setDefaultRangeAggregationSteppingDimension() +{ + m_sourceStepping->setStepDimension( calculateStepDimensionFromCurves() ); // Previously, when the stepping dimension was set to 'well' for range aggregation, it was based on all wells. If one of the wells // had extreme values and was not visible, it would set the y-range to match the extreme value, making some curves invisible. We @@ -1833,6 +1841,20 @@ void RimSummaryMultiPlot::updateStepDimensionFromDefault() m_sourceStepping->setStepDimension( m_defaultStepDimension() ); } +//-------------------------------------------------------------------------------------------------- +/// Recompute the source stepping dimension when a summary vector is selected by manipulation of a curve, +/// so the toolbar 'Step By' field stays consistent with what the curves actually display. +//-------------------------------------------------------------------------------------------------- +void RimSummaryMultiPlot::updateStepDimensionFromCurves() +{ + auto stepDimension = calculateStepDimensionFromCurves(); + + m_sourceStepping->setStepDimension( stepDimension ); + m_defaultStepDimension = stepDimension; + + RiuPlotMainWindowTools::refreshToolbars(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h index 003a464ef1..c98600fc30 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryMultiPlot.h @@ -106,6 +106,7 @@ public: void storeStepDimensionFromToolbar(); void updateStepDimensionFromDefault(); + void updateStepDimensionFromCurves(); void selectWell( QString wellName ); @@ -135,6 +136,8 @@ private: void computeAggregatedAxisRange(); void updateSourceStepper(); + RimSummaryDataSourceStepping::SourceSteppingDimension calculateStepDimensionFromCurves(); + void updatePlotVisibility(); void setAutoValueStates(); static void setAutoValueStatesForPlot( RimSummaryPlot* summaryPlot, bool isMinMaxOverridden, bool isAppearanceOverridden );