mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
(#395) Propagate scaleZ to linked views and fixed camera sync issue (offset z must be multiplied by scaleZ)
This commit is contained in:
@@ -234,13 +234,16 @@ void RimLinkedViews::configureOverrides()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimLinkedViews::allViewsForCameraSync(std::vector<RimView*>& views)
|
void RimLinkedViews::allViewsForCameraSync(RimView* source, std::vector<RimView*>& views)
|
||||||
{
|
{
|
||||||
views.push_back(m_mainView());
|
if (source != m_mainView())
|
||||||
|
{
|
||||||
|
views.push_back(m_mainView());
|
||||||
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < viewConfigs.size(); i++)
|
for (size_t i = 0; i < viewConfigs.size(); i++)
|
||||||
{
|
{
|
||||||
if (viewConfigs[i]->syncCamera && viewConfigs[i]->managedView())
|
if (viewConfigs[i]->syncCamera && viewConfigs[i]->managedView() && source != viewConfigs[i]->managedView())
|
||||||
{
|
{
|
||||||
views.push_back(viewConfigs[i]->managedView());
|
views.push_back(viewConfigs[i]->managedView());
|
||||||
}
|
}
|
||||||
@@ -258,6 +261,7 @@ void RimLinkedViews::applyAllOperations()
|
|||||||
updateTimeStep(NULL, m_mainView->currentTimeStep());
|
updateTimeStep(NULL, m_mainView->currentTimeStep());
|
||||||
updateRangeFilters();
|
updateRangeFilters();
|
||||||
updatePropertyFilters();
|
updatePropertyFilters();
|
||||||
|
updateScaleZ(m_mainView, m_mainView->scaleZ());
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@@ -377,3 +381,18 @@ void RimLinkedViews::initAfterRead()
|
|||||||
m_name = displayNameForView(m_mainView);
|
m_name = displayNameForView(m_mainView);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimLinkedViews::updateScaleZ(RimView* source, double scaleZ)
|
||||||
|
{
|
||||||
|
std::vector<RimView*> views;
|
||||||
|
allViewsForCameraSync(source, views);
|
||||||
|
|
||||||
|
// Make sure scale factors are identical
|
||||||
|
for (size_t i = 0; i < views.size(); i++)
|
||||||
|
{
|
||||||
|
views[i]->setScaleZAndUpdate(scaleZ);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,8 @@ public:
|
|||||||
|
|
||||||
void configureOverrides();
|
void configureOverrides();
|
||||||
|
|
||||||
void allViewsForCameraSync(std::vector<RimView*>& views);
|
void updateScaleZ(RimView* source, double scaleZ);
|
||||||
|
void allViewsForCameraSync(RimView* source, std::vector<RimView*>& views);
|
||||||
void allViews(std::vector<RimView*>& views);
|
void allViews(std::vector<RimView*>& views);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -113,7 +113,14 @@ void RimManagedViewConfig::fieldChangedByUi(const caf::PdmFieldHandle* changedFi
|
|||||||
{
|
{
|
||||||
if (changedField == &syncCamera && syncCamera())
|
if (changedField == &syncCamera && syncCamera())
|
||||||
{
|
{
|
||||||
if (m_managedView && m_managedView->viewer()) m_managedView->viewer()->update();
|
RimLinkedViews* linkedViews = NULL;
|
||||||
|
this->firstAnchestorOrThisOfType(linkedViews);
|
||||||
|
linkedViews->updateScaleZ(linkedViews->mainView(), linkedViews->mainView()->scaleZ());
|
||||||
|
|
||||||
|
if (m_managedView && m_managedView->viewer())
|
||||||
|
{
|
||||||
|
m_managedView->viewer()->navigationPolicyUpdate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (changedField == &syncTimeStep && syncTimeStep())
|
else if (changedField == &syncTimeStep && syncTimeStep())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,8 +3,12 @@
|
|||||||
#include "RiaApplication.h"
|
#include "RiaApplication.h"
|
||||||
#include "RiaPreferences.h"
|
#include "RiaPreferences.h"
|
||||||
|
|
||||||
|
#include "RigCaseData.h"
|
||||||
|
|
||||||
#include "Rim3dOverlayInfoConfig.h"
|
#include "Rim3dOverlayInfoConfig.h"
|
||||||
#include "RimCellRangeFilterCollection.h"
|
#include "RimCellRangeFilterCollection.h"
|
||||||
|
#include "RimEclipseCase.h"
|
||||||
|
#include "RimEclipseView.h"
|
||||||
#include "RimLinkedViews.h"
|
#include "RimLinkedViews.h"
|
||||||
#include "RimManagedViewConfig.h"
|
#include "RimManagedViewConfig.h"
|
||||||
#include "RimOilField.h"
|
#include "RimOilField.h"
|
||||||
@@ -432,7 +436,20 @@ void RimView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QV
|
|||||||
|
|
||||||
updateScaleTransform();
|
updateScaleTransform();
|
||||||
createDisplayModelAndRedraw();
|
createDisplayModelAndRedraw();
|
||||||
m_viewer->update();
|
|
||||||
|
RimProject* proj = NULL;
|
||||||
|
this->firstAnchestorOrThisOfType(proj);
|
||||||
|
RimLinkedViews* linkedViews = proj->findLinkedViewsGroupForView(this);
|
||||||
|
if (linkedViews)
|
||||||
|
{
|
||||||
|
RimManagedViewConfig* viewConf = linkedViews->viewConfigForView(this);
|
||||||
|
if (!viewConf || viewConf->syncCamera())
|
||||||
|
{
|
||||||
|
linkedViews->updateScaleZ(this, scaleZ);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_viewer->navigationPolicyUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
RiuMainWindow::instance()->updateScaleValue();
|
RiuMainWindow::instance()->updateScaleValue();
|
||||||
@@ -567,19 +584,28 @@ void RimView::notifyCameraHasChanged()
|
|||||||
// There is no view config for a master view, but all views for sync must be updated
|
// There is no view config for a master view, but all views for sync must be updated
|
||||||
if (!viewConf || viewConf->syncCamera())
|
if (!viewConf || viewConf->syncCamera())
|
||||||
{
|
{
|
||||||
std::vector<RimView*> allViews;
|
linkedViews->allViewsForCameraSync(this, viewsToUpdate);
|
||||||
linkedViews->allViewsForCameraSync(allViews);
|
|
||||||
|
|
||||||
for (size_t i = 0; i < allViews.size(); i++)
|
|
||||||
{
|
|
||||||
if (allViews[i] != this)
|
|
||||||
{
|
|
||||||
viewsToUpdate.push_back(allViews[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cvf::Vec3d up;
|
||||||
|
cvf::Vec3d domainEye;
|
||||||
|
cvf::Vec3d domainViewRefPoint;
|
||||||
|
this->viewer()->mainCamera()->toLookAt(&domainEye, &domainViewRefPoint, &up);
|
||||||
|
|
||||||
|
RimEclipseView* eclipseView = dynamic_cast<RimEclipseView*>(this);
|
||||||
|
if (eclipseView
|
||||||
|
&& eclipseView->eclipseCase()
|
||||||
|
&& eclipseView->eclipseCase()->reservoirData()
|
||||||
|
&& eclipseView->eclipseCase()->reservoirData()->mainGrid())
|
||||||
|
{
|
||||||
|
cvf::Vec3d offset = eclipseView->eclipseCase()->reservoirData()->mainGrid()->displayModelOffset();
|
||||||
|
offset.z() *= eclipseView->scaleZ();
|
||||||
|
|
||||||
|
domainEye += offset;
|
||||||
|
domainViewRefPoint += offset;
|
||||||
|
}
|
||||||
|
|
||||||
// Propagate view matrix to all relevant views
|
// Propagate view matrix to all relevant views
|
||||||
|
|
||||||
const cvf::Mat4d mat = this->viewer()->mainCamera()->viewMatrix();
|
const cvf::Mat4d mat = this->viewer()->mainCamera()->viewMatrix();
|
||||||
@@ -587,10 +613,37 @@ void RimView::notifyCameraHasChanged()
|
|||||||
{
|
{
|
||||||
if (viewsToUpdate[i] && viewsToUpdate[i]->viewer())
|
if (viewsToUpdate[i] && viewsToUpdate[i]->viewer())
|
||||||
{
|
{
|
||||||
viewsToUpdate[i]->viewer()->mainCamera()->setViewMatrix(mat);
|
RimEclipseView* destEclipseView = dynamic_cast<RimEclipseView*>(viewsToUpdate[i]);
|
||||||
|
if (destEclipseView
|
||||||
|
&& destEclipseView->eclipseCase()
|
||||||
|
&& destEclipseView->eclipseCase()->reservoirData()
|
||||||
|
&& destEclipseView->eclipseCase()->reservoirData()->mainGrid())
|
||||||
|
{
|
||||||
|
cvf::Vec3d destOffset = destEclipseView->eclipseCase()->reservoirData()->mainGrid()->displayModelOffset();
|
||||||
|
destOffset.z() *= destEclipseView->scaleZ();
|
||||||
|
|
||||||
|
cvf::Vec3d eclipseEye = domainEye - destOffset;
|
||||||
|
cvf::Vec3d eclipseViewRefPoint = domainViewRefPoint - destOffset;
|
||||||
|
|
||||||
|
viewsToUpdate[i]->viewer()->mainCamera()->setFromLookAt(eclipseEye, eclipseViewRefPoint, up);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
viewsToUpdate[i]->viewer()->mainCamera()->setFromLookAt(domainEye, domainViewRefPoint, up);
|
||||||
|
}
|
||||||
|
|
||||||
viewsToUpdate[i]->viewer()->update();
|
viewsToUpdate[i]->viewer()->update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimView::setScaleZAndUpdate(double scaleZ)
|
||||||
|
{
|
||||||
|
this->scaleZ = scaleZ;
|
||||||
|
updateScaleTransform();
|
||||||
|
createDisplayModelAndRedraw();
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -108,6 +108,8 @@ public:
|
|||||||
void setShowFaultsOnly(bool showFaults);
|
void setShowFaultsOnly(bool showFaults);
|
||||||
bool isGridVisualizationMode() const;
|
bool isGridVisualizationMode() const;
|
||||||
|
|
||||||
|
void setScaleZAndUpdate(double scaleZ);
|
||||||
|
|
||||||
// Animation
|
// Animation
|
||||||
int currentTimeStep() { return m_currentTimeStep;}
|
int currentTimeStep() { return m_currentTimeStep;}
|
||||||
void setCurrentTimeStep(int frameIdx);
|
void setCurrentTimeStep(int frameIdx);
|
||||||
|
|||||||
Reference in New Issue
Block a user