#4859 Update the view when the comparison view is changed

This commit is contained in:
Jacob Støren 2019-10-15 14:28:15 +02:00
parent 98f9eef0da
commit f24543ce56
4 changed files with 72 additions and 25 deletions

View File

@ -220,7 +220,7 @@ QString Rim3dView::name() const
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
QString Rim3dView::autoName() const QString Rim3dView::autoName() const
{ {
@ -375,6 +375,39 @@ void Rim3dView::scheduleCreateDisplayModelAndRedraw()
viewLinker->scheduleCreateDisplayModelAndRedrawForDependentViews(); viewLinker->scheduleCreateDisplayModelAndRedrawForDependentViews();
} }
} }
// Update views using this as comparison
std::set<Rim3dView*> containingViews = viewsUsingThisAsComparisonView();
for ( auto view : containingViews )
{
RiaViewRedrawScheduler::instance()->scheduleDisplayModelUpdateAndRedraw( view );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::set<Rim3dView*> Rim3dView::viewsUsingThisAsComparisonView()
{
std::set<Rim3dView*> containingViews;
std::vector<caf::PdmFieldHandle*> fieldsReferringToMe;
this->referringPtrFields( fieldsReferringToMe );
for ( caf::PdmFieldHandle* field : fieldsReferringToMe )
{
if ( field->keyword() == m_comparisonView.keyword() )
{
Rim3dView* containingView = nullptr;
containingView = dynamic_cast<Rim3dView*>( field->ownerObject() );
if ( containingView && containingView->activeComparisonView() == this )
{
containingViews.insert( containingView );
}
}
}
return containingViews;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -449,20 +482,32 @@ void Rim3dView::setCurrentTimeStep( int frameIndex )
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void Rim3dView::updateCurrentTimeStepAndRedraw() void Rim3dView::updateCurrentTimeStepAndRedraw()
{ {
this->updateCurrentTimeStep(); if ( nativeOrOverrideViewer() )
if ( Rim3dView* depView = prepareComparisonView() )
{ {
depView->updateCurrentTimeStep(); this->updateCurrentTimeStep();
restoreComparisonView(); if ( Rim3dView* depView = prepareComparisonView() )
{
depView->updateCurrentTimeStep();
restoreComparisonView();
}
nativeOrOverrideViewer()->update();
}
std::set<Rim3dView*> containerViews = this->viewsUsingThisAsComparisonView();
if ( !containerViews.empty() && !isUsingOverrideViewer())
{
for ( auto view : containerViews )
{
view->updateCurrentTimeStepAndRedraw();
}
} }
RimProject* project; RimProject* project;
firstAncestorOrThisOfTypeAsserted( project ); firstAncestorOrThisOfTypeAsserted( project );
project->mainPlotCollection()->updateCurrentTimeStepInPlots(); project->mainPlotCollection()->updateCurrentTimeStepInPlots();
if ( nativeOrOverrideViewer() ) nativeOrOverrideViewer()->update();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -494,7 +539,7 @@ void Rim3dView::createDisplayModelAndRedraw()
if ( isTimeStepDependentDataVisibleInThisOrComparisonView() ) if ( isTimeStepDependentDataVisibleInThisOrComparisonView() )
{ {
// To make the override viewer see the new frame (skeletons) created by createDisplayModelAndRedraw // 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 // m_currentTimeStep
nativeOrOverrideViewer()->caf::Viewer::slotSetCurrentFrame( currentTimeStep() ); nativeOrOverrideViewer()->caf::Viewer::slotSetCurrentFrame( currentTimeStep() );
depView->updateCurrentTimeStep(); depView->updateCurrentTimeStep();
@ -504,8 +549,8 @@ void Rim3dView::createDisplayModelAndRedraw()
} }
else if ( !isUsingOverrideViewer() && viewer() ) else if ( !isUsingOverrideViewer() && viewer() )
{ {
// Remove the comparison scene data when // Remove the comparison scene data when
// we do not have a comparison view // we do not have a comparison view
// and are not doing override generation // and are not doing override generation
viewer()->setMainScene( nullptr, true ); viewer()->setMainScene( nullptr, true );
viewer()->removeAllFrames( true ); viewer()->removeAllFrames( true );
@ -1365,11 +1410,11 @@ Rim3dView* Rim3dView::prepareComparisonView()
Rim3dView* depView = activeComparisonView(); Rim3dView* depView = activeComparisonView();
if ( !depView ) if ( !depView )
{ {
return nullptr; return nullptr;
} }
if (isUsingOverrideViewer()) if ( isUsingOverrideViewer() )
{ {
return nullptr; return nullptr;
} }

View File

@ -109,7 +109,7 @@ public:
void setName( const QString& name ); void setName( const QString& name );
QString name() const; QString name() const;
QString autoName() const; QString autoName() const;
// Implementation of RiuViewerToViewInterface // Implementation of RiuViewerToViewInterface
cvf::Color3f backgroundColor() const override cvf::Color3f backgroundColor() const override
@ -154,13 +154,14 @@ public:
void updateCurrentTimeStepAndRedraw() override; void updateCurrentTimeStepAndRedraw() override;
virtual void scheduleGeometryRegen( RivCellSetEnum geometryType ) = 0; virtual void scheduleGeometryRegen( RivCellSetEnum geometryType ) = 0;
void scheduleCreateDisplayModelAndRedraw(); void scheduleCreateDisplayModelAndRedraw();
void createDisplayModelAndRedraw();
void createHighlightAndGridBoxDisplayModelWithRedraw(); void createDisplayModelAndRedraw();
void updateGridBoxData(); void createHighlightAndGridBoxDisplayModelWithRedraw();
void updateAnnotationItems(); void updateGridBoxData();
void updateScaling(); void updateAnnotationItems();
void updateZScaleLabel(); void updateScaling();
void updateMeasurement(); void updateZScaleLabel();
void updateMeasurement();
bool isMasterView() const; bool isMasterView() const;
@ -295,8 +296,9 @@ private:
// Pure private methods : Override viewer and comparison view // Pure private methods : Override viewer and comparison view
void setOverrideViewer( RiuViewer* overrideViewer ); void setOverrideViewer( RiuViewer* overrideViewer );
Rim3dView* activeComparisonView() const; Rim3dView* activeComparisonView() const;
std::set<Rim3dView*> viewsUsingThisAsComparisonView();
Rim3dView* prepareComparisonView(); Rim3dView* prepareComparisonView();
void restoreComparisonView(); void restoreComparisonView();

View File

@ -166,7 +166,7 @@ void RimCellEdgeColors::fieldChangedByUi( const caf::PdmFieldHandle* changedFiel
{ {
loadResult(); loadResult();
if ( m_reservoirView ) m_reservoirView->createDisplayModelAndRedraw(); if ( m_reservoirView ) m_reservoirView->scheduleCreateDisplayModelAndRedraw();
if ( changedField == objectToggleField() ) if ( changedField == objectToggleField() )
{ {

View File

@ -113,7 +113,7 @@ void RimEclipseCellColors::fieldChangedByUi( const caf::PdmFieldHandle* changedF
} }
} }
if ( m_reservoirView ) m_reservoirView->createDisplayModelAndRedraw(); if ( m_reservoirView ) m_reservoirView->scheduleCreateDisplayModelAndRedraw();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------