diff --git a/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotDataSet.cpp b/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotDataSet.cpp index c4e57db5e4..5e4d6a0615 100644 --- a/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotDataSet.cpp +++ b/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotDataSet.cpp @@ -358,6 +358,40 @@ void RimGridCrossPlotDataSet::detachAllCurves() } } +//-------------------------------------------------------------------------------------------------- +/// Minimal update of regression curves without updateConnectedEditors that causes change of input focus +//-------------------------------------------------------------------------------------------------- +void RimGridCrossPlotDataSet::updateRegressionCurves() +{ + if ( !m_case() ) return; + + RimEclipseCase* eclipseCase = dynamic_cast( m_case.value() ); + if ( !eclipseCase ) return; + + std::map timeStepCellVisibilityMap = calculateCellVisibility( eclipseCase ); + RigEclipseCrossPlotResult result = RigEclipseCrossPlotDataExtractor::extract( eclipseCase->eclipseCaseData(), + m_timeStep(), + *m_xAxisProperty, + *m_yAxisProperty, + m_grouping(), + *m_groupingProperty, + timeStepCellVisibilityMap ); + + if ( m_crossPlotRegressionCurves.size() != m_groupedResults.size() ) + { + destroyRegressionCurves(); + } + + if ( m_crossPlotRegressionCurves.empty() ) + { + createRegressionCurves( result ); + } + else + { + fillCurveDataInExistingRegressionCurves( result ); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -1609,17 +1643,6 @@ void RimGridCrossPlotDataSet::curveAppearanceChanged( const caf::SignalEmitter* triggerPlotNameUpdateAndReplot(); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimGridCrossPlotDataSet::onChildrenUpdated( caf::PdmChildArrayFieldHandle* childArray, std::vector& updatedObjects ) -{ - if ( childArray == &m_crossPlotRegressionCurves ) - { - triggerPlotNameUpdateAndReplot(); - } -} - CAF_PDM_SOURCE_INIT( RimGridCrossPlotDataSetNameConfig, "RimGridCrossPlotCurveSetNameConfig" ); //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotDataSet.h b/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotDataSet.h index e754392537..03ab5262be 100644 --- a/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotDataSet.h +++ b/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotDataSet.h @@ -140,6 +140,7 @@ public: void setCustomColor( const cvf::Color3f color ); void destroyCurves(); + void updateRegressionCurves(); void destroyRegressionCurves(); size_t visibleCurveCount() const; @@ -161,7 +162,6 @@ protected: void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override; void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void childFieldChangedByUi( const caf::PdmFieldHandle* changedChildField ) override; - void onChildrenUpdated( caf::PdmChildArrayFieldHandle* childArray, std::vector& updatedObjects ) override; QList calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override; void triggerPlotNameUpdateAndReplot(); diff --git a/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotRegressionCurve.cpp b/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotRegressionCurve.cpp index 54b9cd7dc7..65eb2d44d7 100644 --- a/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotRegressionCurve.cpp +++ b/ApplicationLibCode/ProjectDataModel/GridCrossPlots/RimGridCrossPlotRegressionCurve.cpp @@ -439,10 +439,10 @@ void RimGridCrossPlotRegressionCurve::fieldChangedByUi( const caf::PdmFieldHandl if ( &m_minRangeX == changedField || &m_maxRangeX == changedField || &m_minRangeY == changedField || &m_maxRangeY == changedField || &m_minExtrapolationRangeX == changedField || &m_maxExtrapolationRangeX == changedField || &m_regressionType == changedField || - &m_polynomialDegree == changedField || &m_showDataSelectionInPlot == changedField ) + &m_polynomialDegree == changedField || &m_showDataSelectionInPlot == changedField || &m_showCurve == changedField ) { auto dataSet = firstAncestorOrThisOfTypeAsserted(); - dataSet->loadDataAndUpdate( true ); + dataSet->updateRegressionCurves(); } }