#4849 Co-visualization: Simple use of the comparison view support in the Viewer classes

The feature is ready for testing.
This commit is contained in:
Jacob Støren 2019-10-11 09:47:30 +02:00
parent aee42f403b
commit b0f8dfa9e6
13 changed files with 523 additions and 178 deletions

View File

@ -43,7 +43,8 @@ RivGridBoxGenerator::RivGridBoxGenerator()
: m_gridColor( cvf::Color3f::LIGHT_GRAY )
, m_gridLegendColor( cvf::Color3f::BLACK )
{
m_gridBoxModel = new cvf::ModelBasicList;
m_gridBoxModel = new cvf::ModelBasicList();
m_gridBoxModel->setName( "GridBoxModel" );
m_scaleZ = 1.0;
m_displayModelOffset = cvf::Vec3d::ZERO;

View File

@ -184,7 +184,7 @@ bool Rim2dIntersectionView::isTimeStepDependentDataVisible() const
//--------------------------------------------------------------------------------------------------
void Rim2dIntersectionView::update3dInfo()
{
if ( !m_viewer ) return;
if ( !nativeOrOverrideViewer() ) return;
QString overlayInfoText;
@ -192,12 +192,12 @@ void Rim2dIntersectionView::update3dInfo()
m_intersection->firstAncestorOrThisOfType( eclView );
if ( eclView && !eclView->overlayInfoConfig()->isActive() )
{
m_viewer->showInfoText( false );
m_viewer->showHistogram( false );
m_viewer->showAnimationProgress( false );
m_viewer->showVersionInfo( false );
nativeOrOverrideViewer()->showInfoText( false );
nativeOrOverrideViewer()->showHistogram( false );
nativeOrOverrideViewer()->showAnimationProgress( false );
nativeOrOverrideViewer()->showVersionInfo( false );
m_viewer->update();
nativeOrOverrideViewer()->update();
return;
}
if ( eclView && eclView->overlayInfoConfig()->showCaseInfo() )
@ -233,11 +233,11 @@ void Rim2dIntersectionView::update3dInfo()
{
if ( eclView->overlayInfoConfig()->showAnimProgress() )
{
m_viewer->showAnimationProgress( true );
nativeOrOverrideViewer()->showAnimationProgress( true );
}
else
{
m_viewer->showAnimationProgress( false );
nativeOrOverrideViewer()->showAnimationProgress( false );
}
if ( eclView->overlayInfoConfig()->showResultInfo() )
@ -250,11 +250,11 @@ void Rim2dIntersectionView::update3dInfo()
{
if ( geoView->overlayInfoConfig()->showAnimProgress() )
{
m_viewer->showAnimationProgress( true );
nativeOrOverrideViewer()->showAnimationProgress( true );
}
else
{
m_viewer->showAnimationProgress( false );
nativeOrOverrideViewer()->showAnimationProgress( false );
}
if ( geoView->overlayInfoConfig()->showResultInfo() )
@ -296,9 +296,9 @@ void Rim2dIntersectionView::update3dInfo()
}
overlayInfoText += "</p>";
m_viewer->setInfoText( overlayInfoText );
m_viewer->showInfoText( true );
m_viewer->update();
nativeOrOverrideViewer()->setInfoText( overlayInfoText );
nativeOrOverrideViewer()->showInfoText( true );
nativeOrOverrideViewer()->update();
}
//--------------------------------------------------------------------------------------------------
@ -475,18 +475,18 @@ void Rim2dIntersectionView::axisLabels( cvf::String* xLabel, cvf::String* yLabel
//--------------------------------------------------------------------------------------------------
void Rim2dIntersectionView::createDisplayModel()
{
if ( m_viewer.isNull() ) return;
if ( !nativeOrOverrideViewer() ) return;
if ( !m_intersection() ) return;
updateScaleTransform();
m_viewer->removeAllFrames();
nativeOrOverrideViewer()->removeAllFrames( isUsingOverrideViewer() );
int tsCount = this->timeStepCount();
for ( int i = 0; i < tsCount; ++i )
{
m_viewer->addFrame( new cvf::Scene() );
nativeOrOverrideViewer()->addFrame( new cvf::Scene(), isUsingOverrideViewer() );
}
m_flatIntersectionPartMgr = new RivIntersectionPartMgr( m_intersection(), true );
@ -529,13 +529,13 @@ void Rim2dIntersectionView::createDisplayModel()
}
}
m_viewer->addStaticModelOnce( m_intersectionVizModel.p() );
nativeOrOverrideViewer()->addStaticModelOnce( m_intersectionVizModel.p(), isUsingOverrideViewer() );
m_intersectionVizModel->updateBoundingBoxesRecursive();
if ( this->hasUserRequestedAnimation() )
{
m_viewer->setCurrentFrame( m_currentTimeStep );
if ( viewer() ) viewer()->setCurrentFrame( m_currentTimeStep );
updateCurrentTimeStep();
}
@ -555,7 +555,7 @@ void Rim2dIntersectionView::updateCurrentTimeStep()
if ( m_flatSimWellPipePartMgr.notNull() )
{
cvf::Scene* frameScene = m_viewer->frame( m_currentTimeStep );
cvf::Scene* frameScene = nativeOrOverrideViewer()->frame( m_currentTimeStep, isUsingOverrideViewer() );
if ( frameScene )
{
{
@ -588,7 +588,7 @@ void Rim2dIntersectionView::updateCurrentTimeStep()
if ( m_flatWellpathPartMgr.notNull() )
{
cvf::Scene* frameScene = m_viewer->frame( m_currentTimeStep );
cvf::Scene* frameScene = nativeOrOverrideViewer()->frame( m_currentTimeStep, isUsingOverrideViewer() );
if ( frameScene )
{
{
@ -627,9 +627,9 @@ void Rim2dIntersectionView::updateLegends()
{
m_legendObjectToSelect = nullptr;
if ( !m_viewer ) return;
if ( !nativeOrOverrideViewer() ) return;
m_viewer->removeAllColorLegends();
nativeOrOverrideViewer()->removeAllColorLegends();
if ( !hasResults() ) return;
@ -678,7 +678,7 @@ void Rim2dIntersectionView::updateLegends()
if ( legend )
{
m_viewer->addColorLegendToBottomLeftCorner( legend );
nativeOrOverrideViewer()->addColorLegendToBottomLeftCorner( legend );
}
}
@ -687,15 +687,15 @@ void Rim2dIntersectionView::updateLegends()
//--------------------------------------------------------------------------------------------------
void Rim2dIntersectionView::resetLegendsInViewer()
{
m_viewer->showAxisCross( false );
m_viewer->showAnimationProgress( true );
m_viewer->showHistogram( false );
m_viewer->showInfoText( false );
m_viewer->showVersionInfo( false );
m_viewer->showEdgeTickMarksXZ( true, m_showAxisLines() );
nativeOrOverrideViewer()->showAxisCross( false );
nativeOrOverrideViewer()->showAnimationProgress( true );
nativeOrOverrideViewer()->showHistogram( false );
nativeOrOverrideViewer()->showInfoText( false );
nativeOrOverrideViewer()->showVersionInfo( false );
nativeOrOverrideViewer()->showEdgeTickMarksXZ( true, m_showAxisLines() );
m_viewer->setMainScene( new cvf::Scene() );
m_viewer->enableNavigationRotation( false );
nativeOrOverrideViewer()->setMainScene( new cvf::Scene(), isUsingOverrideViewer() );
nativeOrOverrideViewer()->enableNavigationRotation( false );
m_ternaryLegendConfig()->recreateLegend();
m_legendConfig()->recreateLegend();
@ -730,7 +730,7 @@ void Rim2dIntersectionView::updateScaleTransform()
this->scaleTransform()->setLocalTransform( scale );
if ( m_viewer ) m_viewer->updateCachedValuesInScene();
if ( nativeOrOverrideViewer() ) nativeOrOverrideViewer()->updateCachedValuesInScene();
}
//--------------------------------------------------------------------------------------------------
@ -766,7 +766,7 @@ void Rim2dIntersectionView::fieldChangedByUi( const caf::PdmFieldHandle* changed
}
else if ( changedField == &m_showAxisLines )
{
m_viewer->showEdgeTickMarksXZ( true, m_showAxisLines() );
nativeOrOverrideViewer()->showEdgeTickMarksXZ( true, m_showAxisLines() );
this->loadDataAndUpdate();
}
}

View File

@ -21,6 +21,7 @@
#include "RiaFieldHandleTools.h"
#include "RiaGuiApplication.h"
#include "RiaOptionItemFactory.h"
#include "RiaPreferences.h"
#include "RiaViewRedrawScheduler.h"
@ -36,6 +37,7 @@
#include "RimTools.h"
#include "RimViewController.h"
#include "RimViewLinker.h"
#include "RimViewManipulator.h"
#include "RimViewNameConfig.h"
#include "RimWellPathCollection.h"
@ -127,6 +129,16 @@ Rim3dView::Rim3dView( void )
CAF_PDM_InitField( &m_showZScaleLabel, "ShowZScale", true, "Show Z Scale Label", "", "", "" );
CAF_PDM_InitField( &m_isComparisonViewEnabled, "EnableComparisonView", false, "Enable", "", "", "" );
CAF_PDM_InitFieldNoDefault( &m_comparisonView, "ComparisonView", "Comparison View", "", "", "" );
CAF_PDM_InitField( &m_isComparisonViewLinkingTimestep,
"EnableComparisonViewTimestepLinking",
true,
"Link Timestep",
"",
"",
"" );
m_crossSectionVizModel = new cvf::ModelBasicList;
m_crossSectionVizModel->setName( "CrossSectionModel" );
@ -165,6 +177,32 @@ RiuViewer* Rim3dView::viewer() const
return m_viewer;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RiuViewer* Rim3dView::nativeOrOverrideViewer() const
{
if ( m_overrideViewer ) return m_overrideViewer;
return m_viewer;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView::setOverrideViewer( RiuViewer* overrideViewer )
{
m_overrideViewer = overrideViewer;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool Rim3dView::isUsingOverrideViewer() const
{
return m_overrideViewer != nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -299,6 +337,11 @@ void Rim3dView::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOr
gridGroup->add( &meshMode );
gridGroup->add( &surfaceMode );
caf::PdmUiGroup* compViewGroup = uiOrdering.addNewGroup( "Comparison View" );
compViewGroup->add( &m_isComparisonViewEnabled );
compViewGroup->add( &m_comparisonView );
compViewGroup->add( &m_isComparisonViewLinkingTimestep );
uiOrdering.skipRemainingFields( true );
}
@ -345,6 +388,17 @@ void Rim3dView::setCurrentTimeStepAndUpdate( int frameIndex )
this->updateCurrentTimeStep();
if ( Rim3dView* depView = activeComparisonView() )
{
prepareComparisonView();
depView->updateCurrentTimeStep();
depView->appendAnnotationsToModel();
depView->appendMeasurementToModel();
restoreComparisonView();
}
RimProject* project;
firstAncestorOrThisOfTypeAsserted( project );
project->mainPlotCollection()->updateCurrentTimeStepInPlots();
@ -353,6 +407,20 @@ void Rim3dView::setCurrentTimeStepAndUpdate( int frameIndex )
appendMeasurementToModel();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool Rim3dView::isTimeStepDependentDataVisibleInThisOrComparisonView() const
{
Rim3dView* otherView = activeComparisonView();
if ( !otherView && isUsingOverrideViewer() )
{
otherView = dynamic_cast<Rim3dView*>( nativeOrOverrideViewer()->ownerReservoirView() );
}
return ( isTimeStepDependentDataVisible() || ( otherView && otherView->isTimeStepDependentDataVisible() ) );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -387,11 +455,20 @@ void Rim3dView::updateCurrentTimeStepAndRedraw()
{
this->updateCurrentTimeStep();
if ( Rim3dView* depView = activeComparisonView() )
{
prepareComparisonView();
depView->updateCurrentTimeStep();
restoreComparisonView();
}
RimProject* project;
firstAncestorOrThisOfTypeAsserted( project );
project->mainPlotCollection()->updateCurrentTimeStepInPlots();
if ( m_viewer ) m_viewer->update();
if ( nativeOrOverrideViewer() ) nativeOrOverrideViewer()->update();
}
//--------------------------------------------------------------------------------------------------
@ -399,10 +476,12 @@ void Rim3dView::updateCurrentTimeStepAndRedraw()
//--------------------------------------------------------------------------------------------------
void Rim3dView::createDisplayModelAndRedraw()
{
if ( m_viewer )
if ( nativeOrOverrideViewer() )
{
this->clampCurrentTimestep();
updateScaleTransform();
createDisplayModel();
createHighlightAndGridBoxDisplayModel();
updateDisplayModelVisibility();
@ -410,8 +489,30 @@ void Rim3dView::createDisplayModelAndRedraw()
if ( m_cameraPosition().isIdentity() )
{
setDefaultView();
m_cameraPosition = m_viewer->mainCamera()->viewMatrix();
m_cameraPointOfInterest = m_viewer->pointOfInterest();
m_cameraPosition = nativeOrOverrideViewer()->mainCamera()->viewMatrix();
m_cameraPointOfInterest = nativeOrOverrideViewer()->pointOfInterest();
}
if ( Rim3dView* depView = activeComparisonView() )
{
prepareComparisonView();
depView->createDisplayModelAndRedraw();
if ( isTimeStepDependentDataVisibleInThisOrComparisonView() )
{
// To make the override viewer see the new frame (skeletons) created by createDisplayModelAndRedraw
nativeOrOverrideViewer()->slotSetCurrentFrame( currentTimeStep() );
depView->updateCurrentTimeStep();
}
restoreComparisonView();
}
else if ( viewer() )
{
// Remove the comparison scene data
viewer()->setMainScene( nullptr, true );
viewer()->removeAllFrames( true );
}
}
@ -662,6 +763,24 @@ void Rim3dView::fieldChangedByUi( const caf::PdmFieldHandle* changedField,
m_viewer->showZScaleLabel( m_showZScaleLabel() );
m_viewer->update();
}
else if ( changedField == &m_isComparisonViewEnabled )
{
createDisplayModelAndRedraw();
}
else if ( changedField == &m_comparisonView )
{
if ( m_isComparisonViewEnabled() )
{
createDisplayModelAndRedraw();
}
}
else if ( changedField == &m_isComparisonViewLinkingTimestep )
{
if ( m_isComparisonViewEnabled() && m_comparisonView() )
{
createDisplayModelAndRedraw();
}
}
}
//--------------------------------------------------------------------------------------------------
@ -743,7 +862,7 @@ void Rim3dView::addMeasurementToModel( cvf::ModelBasicList* wellPathModelBasicLi
else
{
cvf::ref<caf::DisplayCoordTransform> transForm = displayCoordTransform();
m_measurementPartManager->appendGeometryPartsToModel( m_viewer->mainCamera(),
m_measurementPartManager->appendGeometryPartsToModel( nativeOrOverrideViewer()->mainCamera(),
wellPathModelBasicList,
transForm.p(),
ownerCase()->allCellsBoundingBox() );
@ -784,13 +903,34 @@ bool Rim3dView::isMasterView() const
//--------------------------------------------------------------------------------------------------
void Rim3dView::updateGridBoxData()
{
if ( m_viewer && ownerCase() )
if ( viewer() && ownerCase() )
{
m_viewer->updateGridBoxData( scaleZ(),
ownerCase()->displayModelOffset(),
backgroundColor(),
showActiveCellsOnly() ? ownerCase()->activeCellsBoundingBox()
: ownerCase()->allCellsBoundingBox() );
using BBox = cvf::BoundingBox;
BBox masterDomainBBox = showActiveCellsOnly() ? ownerCase()->activeCellsBoundingBox()
: ownerCase()->allCellsBoundingBox();
BBox combinedDomainBBox = masterDomainBBox;
if ( Rim3dView* depView = activeComparisonView() )
{
viewer()->setComparisonViewEyePointOffset(
RimViewManipulator::calculateEquivalentCamPosOffset( this, depView ) );
RimCase* destinationOwnerCase = depView->ownerCase();
if ( destinationOwnerCase )
{
BBox depDomainBBox = depView->showActiveCellsOnly() ? destinationOwnerCase->activeCellsBoundingBox()
: destinationOwnerCase->allCellsBoundingBox();
if ( depDomainBBox.isValid() )
{
combinedDomainBBox.add( depDomainBBox.min() );
combinedDomainBBox.add( depDomainBBox.max() );
}
}
}
viewer()->updateGridBoxData( scaleZ(), ownerCase()->displayModelOffset(), backgroundColor(), combinedDomainBBox );
}
}
@ -799,9 +939,9 @@ void Rim3dView::updateGridBoxData()
//--------------------------------------------------------------------------------------------------
void Rim3dView::updateAnnotationItems()
{
if ( m_viewer )
if ( nativeOrOverrideViewer() )
{
m_viewer->updateAnnotationItems();
nativeOrOverrideViewer()->updateAnnotationItems();
}
}
@ -812,26 +952,24 @@ void Rim3dView::updateScaling()
{
if ( scaleZ < 1 ) scaleZ = 1;
this->updateGridBoxData();
if ( m_viewer )
if ( viewer() )
{
cvf::Vec3d poi = m_viewer->pointOfInterest();
cvf::Vec3d poi = viewer()->pointOfInterest();
cvf::Vec3d eye, dir, up;
eye = m_viewer->mainCamera()->position();
dir = m_viewer->mainCamera()->direction();
up = m_viewer->mainCamera()->up();
eye = viewer()->mainCamera()->position();
dir = viewer()->mainCamera()->direction();
up = viewer()->mainCamera()->up();
eye[2] = poi[2] * scaleZ() / this->scaleTransform()->worldTransform()( 2, 2 ) + ( eye[2] - poi[2] );
poi[2] = poi[2] * scaleZ() / this->scaleTransform()->worldTransform()( 2, 2 );
m_viewer->mainCamera()->setFromLookAt( eye, eye + dir, up );
m_viewer->setPointOfInterest( poi );
viewer()->mainCamera()->setFromLookAt( eye, eye + dir, up );
viewer()->setPointOfInterest( poi );
updateScaleTransform();
createDisplayModelAndRedraw();
m_viewer->update();
viewer()->update();
updateZScaleLabel();
}
@ -844,7 +982,7 @@ void Rim3dView::updateZScaleLabel()
{
// Update Z scale label
int scale = static_cast<int>( scaleZ() );
m_viewer->setZScale( scale );
nativeOrOverrideViewer()->setZScale( scale );
}
//--------------------------------------------------------------------------------------------------
@ -855,7 +993,7 @@ void Rim3dView::updateMeasurement()
if ( m_viewer )
{
appendMeasurementToModel();
m_viewer->update();
nativeOrOverrideViewer()->update();
}
}
@ -866,9 +1004,9 @@ void Rim3dView::createHighlightAndGridBoxDisplayModelWithRedraw()
{
createHighlightAndGridBoxDisplayModel();
if ( m_viewer )
if ( nativeOrOverrideViewer() )
{
m_viewer->update();
nativeOrOverrideViewer()->update();
}
}
@ -877,7 +1015,9 @@ void Rim3dView::createHighlightAndGridBoxDisplayModelWithRedraw()
//--------------------------------------------------------------------------------------------------
void Rim3dView::createHighlightAndGridBoxDisplayModel()
{
m_viewer->removeStaticModel( m_highlightVizModel.p() );
if ( !nativeOrOverrideViewer() ) return;
nativeOrOverrideViewer()->removeStaticModel( m_highlightVizModel.p() );
m_highlightVizModel->removeAllParts();
@ -891,10 +1031,12 @@ void Rim3dView::createHighlightAndGridBoxDisplayModel()
}
m_highlightVizModel->updateBoundingBoxesRecursive();
m_viewer->addStaticModelOnce( m_highlightVizModel.p() );
nativeOrOverrideViewer()->addStaticModelOnce( m_highlightVizModel.p(), isUsingOverrideViewer() );
}
m_viewer->showGridBox( m_showGridBox() );
this->updateGridBoxData();
if ( viewer() ) viewer()->showGridBox( m_showGridBox() );
}
//--------------------------------------------------------------------------------------------------
@ -918,10 +1060,10 @@ void Rim3dView::setShowGridBox( bool showGridBox )
//--------------------------------------------------------------------------------------------------
void Rim3dView::applyBackgroundColorAndFontChanges()
{
if ( m_viewer != nullptr )
if ( viewer() != nullptr )
{
m_viewer->mainCamera()->viewport()->setClearColor( cvf::Color4f( backgroundColor() ) );
m_viewer->updateFonts();
viewer()->mainCamera()->viewport()->setClearColor( cvf::Color4f( backgroundColor() ) );
viewer()->updateFonts();
}
updateGridBoxData();
updateAnnotationItems();
@ -941,7 +1083,7 @@ void Rim3dView::performAutoNameUpdate()
//--------------------------------------------------------------------------------------------------
void Rim3dView::updateDisplayModelVisibility()
{
if ( m_viewer.isNull() ) return;
if ( viewer() == nullptr || isUsingOverrideViewer() ) return;
const cvf::uint uintSurfaceBit = surfaceBit;
const cvf::uint uintMeshSurfaceBit = meshSurfaceBit;
@ -982,8 +1124,10 @@ void Rim3dView::updateDisplayModelVisibility()
mask |= intersectionFaultMeshBit;
}
m_viewer->setEnableMask( mask );
m_viewer->update();
viewer()->setEnableMask( mask, false );
viewer()->setEnableMask( mask, true );
viewer()->update();
}
//--------------------------------------------------------------------------------------------------
@ -1048,6 +1192,37 @@ bool Rim3dView::applyFontSize( RiaDefines::FontSettingType fontSettingType,
return false;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QList<caf::PdmOptionItemInfo> Rim3dView::calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions,
bool* useOptionsOnly )
{
QList<caf::PdmOptionItemInfo> options;
if ( fieldNeedingOptions == &m_comparisonView )
{
RimProject* proj;
this->firstAncestorOrThisOfType( proj );
if ( proj )
{
std::vector<Rim3dView*> views;
proj->allViews( views );
for ( auto view : views )
{
if ( view != this ) RiaOptionItemFactory::appendOptionItemFromViewNameAndCaseName( view, &options );
}
if ( !options.empty() )
{
options.push_front( caf::PdmOptionItemInfo( "None", nullptr ) );
}
}
}
return options;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -1132,9 +1307,9 @@ void Rim3dView::setMdiWindowGeometry( const RimMdiWindowGeometry& windowGeometry
//--------------------------------------------------------------------------------------------------
void Rim3dView::appendAnnotationsToModel()
{
if ( !m_viewer ) return;
if ( !nativeOrOverrideViewer() ) return;
cvf::Scene* frameScene = m_viewer->frame( m_currentTimeStep );
cvf::Scene* frameScene = nativeOrOverrideViewer()->frame( m_currentTimeStep, isUsingOverrideViewer() );
if ( frameScene )
{
cvf::String name = "Annotations";
@ -1154,9 +1329,9 @@ void Rim3dView::appendAnnotationsToModel()
//--------------------------------------------------------------------------------------------------
void Rim3dView::appendMeasurementToModel()
{
if ( !m_viewer ) return;
if ( !nativeOrOverrideViewer() ) return;
cvf::Scene* frameScene = m_viewer->frame( m_currentTimeStep );
cvf::Scene* frameScene = nativeOrOverrideViewer()->frame( m_currentTimeStep, isUsingOverrideViewer() );
if ( frameScene )
{
cvf::String name = "Measurement";
@ -1170,3 +1345,52 @@ void Rim3dView::appendMeasurementToModel()
frameScene->addModel( model.p() );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
Rim3dView* Rim3dView::activeComparisonView() const
{
if ( m_isComparisonViewEnabled() )
{
return m_comparisonView();
}
else
{
return nullptr;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView::prepareComparisonView()
{
Rim3dView* depView = activeComparisonView();
CVF_ASSERT( depView );
// prepareComparisonView
m_comparisonViewOrgTimestep = depView->currentTimeStep();
depView->m_currentTimeStep = currentTimeStep();
depView->clampCurrentTimestep();
m_comparisonViewOrgZScale = depView->scaleZ();
depView->scaleZ = scaleZ();
viewer()->setComparisonViewEyePointOffset( RimViewManipulator::calculateEquivalentCamPosOffset( this, depView ) );
depView->setOverrideViewer( viewer() );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView::restoreComparisonView()
{
Rim3dView* depView = activeComparisonView();
CVF_ASSERT( depView );
depView->setOverrideViewer( nullptr );
depView->m_currentTimeStep = m_comparisonViewOrgTimestep;
depView->scaleZ = m_comparisonViewOrgZScale;
}

View File

@ -28,6 +28,7 @@
#include "cafAppEnum.h"
#include "cafPdmField.h"
#include "cafPdmObject.h"
#include "cafPdmPtrField.h"
#include "cafPdmFieldCvfColor.h"
#include "cafPdmFieldCvfMat4d.h"
@ -145,6 +146,7 @@ public:
}
void setCurrentTimeStep( int frameIdx );
void setCurrentTimeStepAndUpdate( int frameIdx ) override;
bool isTimeStepDependentDataVisibleInThisOrComparisonView() const;
virtual bool isTimeStepDependentDataVisible() const = 0;
// Updating
@ -172,6 +174,9 @@ public:
int fontSize,
bool forceChange = false ) override;
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions,
bool* useOptionsOnly ) override;
protected:
static void removeModelByName( cvf::Scene* scene, const cvf::String& modelName );
@ -193,7 +198,10 @@ protected:
void addAnnotationsToModel( cvf::ModelBasicList* wellPathModelBasicList );
void addMeasurementToModel( cvf::ModelBasicList* wellPathModelBasicList );
void createHighlightAndGridBoxDisplayModel();
// Override viewer
RiuViewer* nativeOrOverrideViewer() const;
bool isUsingOverrideViewer() const;
// Implementation of RimNameConfigHolderInterface
void performAutoNameUpdate() override;
@ -202,15 +210,14 @@ protected:
virtual void axisLabels( cvf::String* xLabel, cvf::String* yLabel, cvf::String* zLabel ) = 0;
virtual void createDisplayModel() = 0;
virtual void createPartCollectionFromSelection( cvf::Collection<cvf::Part>* parts ) = 0;
virtual void createDisplayModel() = 0;
virtual void updateDisplayModelVisibility();
virtual void clampCurrentTimestep() = 0;
virtual void clampCurrentTimestep() = 0;
virtual void updateCurrentTimeStep() = 0;
virtual void onTimeStepChanged() = 0;
virtual void updateCurrentTimeStep() = 0;
virtual void onTimeStepChanged() = 0;
virtual void updateStaticCellColors() = 0;
virtual void createPartCollectionFromSelection( cvf::Collection<cvf::Part>* parts ) = 0;
virtual void updateStaticCellColors() = 0;
virtual void updateScaleTransform() = 0;
virtual cvf::Transform* scaleTransform() = 0;
@ -221,8 +228,6 @@ protected: // Fields
caf::PdmField<int> m_currentTimeStep;
protected:
QPointer<RiuViewer> m_viewer;
cvf::ref<cvf::ModelBasicList> m_wellPathPipeVizModel;
cvf::ref<cvf::ModelBasicList> m_crossSectionVizModel;
cvf::ref<cvf::ModelBasicList> m_highlightVizModel;
@ -263,22 +268,44 @@ private:
{
m_cameraPosition = cameraPosition;
}
void setCameraPointOfInterest( const cvf::Vec3d& cameraPointOfInterest ) override
{
m_cameraPointOfInterest = cameraPointOfInterest;
}
QString timeStepName( int frameIdx ) const override;
void endAnimation() override;
QString timeStepName( int frameIdx ) const override;
void endAnimation() override;
caf::PdmObjectHandle* implementingPdmObject() override
{
return this;
}
void handleMdiWindowClosed() override;
void setMdiWindowGeometry( const RimMdiWindowGeometry& windowGeometry ) override;
// Pure private methods
void createHighlightAndGridBoxDisplayModel();
void appendAnnotationsToModel();
void appendMeasurementToModel();
// Pure private methods : Override viewer and comparison view
void setOverrideViewer( RiuViewer* overrideViewer );
Rim3dView* activeComparisonView() const;
void prepareComparisonView();
void restoreComparisonView();
private:
QPointer<RiuViewer> m_viewer;
QPointer<RiuViewer> m_overrideViewer;
int m_comparisonViewOrgTimestep;
double m_comparisonViewOrgZScale;
caf::PdmField<QString> m_name_OBSOLETE;
caf::PdmChildField<RimViewNameConfig*> m_nameConfig;
caf::PdmField<bool> m_disableLighting;
@ -287,4 +314,7 @@ private:
caf::PdmField<cvf::Color3f> m_backgroundColor;
caf::PdmField<bool> m_showGridBox;
caf::PdmField<bool> m_showZScaleLabel;
caf::PdmField<bool> m_isComparisonViewEnabled;
caf::PdmPtrField<Rim3dView*> m_comparisonView;
caf::PdmField<bool> m_isComparisonViewLinkingTimestep;
};

View File

@ -140,9 +140,9 @@ void RimEclipseContourMapView::setDefaultCustomName()
void RimEclipseContourMapView::updatePickPointAndRedraw()
{
appendPickPointVisToModel();
if ( m_viewer )
if ( nativeOrOverrideViewer() )
{
m_viewer->update();
nativeOrOverrideViewer()->update();
}
}
@ -285,7 +285,7 @@ void RimEclipseContourMapView::setFaultVisParameters()
//--------------------------------------------------------------------------------------------------
void RimEclipseContourMapView::createContourMapGeometry()
{
if ( m_viewer && m_contourMapProjection->isChecked() )
if ( nativeOrOverrideViewer() && m_contourMapProjection->isChecked() )
{
m_contourMapProjectionPartMgr->createProjectionGeometry();
}
@ -296,9 +296,9 @@ void RimEclipseContourMapView::createContourMapGeometry()
//--------------------------------------------------------------------------------------------------
void RimEclipseContourMapView::appendContourMapProjectionToModel()
{
if ( m_viewer && m_contourMapProjection->isChecked() )
if ( nativeOrOverrideViewer() && m_contourMapProjection->isChecked() )
{
cvf::Scene* frameScene = m_viewer->frame( m_currentTimeStep );
cvf::Scene* frameScene = nativeOrOverrideViewer()->frame( m_currentTimeStep, isUsingOverrideViewer() );
if ( frameScene )
{
cvf::String name = "ContourMapProjection";
@ -322,9 +322,9 @@ void RimEclipseContourMapView::appendContourMapProjectionToModel()
//--------------------------------------------------------------------------------------------------
void RimEclipseContourMapView::appendContourLinesToModel()
{
if ( m_viewer && m_contourMapProjection->isChecked() )
if ( nativeOrOverrideViewer() && m_contourMapProjection->isChecked() )
{
cvf::Scene* frameScene = m_viewer->frame( m_currentTimeStep );
cvf::Scene* frameScene = nativeOrOverrideViewer()->frame( m_currentTimeStep, isUsingOverrideViewer() );
if ( frameScene )
{
cvf::String name = "ContourMapLines";
@ -349,9 +349,9 @@ void RimEclipseContourMapView::appendContourLinesToModel()
//--------------------------------------------------------------------------------------------------
void RimEclipseContourMapView::appendPickPointVisToModel()
{
if ( m_viewer && m_contourMapProjection->isChecked() )
if ( nativeOrOverrideViewer() && m_contourMapProjection->isChecked() )
{
cvf::Scene* frameScene = m_viewer->frame( m_currentTimeStep );
cvf::Scene* frameScene = nativeOrOverrideViewer()->frame( m_currentTimeStep, isUsingOverrideViewer() );
if ( frameScene )
{
cvf::String name = "ContourMapPickPoint";
@ -375,9 +375,16 @@ void RimEclipseContourMapView::appendPickPointVisToModel()
//--------------------------------------------------------------------------------------------------
void RimEclipseContourMapView::updateLegends()
{
if ( m_viewer )
if ( nativeOrOverrideViewer() )
{
m_viewer->removeAllColorLegends();
if ( !isUsingOverrideViewer() )
{
nativeOrOverrideViewer()->removeAllColorLegends();
}
else if ( m_contourMapProjection && m_contourMapProjection->legendConfig() )
{
nativeOrOverrideViewer()->removeColorLegend( m_contourMapProjection->legendConfig()->titledOverlayFrame() );
}
if ( m_contourMapProjection && m_contourMapProjection->isChecked() )
{
@ -387,12 +394,12 @@ void RimEclipseContourMapView::updateLegends()
m_contourMapProjection->updateLegend();
if ( projectionLegend->showLegend() )
{
m_viewer->addColorLegendToBottomLeftCorner( projectionLegend->titledOverlayFrame() );
nativeOrOverrideViewer()->addColorLegendToBottomLeftCorner( projectionLegend->titledOverlayFrame() );
}
}
}
m_viewer->showScaleLegend( m_showScaleLegend() );
nativeOrOverrideViewer()->showScaleLegend( m_showScaleLegend() );
}
}
@ -401,11 +408,11 @@ void RimEclipseContourMapView::updateLegends()
//--------------------------------------------------------------------------------------------------
void RimEclipseContourMapView::updateViewWidgetAfterCreation()
{
if ( m_viewer )
if ( viewer() )
{
m_viewer->showAxisCross( false );
m_viewer->showEdgeTickMarksXY( true, m_showAxisLines() );
m_viewer->enableNavigationRotation( false );
viewer()->showAxisCross( false );
viewer()->showEdgeTickMarksXY( true, m_showAxisLines() );
viewer()->enableNavigationRotation( false );
}
Rim3dView::updateViewWidgetAfterCreation();
@ -426,9 +433,9 @@ void RimEclipseContourMapView::updateViewFollowingRangeFilterUpdates()
void RimEclipseContourMapView::onLoadDataAndUpdate()
{
RimEclipseView::onLoadDataAndUpdate();
if ( m_viewer )
if ( nativeOrOverrideViewer() )
{
m_viewer->setView( cvf::Vec3d( 0, 0, -1 ), cvf::Vec3d( 0, 1, 0 ) );
nativeOrOverrideViewer()->setView( cvf::Vec3d( 0, 0, -1 ), cvf::Vec3d( 0, 1, 0 ) );
}
}
@ -443,7 +450,7 @@ void RimEclipseContourMapView::fieldChangedByUi( const caf::PdmFieldHandle* chan
if ( changedField == &m_showAxisLines )
{
m_viewer->showEdgeTickMarksXY( true, m_showAxisLines() );
viewer()->showEdgeTickMarksXY( true, m_showAxisLines() );
scheduleCreateDisplayModelAndRedraw();
}
else if ( changedField == backgroundColorField() )

View File

@ -338,7 +338,7 @@ void RimEclipseView::updateScaleTransform()
this->scaleTransform()->setLocalTransform( scale );
m_simWellsPartManager->setScaleTransform( this->scaleTransform() );
if ( m_viewer ) m_viewer->updateCachedValuesInScene();
if ( nativeOrOverrideViewer() ) nativeOrOverrideViewer()->updateCachedValuesInScene();
}
//--------------------------------------------------------------------------------------------------
@ -350,7 +350,7 @@ void RimEclipseView::createDisplayModel()
{
clearReservoirCellVisibilities();
if ( m_viewer.isNull() ) return;
if ( nativeOrOverrideViewer() == nullptr ) return;
#if 0 // Debug info
static int callCount = 0;
@ -369,7 +369,7 @@ void RimEclipseView::createDisplayModel()
// Find the number of time frames the animation needs to show the requested data.
if ( isTimeStepDependentDataVisible() && currentGridCellResults()->maxTimeStepCount() > 0 )
if ( ( isTimeStepDependentDataVisibleInThisOrComparisonView() && currentGridCellResults()->maxTimeStepCount() > 0 ) )
{
CVF_ASSERT( currentGridCellResults() );
@ -395,7 +395,7 @@ void RimEclipseView::createDisplayModel()
// Remove all existing animation frames from the viewer.
// The parts are still cached in the RivReservoir geometry and friends
m_viewer->removeAllFrames();
nativeOrOverrideViewer()->removeAllFrames(isUsingOverrideViewer());
wellCollection()->scheduleIsWellPipesVisibleRecalculation();
@ -517,7 +517,7 @@ void RimEclipseView::createDisplayModel()
m_crossSectionCollection->appendPartsToModel( *this,
m_crossSectionVizModel.p(),
m_reservoirGridPartManager->scaleTransform() );
m_viewer->addStaticModelOnce( m_crossSectionVizModel.p() );
nativeOrOverrideViewer()->addStaticModelOnce( m_crossSectionVizModel.p(), isUsingOverrideViewer() );
// Well path model
@ -532,7 +532,7 @@ void RimEclipseView::createDisplayModel()
m_wellPathsPartManager->appendStaticFracturePartsToModel( m_wellPathPipeVizModel.p(),
currentActiveCellInfo()->geometryBoundingBox() );
m_wellPathPipeVizModel->updateBoundingBoxesRecursive();
m_viewer->addStaticModelOnce( m_wellPathPipeVizModel.p() );
nativeOrOverrideViewer()->addStaticModelOnce( m_wellPathPipeVizModel.p(), isUsingOverrideViewer() );
// Create Scenes from the frameModels
// Animation frames for results display, starts from frame 1
@ -547,16 +547,16 @@ void RimEclipseView::createDisplayModel()
scene->addModel( model );
if ( frameIndex == 0 )
m_viewer->setMainScene( scene.p() );
nativeOrOverrideViewer()->setMainScene( scene.p() ,isUsingOverrideViewer() );
else
m_viewer->addFrame( scene.p() );
nativeOrOverrideViewer()->addFrame( scene.p() , isUsingOverrideViewer() );
}
// If the animation was active before recreating everything, make viewer view current frame
if ( frameModels.size() > 1 && this->hasUserRequestedAnimation() )
{
m_viewer->setCurrentFrame( m_currentTimeStep );
if (viewer()) viewer()->setCurrentFrame( m_currentTimeStep );
}
else
{
@ -716,9 +716,9 @@ void RimEclipseView::updateVisibleGeometriesAndCellColors()
}
}
if ( m_viewer )
if ( nativeOrOverrideViewer() )
{
cvf::Scene* frameScene = m_viewer->frame( m_currentTimeStep );
cvf::Scene* frameScene = nativeOrOverrideViewer()->frame( m_currentTimeStep, isUsingOverrideViewer() );
if ( frameScene )
{
this->removeModelByName( frameScene, frameParts->name() );
@ -792,9 +792,9 @@ void RimEclipseView::updateVisibleGeometriesAndCellColors()
//--------------------------------------------------------------------------------------------------
void RimEclipseView::appendWellsAndFracturesToModel()
{
if ( m_viewer )
if ( nativeOrOverrideViewer() )
{
cvf::Scene* frameScene = m_viewer->frame( m_currentTimeStep );
cvf::Scene* frameScene = nativeOrOverrideViewer()->frame( m_currentTimeStep, isUsingOverrideViewer() );
if ( frameScene )
{
// Simulation Wells
@ -1161,12 +1161,25 @@ std::vector<size_t> RimEclipseView::indicesToVisibleGrids() const
//--------------------------------------------------------------------------------------------------
void RimEclipseView::updateLegends()
{
if ( m_viewer )
if ( nativeOrOverrideViewer() )
{
m_viewer->removeAllColorLegends();
if ( !isUsingOverrideViewer() )
{
nativeOrOverrideViewer()->removeAllColorLegends();
}
else
{
nativeOrOverrideViewer()->removeColorLegend( this->cellEdgeResult()->legendConfig()->titledOverlayFrame() );
nativeOrOverrideViewer()->removeColorLegend( fractureColors()->activeLegend()->titledOverlayFrame() );
nativeOrOverrideViewer()->removeColorLegend( m_virtualPerforationResult->legendConfig()->titledOverlayFrame() );
nativeOrOverrideViewer()->removeColorLegend( this->cellResult()->legendConfig()->titledOverlayFrame() );
nativeOrOverrideViewer()->removeColorLegend( this->cellResult()->ternaryLegendConfig()->titledOverlayFrame() );
nativeOrOverrideViewer()->removeColorLegend( this->currentFaultResultColors()->legendConfig()->titledOverlayFrame() );
nativeOrOverrideViewer()->removeColorLegend( this->currentFaultResultColors()->ternaryLegendConfig()->titledOverlayFrame() );
}
}
if ( !m_eclipseCase || !m_viewer || !m_eclipseCase->eclipseCaseData() )
if ( !m_eclipseCase || !nativeOrOverrideViewer() || !m_eclipseCase->eclipseCaseData() )
{
return;
}
@ -1222,7 +1235,7 @@ void RimEclipseView::updateLegends()
this->cellEdgeResult()->legendConfig()->setTitle( QString( "Edge Results: \n" ) +
this->cellEdgeResult()->resultVariableUiShortName() );
m_viewer->addColorLegendToBottomLeftCorner( this->cellEdgeResult()->legendConfig()->titledOverlayFrame() );
nativeOrOverrideViewer()->addColorLegendToBottomLeftCorner( this->cellEdgeResult()->legendConfig()->titledOverlayFrame() );
}
else
{
@ -1255,7 +1268,7 @@ void RimEclipseView::updateLegends()
if ( fractureColors()->isChecked() && stimPlanLegend->titledOverlayFrame() )
{
m_viewer->addColorLegendToBottomLeftCorner( stimPlanLegend->titledOverlayFrame() );
nativeOrOverrideViewer()->addColorLegendToBottomLeftCorner( stimPlanLegend->titledOverlayFrame() );
}
}
}
@ -1266,7 +1279,7 @@ void RimEclipseView::updateLegends()
updateVirtualConnectionLegendRanges();
RimRegularLegendConfig* virtLegend = m_virtualPerforationResult->legendConfig();
m_viewer->addColorLegendToBottomLeftCorner( virtLegend->titledOverlayFrame() );
nativeOrOverrideViewer()->addColorLegendToBottomLeftCorner( virtLegend->titledOverlayFrame() );
}
}
@ -1296,7 +1309,7 @@ void RimEclipseView::updateMinMaxValuesAndAddLegendToView( QString
}
resultColors->legendConfig()->setTitle( title );
m_viewer->addColorLegendToBottomLeftCorner( resultColors->legendConfig()->titledOverlayFrame() );
nativeOrOverrideViewer()->addColorLegendToBottomLeftCorner( resultColors->legendConfig()->titledOverlayFrame() );
}
size_t maxTimeStepCount = cellResultsData->maxTimeStepCount();
@ -1306,7 +1319,7 @@ void RimEclipseView::updateMinMaxValuesAndAddLegendToView( QString
resultColors->ternaryLegendConfig()->titledOverlayFrame() )
{
resultColors->ternaryLegendConfig()->setTitle( legendLabel );
m_viewer->addColorLegendToBottomLeftCorner( resultColors->ternaryLegendConfig()->titledOverlayFrame() );
nativeOrOverrideViewer()->addColorLegendToBottomLeftCorner( resultColors->ternaryLegendConfig()->titledOverlayFrame() );
}
}
}
@ -1549,9 +1562,9 @@ void RimEclipseView::updateDisplayModelForWellResults()
createDisplayModel();
updateDisplayModelVisibility();
if ( hasUserRequestedAnimation() && m_viewer )
if ( hasUserRequestedAnimation() && nativeOrOverrideViewer() )
{
m_viewer->animationControl()->setCurrentFrame( m_currentTimeStep );
nativeOrOverrideViewer()->animationControl()->setCurrentFrame( m_currentTimeStep );
}
RiuMainWindow::instance()->refreshAnimationActions();
@ -1815,14 +1828,14 @@ void RimEclipseView::resetLegendsInViewer()
this->cellResult()->ternaryLegendConfig()->recreateLegend();
this->cellEdgeResult()->legendConfig()->recreateLegend();
m_viewer->removeAllColorLegends();
nativeOrOverrideViewer()->removeAllColorLegends();
if ( cellResultNormalLegendConfig )
{
m_viewer->addColorLegendToBottomLeftCorner( cellResultNormalLegendConfig->titledOverlayFrame() );
nativeOrOverrideViewer()->addColorLegendToBottomLeftCorner( cellResultNormalLegendConfig->titledOverlayFrame() );
}
m_viewer->addColorLegendToBottomLeftCorner( this->cellEdgeResult()->legendConfig()->titledOverlayFrame() );
nativeOrOverrideViewer()->addColorLegendToBottomLeftCorner( this->cellEdgeResult()->legendConfig()->titledOverlayFrame() );
}
//--------------------------------------------------------------------------------------------------

View File

@ -136,9 +136,9 @@ void RimGeoMechContourMapView::setDefaultCustomName()
void RimGeoMechContourMapView::updatePickPointAndRedraw()
{
appendPickPointVisToModel();
if ( m_viewer )
if ( nativeOrOverrideViewer() )
{
m_viewer->update();
nativeOrOverrideViewer()->update();
}
}
@ -278,7 +278,7 @@ void RimGeoMechContourMapView::updateGeometry()
//--------------------------------------------------------------------------------------------------
void RimGeoMechContourMapView::createContourMapGeometry()
{
if ( m_viewer && m_contourMapProjection->isChecked() )
if ( nativeOrOverrideViewer() && m_contourMapProjection->isChecked() )
{
m_contourMapProjectionPartMgr->createProjectionGeometry();
}
@ -289,9 +289,9 @@ void RimGeoMechContourMapView::createContourMapGeometry()
//--------------------------------------------------------------------------------------------------
void RimGeoMechContourMapView::appendContourMapProjectionToModel()
{
if ( m_viewer && m_contourMapProjection->isChecked() )
if ( nativeOrOverrideViewer() && m_contourMapProjection->isChecked() )
{
cvf::Scene* frameScene = m_viewer->frame( m_currentTimeStep );
cvf::Scene* frameScene = nativeOrOverrideViewer()->frame( m_currentTimeStep, isUsingOverrideViewer() );
if ( frameScene )
{
cvf::String name = "ContourMapProjection";
@ -315,9 +315,9 @@ void RimGeoMechContourMapView::appendContourMapProjectionToModel()
//--------------------------------------------------------------------------------------------------
void RimGeoMechContourMapView::appendContourLinesToModel()
{
if ( m_viewer && m_contourMapProjection->isChecked() )
if ( nativeOrOverrideViewer() && m_contourMapProjection->isChecked() )
{
cvf::Scene* frameScene = m_viewer->frame( m_currentTimeStep );
cvf::Scene* frameScene = nativeOrOverrideViewer()->frame( m_currentTimeStep, isUsingOverrideViewer() );
if ( frameScene )
{
cvf::String name = "ContourMapLines";
@ -342,9 +342,9 @@ void RimGeoMechContourMapView::appendContourLinesToModel()
//--------------------------------------------------------------------------------------------------
void RimGeoMechContourMapView::appendPickPointVisToModel()
{
if ( m_viewer && m_contourMapProjection->isChecked() )
if ( nativeOrOverrideViewer() && m_contourMapProjection->isChecked() )
{
cvf::Scene* frameScene = m_viewer->frame( m_currentTimeStep );
cvf::Scene* frameScene = nativeOrOverrideViewer()->frame( m_currentTimeStep, isUsingOverrideViewer() );
if ( frameScene )
{
cvf::String name = "ContourMapPickPoint";
@ -368,9 +368,16 @@ void RimGeoMechContourMapView::appendPickPointVisToModel()
//--------------------------------------------------------------------------------------------------
void RimGeoMechContourMapView::updateLegends()
{
if ( m_viewer )
if ( nativeOrOverrideViewer() )
{
m_viewer->removeAllColorLegends();
if ( !isUsingOverrideViewer() )
{
nativeOrOverrideViewer()->removeAllColorLegends();
}
else if ( m_contourMapProjection && m_contourMapProjection->legendConfig() )
{
nativeOrOverrideViewer()->removeColorLegend( m_contourMapProjection->legendConfig()->titledOverlayFrame() );
}
if ( m_contourMapProjection && m_contourMapProjection->isChecked() )
{
@ -380,12 +387,12 @@ void RimGeoMechContourMapView::updateLegends()
m_contourMapProjection->updateLegend();
if ( projectionLegend->showLegend() )
{
m_viewer->addColorLegendToBottomLeftCorner( projectionLegend->titledOverlayFrame() );
nativeOrOverrideViewer()->addColorLegendToBottomLeftCorner( projectionLegend->titledOverlayFrame() );
}
}
}
m_viewer->showScaleLegend( m_showScaleLegend() );
nativeOrOverrideViewer()->showScaleLegend( m_showScaleLegend() );
}
}
@ -394,11 +401,11 @@ void RimGeoMechContourMapView::updateLegends()
//--------------------------------------------------------------------------------------------------
void RimGeoMechContourMapView::updateViewWidgetAfterCreation()
{
if ( m_viewer )
if ( viewer() )
{
m_viewer->showAxisCross( false );
m_viewer->showEdgeTickMarksXY( true, m_showAxisLines() );
m_viewer->enableNavigationRotation( false );
viewer()->showAxisCross( false );
viewer()->showEdgeTickMarksXY( true, m_showAxisLines() );
viewer()->enableNavigationRotation( false );
}
Rim3dView::updateViewWidgetAfterCreation();
@ -419,9 +426,9 @@ void RimGeoMechContourMapView::updateViewFollowingRangeFilterUpdates()
void RimGeoMechContourMapView::onLoadDataAndUpdate()
{
RimGeoMechView::onLoadDataAndUpdate();
if ( m_viewer )
if ( nativeOrOverrideViewer() )
{
m_viewer->setView( cvf::Vec3d( 0, 0, -1 ), cvf::Vec3d( 0, 1, 0 ) );
nativeOrOverrideViewer()->setView( cvf::Vec3d( 0, 0, -1 ), cvf::Vec3d( 0, 1, 0 ) );
}
}
@ -436,7 +443,7 @@ void RimGeoMechContourMapView::fieldChangedByUi( const caf::PdmFieldHandle* chan
if ( changedField == &m_showAxisLines )
{
m_viewer->showEdgeTickMarksXY( true, m_showAxisLines() );
viewer()->showEdgeTickMarksXY( true, m_showAxisLines() );
scheduleCreateDisplayModelAndRedraw();
}
else if ( changedField == backgroundColorField() )

View File

@ -188,7 +188,7 @@ void RimGeoMechView::updateScaleTransform()
this->scaleTransform()->setLocalTransform( scale );
if ( m_viewer ) m_viewer->updateCachedValuesInScene();
if ( nativeOrOverrideViewer() ) nativeOrOverrideViewer()->updateCachedValuesInScene();
}
//--------------------------------------------------------------------------------------------------
@ -233,7 +233,7 @@ QString RimGeoMechView::createAutoName() const
//--------------------------------------------------------------------------------------------------
void RimGeoMechView::createDisplayModel()
{
if ( m_viewer.isNull() ) return;
if ( nativeOrOverrideViewer() == nullptr ) return;
if ( !( m_geomechCase && m_geomechCase->geoMechData() && m_geomechCase->geoMechData()->femParts() ) ) return;
@ -244,25 +244,26 @@ void RimGeoMechView::createDisplayModel()
// Remove all existing animation frames from the viewer.
// The parts are still cached in the RivReservoir geometry and friends
m_viewer->removeAllFrames();
nativeOrOverrideViewer()->removeAllFrames( isUsingOverrideViewer() );
if ( isTimeStepDependentDataVisible() )
if ( isTimeStepDependentDataVisibleInThisOrComparisonView() )
{
// Create empty frames in the viewer
int frameCount = geoMechCase()->geoMechData()->femPartResults()->frameCount();
for ( int frameIndex = 0; frameIndex < frameCount; frameIndex++ )
{
cvf::ref<cvf::Scene> scene = new cvf::Scene;
scene->addModel( new cvf::ModelBasicList );
m_viewer->addFrame( scene.p() );
cvf::ref<cvf::Scene> scene = new cvf::Scene;
cvf::ref<cvf::ModelBasicList> emptyModel = new cvf::ModelBasicList;
emptyModel->setName( "EmptyModel" );
scene->addModel( emptyModel.p() );
nativeOrOverrideViewer()->addFrame( scene.p(), isUsingOverrideViewer() );
}
}
// Set the Main scene in the viewer. Used when the animation is in "Stopped" state
cvf::ref<cvf::Scene> mainScene = new cvf::Scene;
m_viewer->setMainScene( mainScene.p() );
// Grid model
cvf::ref<cvf::ModelBasicList> mainSceneGridVizModel = new cvf::ModelBasicList;
@ -271,6 +272,7 @@ void RimGeoMechView::createDisplayModel()
mainSceneGridVizModel->updateBoundingBoxesRecursive();
mainScene->addModel( mainSceneGridVizModel.p() );
nativeOrOverrideViewer()->setMainScene( mainScene.p(), isUsingOverrideViewer() );
// Well path model
@ -279,19 +281,19 @@ void RimGeoMechView::createDisplayModel()
m_wellPathPipeVizModel->removeAllParts();
addWellPathsToModel( m_wellPathPipeVizModel.p(), femBBox );
m_viewer->addStaticModelOnce( m_wellPathPipeVizModel.p() );
nativeOrOverrideViewer()->addStaticModelOnce( m_wellPathPipeVizModel.p(), isUsingOverrideViewer() );
// Cross sections
m_crossSectionVizModel->removeAllParts();
m_crossSectionCollection->appendPartsToModel( *this, m_crossSectionVizModel.p(), scaleTransform() );
m_viewer->addStaticModelOnce( m_crossSectionVizModel.p() );
nativeOrOverrideViewer()->addStaticModelOnce( m_crossSectionVizModel.p(), isUsingOverrideViewer() );
// If the animation was active before recreating everything, make viewer view current frame
if ( isTimeStepDependentDataVisible() )
if ( isTimeStepDependentDataVisibleInThisOrComparisonView() )
{
m_viewer->setCurrentFrame( m_currentTimeStep );
if ( viewer() ) viewer()->setCurrentFrame( m_currentTimeStep );
}
else
{
@ -318,11 +320,11 @@ void RimGeoMechView::updateCurrentTimeStep()
{
updateLegends();
if ( this->isTimeStepDependentDataVisible() )
if ( this->isTimeStepDependentDataVisibleInThisOrComparisonView() )
{
if ( m_viewer )
if ( nativeOrOverrideViewer() )
{
cvf::Scene* frameScene = m_viewer->frame( m_currentTimeStep );
cvf::Scene* frameScene = nativeOrOverrideViewer()->frame( m_currentTimeStep, isUsingOverrideViewer() );
if ( frameScene )
{
{
@ -391,7 +393,7 @@ void RimGeoMechView::updateCurrentTimeStep()
m_vizLogic->updateStaticCellColors( -1 );
m_crossSectionCollection->applySingleColorEffect();
m_viewer->animationControl()->slotPause(); // To avoid animation timer spinning in the background
nativeOrOverrideViewer()->animationControl()->slotPause(); // To avoid animation timer spinning in the background
}
m_overlayInfoConfig()->update3DInfo();
@ -421,8 +423,8 @@ void RimGeoMechView::resetLegendsInViewer()
{
this->cellResult()->legendConfig->recreateLegend();
m_viewer->removeAllColorLegends();
m_viewer->addColorLegendToBottomLeftCorner( this->cellResult()->legendConfig->titledOverlayFrame() );
nativeOrOverrideViewer()->removeAllColorLegends();
nativeOrOverrideViewer()->addColorLegendToBottomLeftCorner( this->cellResult()->legendConfig->titledOverlayFrame() );
}
//--------------------------------------------------------------------------------------------------
@ -430,15 +432,23 @@ void RimGeoMechView::resetLegendsInViewer()
//--------------------------------------------------------------------------------------------------
void RimGeoMechView::updateLegends()
{
if ( m_viewer )
if ( nativeOrOverrideViewer() )
{
m_viewer->removeAllColorLegends();
if ( !isUsingOverrideViewer() )
{
nativeOrOverrideViewer()->removeAllColorLegends();
}
else
{
nativeOrOverrideViewer()->removeColorLegend( cellResult()->legendConfig->titledOverlayFrame() );
nativeOrOverrideViewer()->removeColorLegend( m_tensorResults->arrowColorLegendConfig->titledOverlayFrame() );
}
this->updateLegendTextAndRanges( cellResult()->legendConfig(), m_currentTimeStep() );
if ( cellResult()->hasResult() && cellResult()->legendConfig()->showLegend() )
{
m_viewer->addColorLegendToBottomLeftCorner( cellResult()->legendConfig->titledOverlayFrame() );
nativeOrOverrideViewer()->addColorLegendToBottomLeftCorner( cellResult()->legendConfig->titledOverlayFrame() );
}
if ( tensorResults()->showTensors() )
@ -448,7 +458,7 @@ void RimGeoMechView::updateLegends()
if ( tensorResults()->vectorColors() == RimTensorResults::RESULT_COLORS &&
tensorResults()->arrowColorLegendConfig()->showLegend() )
{
m_viewer->addColorLegendToBottomLeftCorner(
nativeOrOverrideViewer()->addColorLegendToBottomLeftCorner(
m_tensorResults->arrowColorLegendConfig->titledOverlayFrame() );
}
}
@ -678,10 +688,10 @@ void RimGeoMechView::convertCameraPositionFromOldProjectFiles()
viewerToViewInterface->setCameraPointOfInterest( newPointOfInterest );
}
if ( m_viewer )
if ( viewer() )
{
m_viewer->mainCamera()->setViewMatrix( this->cameraPosition() );
m_viewer->setPointOfInterest( this->cameraPointOfInterest() );
viewer()->mainCamera()->setViewMatrix( this->cameraPosition() );
viewer()->setPointOfInterest( this->cameraPointOfInterest() );
}
}
}

View File

@ -675,6 +675,30 @@ void RimProject::allNotLinkedViews( std::vector<RimGridView*>& views )
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimProject::allViews( std::vector<Rim3dView*>& views ) const
{
std::vector<RimCase*> cases;
allCases( cases );
for ( size_t caseIdx = 0; caseIdx < cases.size(); caseIdx++ )
{
RimCase* rimCase = cases[caseIdx];
if ( !rimCase ) continue;
std::vector<Rim3dView*> caseViews = rimCase->views();
for ( size_t viewIdx = 0; viewIdx < caseViews.size(); viewIdx++ )
{
if ( caseViews[viewIdx] )
{
views.push_back( caseViews[viewIdx] );
}
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -124,6 +124,7 @@ public:
std::vector<RimSummaryCaseCollection*> summaryGroups() const;
RimSummaryCaseMainCollection* firstSummaryCaseMainCollection() const;
void allViews(std::vector<Rim3dView*>& views) const;
void allVisibleViews( std::vector<Rim3dView*>& views ) const;
void allVisibleGridViews( std::vector<RimGridView*>& views ) const;
void allNotLinkedViews( std::vector<RimGridView*>& views );

View File

@ -128,6 +128,31 @@ void RimViewManipulator::applySourceViewCameraOnDestinationViews( RimGridView*
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
cvf::Vec3d RimViewManipulator::calculateEquivalentCamPosOffset( Rim3dView* sourceView, Rim3dView* destView )
{
cvf::Vec3d soffset = cvf::Vec3d::ZERO;
RimCase* sourceOwnerCase = sourceView->ownerCase();
if ( sourceOwnerCase )
{
soffset = sourceOwnerCase->displayModelOffset();
soffset.z() *= sourceView->scaleZ();
}
cvf::Vec3d doffset = cvf::Vec3d::ZERO;
RimCase* destinationOwnerCase = destView->ownerCase();
if ( destinationOwnerCase )
{
doffset = destinationOwnerCase->displayModelOffset();
doffset.z() *= sourceView->scaleZ();
}
return soffset - doffset;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -19,6 +19,7 @@
#pragma once
#include <vector>
#include "cvfVector3.h"
namespace cvf
{
@ -26,12 +27,14 @@ class BoundingBox;
}
class RimGridView;
class Rim3dView;
class RimViewManipulator
{
public:
static void applySourceViewCameraOnDestinationViews( RimGridView* sourceView,
std::vector<RimGridView*>& destinationViews );
static cvf::Vec3d calculateEquivalentCamPosOffset(Rim3dView* sourceView, Rim3dView* destView);
private:
static bool isBoundingBoxesOverlappingOrClose( const cvf::BoundingBox& sourceBB, const cvf::BoundingBox& destBB );

View File

@ -933,7 +933,7 @@ void RiuMainWindow::refreshAnimationActions()
{
enableAnimControls = true;
if ( activeView->isTimeStepDependentDataVisible() )
if ( activeView->isTimeStepDependentDataVisibleInThisOrComparisonView() )
{
timeStepStrings = activeView->ownerCase()->timeStepStrings();
}