(#395) Make sure the update() virtual function is called from camera related functions

This commit is contained in:
Magne Sjaastad 2015-08-31 12:31:38 +02:00
parent 854c47500b
commit 444500f6cc
12 changed files with 55 additions and 53 deletions

View File

@ -68,7 +68,7 @@ void RicLinkVisibleViewsFeature::onActionTriggered(bool isChecked)
RimView* rimView = views[i];
RimManagedViewConfig* viewConfig = new RimManagedViewConfig;
viewConfig->managedView = rimView;
managedViewCollection->managedViews.push_back(viewConfig);
managedViewCollection->viewConfigs.push_back(viewConfig);
viewConfig->initAfterReadRecursively();
}

View File

@ -75,7 +75,7 @@ void Rim3dOverlayInfoConfig::fieldChangedByUi(const caf::PdmFieldHandle* changed
if (m_viewDef && m_viewDef->viewer())
{
m_viewDef->viewer()->update();
m_viewDef->viewer()->issueBaseClassUpdate();
}
}

View File

@ -792,7 +792,7 @@ void RimEclipseView::updateDisplayModelVisibility()
}
m_viewer->setEnableMask(mask);
m_viewer->update();
m_viewer->issueBaseClassUpdate();
faultCollection->updateConnectedEditors();
}

View File

@ -352,7 +352,7 @@ void RimGeoMechView::updateDisplayModelVisibility()
}
m_viewer->setEnableMask(mask);
m_viewer->update();
m_viewer->issueBaseClassUpdate();
}

View File

