diff --git a/ApplicationCode/ProjectDataModel/Rim3dView.cpp b/ApplicationCode/ProjectDataModel/Rim3dView.cpp index 909aaf8f6e..3d19429d3b 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dView.cpp +++ b/ApplicationCode/ProjectDataModel/Rim3dView.cpp @@ -220,7 +220,7 @@ QString Rim3dView::name() const } //-------------------------------------------------------------------------------------------------- -/// +/// //-------------------------------------------------------------------------------------------------- QString Rim3dView::autoName() const { @@ -375,6 +375,39 @@ void Rim3dView::scheduleCreateDisplayModelAndRedraw() viewLinker->scheduleCreateDisplayModelAndRedrawForDependentViews(); } } + + // Update views using this as comparison + std::set containingViews = viewsUsingThisAsComparisonView(); + + for ( auto view : containingViews ) + { + RiaViewRedrawScheduler::instance()->scheduleDisplayModelUpdateAndRedraw( view ); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::set Rim3dView::viewsUsingThisAsComparisonView() +{ + std::set containingViews; + std::vector fieldsReferringToMe; + + this->referringPtrFields( fieldsReferringToMe ); + for ( caf::PdmFieldHandle* field : fieldsReferringToMe ) + { + if ( field->keyword() == m_comparisonView.keyword() ) + { + Rim3dView* containingView = nullptr; + containingView = dynamic_cast( field->ownerObject() ); + if ( containingView && containingView->activeComparisonView() == this ) + { + containingViews.insert( containingView ); + } + } + } + + return containingViews; } //-------------------------------------------------------------------------------------------------- @@ -449,20 +482,32 @@ void Rim3dView::setCurrentTimeStep( int frameIndex ) //-------------------------------------------------------------------------------------------------- void Rim3dView::updateCurrentTimeStepAndRedraw() { - this->updateCurrentTimeStep(); - - if ( Rim3dView* depView = prepareComparisonView() ) + if ( nativeOrOverrideViewer() ) { - depView->updateCurrentTimeStep(); + this->updateCurrentTimeStep(); - restoreComparisonView(); + if ( Rim3dView* depView = prepareComparisonView() ) + { + depView->updateCurrentTimeStep(); + + restoreComparisonView(); + } + + nativeOrOverrideViewer()->update(); + } + + std::set containerViews = this->viewsUsingThisAsComparisonView(); + if ( !containerViews.empty() && !isUsingOverrideViewer()) + { + for ( auto view : containerViews ) + { + view->updateCurrentTimeStepAndRedraw(); + } } RimProject* project; firstAncestorOrThisOfTypeAsserted( project ); project->mainPlotCollection()->updateCurrentTimeStepInPlots(); - - if ( nativeOrOverrideViewer() ) nativeOrOverrideViewer()->update(); } //-------------------------------------------------------------------------------------------------- @@ -494,7 +539,7 @@ void Rim3dView::createDisplayModelAndRedraw() if ( isTimeStepDependentDataVisibleInThisOrComparisonView() ) { // To make the override viewer see the new frame (skeletons) created by createDisplayModelAndRedraw - // But avoid any call back down to this Rim3dView, instead do the update manually to not confuse the + // But avoid any call back down to this Rim3dView, instead do the update manually to not confuse the // m_currentTimeStep nativeOrOverrideViewer()->caf::Viewer::slotSetCurrentFrame( currentTimeStep() ); depView->updateCurrentTimeStep(); @@ -504,8 +549,8 @@ void Rim3dView::createDisplayModelAndRedraw() } else if ( !isUsingOverrideViewer() && viewer() ) { - // Remove the comparison scene data when - // we do not have a comparison view + // Remove the comparison scene data when + // we do not have a comparison view // and are not doing override generation viewer()->setMainScene( nullptr, true ); viewer()->removeAllFrames( true ); @@ -1365,11 +1410,11 @@ Rim3dView* Rim3dView::prepareComparisonView() Rim3dView* depView = activeComparisonView(); if ( !depView ) - { + { return nullptr; } - if (isUsingOverrideViewer()) + if ( isUsingOverrideViewer() ) { return nullptr; } diff --git a/ApplicationCode/ProjectDataModel/Rim3dView.h b/ApplicationCode/ProjectDataModel/Rim3dView.h index 4e3d1be07c..579a3b94dd 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dView.h +++ b/ApplicationCode/ProjectDataModel/Rim3dView.h @@ -109,7 +109,7 @@ public: void setName( const QString& name ); QString name() const; - QString autoName() const; + QString autoName() const; // Implementation of RiuViewerToViewInterface cvf::Color3f backgroundColor() const override @@ -154,13 +154,14 @@ public: void updateCurrentTimeStepAndRedraw() override; virtual void scheduleGeometryRegen( RivCellSetEnum geometryType ) = 0; void scheduleCreateDisplayModelAndRedraw(); - void createDisplayModelAndRedraw(); - void createHighlightAndGridBoxDisplayModelWithRedraw(); - void updateGridBoxData(); - void updateAnnotationItems(); - void updateScaling(); - void updateZScaleLabel(); - void updateMeasurement(); + + void createDisplayModelAndRedraw(); + void createHighlightAndGridBoxDisplayModelWithRedraw(); + void updateGridBoxData(); + void updateAnnotationItems(); + void updateScaling(); + void updateZScaleLabel(); + void updateMeasurement(); bool isMasterView() const; @@ -295,8 +296,9 @@ private: // Pure private methods : Override viewer and comparison view - void setOverrideViewer( RiuViewer* overrideViewer ); - Rim3dView* activeComparisonView() const; + void setOverrideViewer( RiuViewer* overrideViewer ); + Rim3dView* activeComparisonView() const; + std::set viewsUsingThisAsComparisonView(); Rim3dView* prepareComparisonView(); void restoreComparisonView(); diff --git a/ApplicationCode/ProjectDataModel/RimCellEdgeColors.cpp b/ApplicationCode/ProjectDataModel/RimCellEdgeColors.cpp index 268aef4ec0..90b41afbda 100644 --- a/ApplicationCode/ProjectDataModel/RimCellEdgeColors.cpp +++ b/ApplicationCode/ProjectDataModel/RimCellEdgeColors.cpp @@ -166,7 +166,7 @@ void RimCellEdgeColors::fieldChangedByUi( const caf::PdmFieldHandle* changedFiel { loadResult(); - if ( m_reservoirView ) m_reservoirView->createDisplayModelAndRedraw(); + if ( m_reservoirView ) m_reservoirView->scheduleCreateDisplayModelAndRedraw(); if ( changedField == objectToggleField() ) { diff --git a/ApplicationCode/ProjectDataModel/RimEclipseCellColors.cpp b/ApplicationCode/ProjectDataModel/RimEclipseCellColors.cpp index 0599a52234..dad2e8b30c 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseCellColors.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseCellColors.cpp @@ -113,7 +113,7 @@ void RimEclipseCellColors::fieldChangedByUi( const caf::PdmFieldHandle* changedF } } - if ( m_reservoirView ) m_reservoirView->createDisplayModelAndRedraw(); + if ( m_reservoirView ) m_reservoirView->scheduleCreateDisplayModelAndRedraw(); } //--------------------------------------------------------------------------------------------------