#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
{
@ -375,6 +375,39 @@ void Rim3dView::scheduleCreateDisplayModelAndRedraw()
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()
{
this->updateCurrentTimeStep();
if ( Rim3dView* depView = prepareComparisonView() )
if ( nativeOrOverrideViewer() )
{
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;
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;
}

View File

@ -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<Rim3dView*> viewsUsingThisAsComparisonView();
Rim3dView* prepareComparisonView();
void restoreComparisonView();

View File

@ -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() )
{

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();
}
//--------------------------------------------------------------------------------------------------