@ -43,8 +43,8 @@ RimManagedViewCollection::RimManagedViewCollection(void)
{
CAF_PDM_InitObject("Managed Views", ":/chain.png", "", "");
CAF_PDM_InitFieldNoDefault(&managedViews, "ManagedViews", "Managed Views", "", "", "");
managedViews.uiCapability()->setUiHidden(true);
CAF_PDM_InitFieldNoDefault(&viewConfigs, "ManagedViews", "Managed Views", "", "", "");
viewConfigs.uiCapability()->setUiHidden(true);
}
//--------------------------------------------------------------------------------------------------
@ -59,9 +59,9 @@ RimManagedViewCollection::~RimManagedViewCollection(void)
//--------------------------------------------------------------------------------------------------
void RimManagedViewCollection::updateTimeStep(int timeStep)
{
for (size_t i = 0; i < managedViews.size(); i++)
for (size_t i = 0; i < viewConfigs.size(); i++)
{
RimManagedViewConfig* managedViewConfig = managedViews[i];
RimManagedViewConfig* managedViewConfig = viewConfigs[i];
if (managedViewConfig->managedView())
{
if (managedViewConfig->syncTimeStep() && managedViewConfig->managedView()->viewer())
@ -85,9 +85,9 @@ void RimManagedViewCollection::updateCellResult()
{
RimEclipseResultDefinition* eclipseCellResultDefinition = masterEclipseView->cellResult();
for (size_t i = 0; i < managedViews.size(); i++)
for (size_t i = 0; i < viewConfigs.size(); i++)
{
RimManagedViewConfig* managedViewConfig = managedViews[i];
RimManagedViewConfig* managedViewConfig = viewConfigs[i];
if (managedViewConfig->managedView())
{
if (managedViewConfig->syncCellResult())
@ -113,9 +113,9 @@ void RimManagedViewCollection::updateCellResult()
{
RimGeoMechResultDefinition* geoMechResultDefinition = masterGeoView->cellResult();
for (size_t i = 0; i < managedViews.size(); i++)
for (size_t i = 0; i < viewConfigs.size(); i++)
{
RimManagedViewConfig* managedViewConfig = managedViews[i];
RimManagedViewConfig* managedViewConfig = viewConfigs[i];
if (managedViewConfig->managedView())
{
if (managedViewConfig->syncCellResult())
@ -141,9 +141,9 @@ void RimManagedViewCollection::updateCellResult()
//--------------------------------------------------------------------------------------------------
void RimManagedViewCollection::updateRangeFilters()
{
for (size_t i = 0; i < managedViews.size(); i++)
for (size_t i = 0; i < viewConfigs.size(); i++)
{
RimManagedViewConfig* managedViewConfig = managedViews[i];
RimManagedViewConfig* managedViewConfig = viewConfigs[i];
if (managedViewConfig->managedView())
{
if (managedViewConfig->syncRangeFilters())
@ -179,9 +179,9 @@ void RimManagedViewCollection::updateRangeFilters()
//--------------------------------------------------------------------------------------------------
void RimManagedViewCollection::updatePropertyFilters()
{
for (size_t i = 0; i < managedViews.size(); i++)
for (size_t i = 0; i < viewConfigs.size(); i++)
{
RimManagedViewConfig* managedViewConfig = managedViews[i];
RimManagedViewConfig* managedViewConfig = viewConfigs[i];
if (managedViewConfig->managedView())
{
if (managedViewConfig->syncPropertyFilters())
@ -216,9 +216,9 @@ void RimManagedViewCollection::updatePropertyFilters()
//--------------------------------------------------------------------------------------------------
void RimManagedViewCollection::configureOverrides()
{
for (size_t i = 0; i < managedViews.size(); i++)
for (size_t i = 0; i < viewConfigs.size(); i++)
{
RimManagedViewConfig* managedViewConfig = managedViews[i];
RimManagedViewConfig* managedViewConfig = viewConfigs[i];
managedViewConfig->configureOverrides();
}
}
@ -226,11 +226,16 @@ void RimManagedViewCollection::configureOverrides()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimManagedViewCollection::allManagedViews(std::vector<RimView*>& views)
void RimManagedViewCollection::allViewsForCameraSync(std::vector<RimView*>& views)
{
for (size_t i = 0; i < managedViews.size(); i++)
for (size_t i = 0; i < viewConfigs.size(); i++)
{
managedViews[i]->allManagedViews(views);
if (viewConfigs[i]->syncCamera && viewConfigs[i]->managedView())
{
views.push_back(viewConfigs[i]->managedView());
viewConfigs[i]->managedView()->managedViewCollection()->allViewsForCameraSync(views);
}
}
}

View File

@ -41,7 +41,7 @@ public:
RimManagedViewCollection(void);
virtual ~RimManagedViewCollection(void);
caf::PdmChildArrayField<RimManagedViewConfig*> managedViews;
caf::PdmChildArrayField<RimManagedViewConfig*> viewConfigs;
void applyAllOperations();
@ -53,5 +53,5 @@ public:
void configureOverrides();
void allManagedViews(std::vector<RimView*>& views);
void allViewsForCameraSync(std::vector<RimView*>& views);
};

View File

@ -324,19 +324,3 @@ void RimManagedViewConfig::updateDisplayName()
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimManagedViewConfig::allManagedViews(std::vector<RimView*>& views)
{
if (managedView)
{
views.push_back(managedView);
for (size_t i = 0; i < managedView->managedViewCollection()->managedViews().size(); i++)
{
managedView->managedViewCollection()->managedViews()[i]->allManagedViews(views);
}
}
}

View File

@ -50,7 +50,6 @@ public:
caf::PdmField<bool> syncPropertyFilters;
void configureOverrides();
void allManagedViews(std::vector<RimView*>& views);
protected:
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);

View File

@ -772,7 +772,7 @@ void RimProject::actionsBasedOnSelection(QMenu& contextMenu)
if (dynamic_cast<RimManagedViewCollection*>(uiItem))
{
RimManagedViewCollection* viewCollection = dynamic_cast<RimManagedViewCollection*>(uiItem);
caf::SelectionManager::instance()->setActiveChildArrayFieldHandle(&viewCollection->managedViews);
caf::SelectionManager::instance()->setActiveChildArrayFieldHandle(&viewCollection->viewConfigs);
commandIds << "PdmListField_AddItem";
}

View File

@ -160,7 +160,7 @@ void RimView::updateViewerWidget()
if (isViewerCreated) m_viewer->mainCamera()->setViewMatrix(cameraPosition);
m_viewer->mainCamera()->viewport()->setClearColor(cvf::Color4f(backgroundColor()));
m_viewer->update();
m_viewer->issueBaseClassUpdate();
}
else
{
@ -195,6 +195,8 @@ void RimView::scheduleCreateDisplayModelAndRedraw()
void RimView::setCurrentTimeStep(int frameIndex)
{
m_currentTimeStep = frameIndex;
clampCurrentTimestep();
this->hasUserRequestedAnimation = true;
this->updateCurrentTimeStep();
}
@ -205,7 +207,7 @@ void RimView::updateCurrentTimeStepAndRedraw()
{
this->updateCurrentTimeStep();
if (m_viewer) m_viewer->update();
if (m_viewer) m_viewer->issueBaseClassUpdate();
}
//--------------------------------------------------------------------------------------------------
@ -428,7 +430,7 @@ void RimView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QV
updateScaleTransform();
createDisplayModelAndRedraw();
m_viewer->update();
m_viewer->issueBaseClassUpdate();
}
RiuMainWindow::instance()->updateScaleValue();
@ -452,7 +454,7 @@ void RimView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QV
{
if (m_viewer)
{
m_viewer->update();
m_viewer->issueBaseClassUpdate();
managedViewCollection->updateTimeStep(m_currentTimeStep);
}

View File

@ -496,7 +496,10 @@ void RiuViewer::updateNavigationPolicy()
}
//--------------------------------------------------------------------------------------------------
/// Only camera related operations are supposed to call this function. Especially navigation policies
/// will call this function
///
/// All other updates should be redirected to caf::OpenGLWidget::update()
//--------------------------------------------------------------------------------------------------
void RiuViewer::update()
{
@ -504,6 +507,8 @@ void RiuViewer::update()
if (m_reservoirView)
{
viewsToUpdate.push_back(m_reservoirView);
RimView* rimView = m_reservoirView;
std::vector<caf::PdmObjectHandle*> objects;
@ -512,14 +517,21 @@ void RiuViewer::update()
while (objects.size() > 0)
{
RimManagedViewConfig* viewConfig = dynamic_cast<RimManagedViewConfig*>(objects[0]);
viewConfig->firstAnchestorOrThisOfType(rimView);
objects.clear();
rimView->objectsWithReferringPtrFields(objects);
if (viewConfig->syncCamera())
{
viewConfig->firstAnchestorOrThisOfType(rimView);
rimView->objectsWithReferringPtrFields(objects);
}
}
viewsToUpdate.push_back(rimView);
rimView->managedViewCollection()->allManagedViews(viewsToUpdate);
if (rimView != m_reservoirView)
{
viewsToUpdate.push_back(rimView);
}
rimView->managedViewCollection()->allViewsForCameraSync(viewsToUpdate);
}
// Propagate view matrix to all relevant views

View File

@ -74,7 +74,8 @@ public:
void updateNavigationPolicy();
virtual void update(); // Override of caf::Viewer::update()
virtual void update(); // Override of caf::Viewer::update()
void issueBaseClassUpdate();
public slots:
virtual void slotSetCurrentFrame(int frameIndex);
@ -86,7 +87,6 @@ private:
void mouseReleaseEvent(QMouseEvent* event);
void mousePressEvent(QMouseEvent* event);
void issueBaseClassUpdate();
QLabel* m_InfoLabel;
QLabel* m_versionInfoLabel;