From d4086ee3711bf2c9dd4b7519d183780e892e2aed Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 4 Nov 2022 15:48:25 +0100 Subject: [PATCH] Allow linking of contour map views * Place copy of contour map in correct collection * Allow linking of contour maps * Improve handling of contour views and 3D views * Guard nullptr * Guard assert seen on Linux * Zoom all on contour map when unlinked to reset zoom If a contour map is linked to a 3D view, the view can get distorted. Call ZoomAll to reset to sensible defaults. * Remove default rainbow legend --- .../RicPasteEclipseViewsFeature.cpp | 35 +++++--- .../Commands/RicNewContourMapViewFeature.cpp | 7 -- .../RicDeleteAllLinkedViewsFeature.cpp | 9 +- .../Commands/ViewLink/RicLinkViewFeature.cpp | 19 +--- .../ViewLink/RicLinkVisibleViewsFeature.cpp | 21 +---- .../ViewLink/RicLinkVisibleViewsFeature.h | 1 - .../ViewLink/RicLinkVisibleViewsFeatureUi.cpp | 13 +-- .../ViewLink/RicShowAllLinkedViewsFeature.cpp | 14 ++- .../ViewLink/RicUnLinkViewFeature.cpp | 10 ++- .../RivContourMapProjectionPartMgr.cpp | 3 + .../ProjectDataModel/Rim3dView.cpp | 2 + .../ProjectDataModel/Rim3dView.h | 7 +- .../RimEclipseContourMapView.cpp | 35 +++++++- .../RimEclipseContourMapView.h | 1 + .../ProjectDataModel/RimProject.cpp | 2 +- .../ProjectDataModel/RimViewController.cpp | 86 +++++++------------ .../ProjectDataModel/RimViewController.h | 3 - .../ProjectDataModel/RimViewLinker.cpp | 29 ++++++- .../ProjectDataModel/RimViewLinker.h | 3 +- .../UserInterface/RiuViewerCommands.cpp | 16 ++-- 20 files changed, 157 insertions(+), 159 deletions(-) diff --git a/ApplicationLibCode/Commands/OperationsUsingObjReferences/RicPasteEclipseViewsFeature.cpp b/ApplicationLibCode/Commands/OperationsUsingObjReferences/RicPasteEclipseViewsFeature.cpp index c926eec907..a757926e1c 100644 --- a/ApplicationLibCode/Commands/OperationsUsingObjReferences/RicPasteEclipseViewsFeature.cpp +++ b/ApplicationLibCode/Commands/OperationsUsingObjReferences/RicPasteEclipseViewsFeature.cpp @@ -19,15 +19,17 @@ #include "RicPasteEclipseViewsFeature.h" -#include "Riu3DMainWindowTools.h" - #include "RicPasteFeatureImpl.h" #include "Rim2dIntersectionViewCollection.h" #include "RimEclipseCase.h" +#include "RimEclipseContourMapView.h" +#include "RimEclipseContourMapViewCollection.h" #include "RimEclipseView.h" #include "RimSimWellInViewCollection.h" +#include "Riu3DMainWindowTools.h" + #include "cafPdmDocument.h" #include "cafPdmObjectGroup.h" #include "cafSelectionManager.h" @@ -47,13 +49,12 @@ bool RicPasteEclipseViewsFeature::isCommandEnabled() std::vector> typedObjects; objectGroup.objectsByType( &typedObjects ); - if ( typedObjects.size() == 0 ) + if ( typedObjects.empty() ) { return false; } - caf::PdmObjectHandle* destinationObject = - dynamic_cast( caf::SelectionManager::instance()->selectedItem() ); + auto* destinationObject = dynamic_cast( caf::SelectionManager::instance()->selectedItem() ); RimIdenticalGridCaseGroup* gridCaseGroup = RicPasteFeatureImpl::findGridCaseGroup( destinationObject ); if ( gridCaseGroup ) return false; @@ -69,8 +70,7 @@ bool RicPasteEclipseViewsFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicPasteEclipseViewsFeature::onActionTriggered( bool isChecked ) { - caf::PdmObjectHandle* destinationObject = - dynamic_cast( caf::SelectionManager::instance()->selectedItem() ); + auto* destinationObject = dynamic_cast( caf::SelectionManager::instance()->selectedItem() ); RimEclipseCase* eclipseCase = RicPasteFeatureImpl::findEclipseCase( destinationObject ); assert( eclipseCase ); @@ -78,7 +78,7 @@ void RicPasteEclipseViewsFeature::onActionTriggered( bool isChecked ) caf::PdmObjectGroup objectGroup; RicPasteFeatureImpl::findObjectsFromClipboardRefs( &objectGroup ); - if ( objectGroup.objects.size() == 0 ) return; + if ( objectGroup.objects.empty() ) return; std::vector> eclipseViews; objectGroup.objectsByType( &eclipseViews ); @@ -86,15 +86,26 @@ void RicPasteEclipseViewsFeature::onActionTriggered( bool isChecked ) RimEclipseView* lastViewCopy = nullptr; // Add cases to case group - for ( size_t i = 0; i < eclipseViews.size(); i++ ) + for ( const auto& eclipseView : eclipseViews ) { - RimEclipseView* rimReservoirView = dynamic_cast( - eclipseViews[i]->xmlCapability()->copyByXmlSerialization( caf::PdmDefaultObjectFactory::instance() ) ); + auto* rimReservoirView = dynamic_cast( + eclipseView->xmlCapability()->copyByXmlSerialization( caf::PdmDefaultObjectFactory::instance() ) ); CVF_ASSERT( rimReservoirView ); QString nameOfCopy = QString( "Copy of " ) + rimReservoirView->name(); rimReservoirView->setName( nameOfCopy ); - eclipseCase->reservoirViews().push_back( rimReservoirView ); + + if ( dynamic_cast( eclipseView.p() ) ) + { + auto contourMapView = dynamic_cast( rimReservoirView ); + CVF_ASSERT( contourMapView ); + + eclipseCase->contourMapCollection()->push_back( contourMapView ); + } + else + { + eclipseCase->reservoirViews().push_back( rimReservoirView ); + } rimReservoirView->setEclipseCase( eclipseCase ); diff --git a/ApplicationLibCode/Commands/RicNewContourMapViewFeature.cpp b/ApplicationLibCode/Commands/RicNewContourMapViewFeature.cpp index a0966d46b9..6e7ecc7716 100644 --- a/ApplicationLibCode/Commands/RicNewContourMapViewFeature.cpp +++ b/ApplicationLibCode/Commands/RicNewContourMapViewFeature.cpp @@ -414,12 +414,5 @@ void RicNewContourMapViewFeature::assignDefaultResultAndLegend( RimEclipseContou { contourMap->cellResult()->setResultVariable( "SOIL" ); } - - RimRegularLegendConfig* legendConfig = contourMap->cellResult()->legendConfig(); - if ( legendConfig ) - { - RimColorLegend* legend = legendConfig->mapToColorLegend( RimRegularLegendConfig::ColorRangesType::RAINBOW ); - legendConfig->setColorLegend( legend ); - } } } diff --git a/ApplicationLibCode/Commands/ViewLink/RicDeleteAllLinkedViewsFeature.cpp b/ApplicationLibCode/Commands/ViewLink/RicDeleteAllLinkedViewsFeature.cpp index eb0b874aff..0047fb35c9 100644 --- a/ApplicationLibCode/Commands/ViewLink/RicDeleteAllLinkedViewsFeature.cpp +++ b/ApplicationLibCode/Commands/ViewLink/RicDeleteAllLinkedViewsFeature.cpp @@ -19,6 +19,7 @@ #include "RicDeleteAllLinkedViewsFeature.h" +#include "RimEclipseContourMapView.h" #include "RimGridView.h" #include "RimProject.h" #include "RimViewLinker.h" @@ -75,10 +76,16 @@ void RicDeleteAllLinkedViewsFeature::onActionTriggered( bool isChecked ) // viewLinkerCollection->viewLinker is a PdmChildField containing one RimViewLinker child object proj->viewLinkerCollection->viewLinker.removeChild( viewLinker ); - viewLinker->applyCellFilterCollectionByUserChoice(); + auto views = viewLinker->allViews(); + viewLinker->applyCellFilterCollectionByUserChoice(); delete viewLinker; + for ( auto v : views ) + { + if ( dynamic_cast( v ) ) v->zoomAll(); + } + proj->uiCapability()->updateConnectedEditors(); } } diff --git a/ApplicationLibCode/Commands/ViewLink/RicLinkViewFeature.cpp b/ApplicationLibCode/Commands/ViewLink/RicLinkViewFeature.cpp index b039bcece8..4bae587e9b 100644 --- a/ApplicationLibCode/Commands/ViewLink/RicLinkViewFeature.cpp +++ b/ApplicationLibCode/Commands/ViewLink/RicLinkViewFeature.cpp @@ -24,8 +24,6 @@ #include "RicLinkVisibleViewsFeature.h" #include "Rim3dView.h" -#include "RimEclipseContourMapView.h" -#include "RimGeoMechContourMapView.h" #include "RimGridView.h" #include "RimProject.h" #include "RimViewLinker.h" @@ -57,8 +55,6 @@ public: // Link only the active view to an existing view link collection. RimGridView* activeView = RiaApplication::instance()->activeGridView(); if ( !activeView ) return false; - if ( dynamic_cast( activeView ) ) return false; - if ( dynamic_cast( activeView ) ) return false; if ( activeView->assosiatedViewLinker() ) return false; @@ -69,30 +65,17 @@ public: std::vector selectedGridViews; caf::SelectionManager::instance()->objectsByTypeStrict( &selectedGridViews ); - bool hasAnyUnlinkableViews = false; for ( auto gridView : selectedGridViews ) { if ( !gridView ) continue; - if ( dynamic_cast( gridView ) ) - { - hasAnyUnlinkableViews = true; - break; - } - - if ( dynamic_cast( gridView ) ) - { - hasAnyUnlinkableViews = true; - break; - } - if ( !gridView->assosiatedViewLinker() ) { m_viewsToLink.push_back( gridView ); } } - if ( !m_viewsToLink.empty() && !hasAnyUnlinkableViews ) + if ( !m_viewsToLink.empty() ) { return true; } diff --git a/ApplicationLibCode/Commands/ViewLink/RicLinkVisibleViewsFeature.cpp b/ApplicationLibCode/Commands/ViewLink/RicLinkVisibleViewsFeature.cpp index 30d2d2e50a..3d62ff1985 100644 --- a/ApplicationLibCode/Commands/ViewLink/RicLinkVisibleViewsFeature.cpp +++ b/ApplicationLibCode/Commands/ViewLink/RicLinkVisibleViewsFeature.cpp @@ -21,8 +21,6 @@ #include "RicLinkVisibleViewsFeatureUi.h" -#include "RimEclipseContourMapView.h" -#include "RimGeoMechContourMapView.h" #include "RimGridView.h" #include "RimProject.h" #include "RimViewController.h" @@ -59,7 +57,7 @@ bool RicLinkVisibleViewsFeature::isCommandEnabled() if ( proj->viewLinkerCollection() && proj->viewLinkerCollection()->viewLinker() ) { - proj->viewLinkerCollection()->viewLinker()->allViews( linkedviews ); + linkedviews = proj->viewLinkerCollection()->viewLinker()->allViews(); } if ( visibleGridViews.size() >= 2 && ( linkedviews.size() < visibleGridViews.size() ) ) @@ -94,18 +92,6 @@ void RicLinkVisibleViewsFeature::setupActionLook( QAction* actionToSetup ) actionToSetup->setIcon( QIcon( ":/LinkView.svg" ) ); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RicLinkVisibleViewsFeature::allLinkedViews( std::vector& views ) -{ - RimProject* proj = RimProject::current(); - if ( proj->viewLinkerCollection()->viewLinker() ) - { - proj->viewLinkerCollection()->viewLinker()->allViews( views ); - } -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -113,17 +99,12 @@ void RicLinkVisibleViewsFeature::findLinkableVisibleViews( std::vector alreadyLinkedViews; - allLinkedViews( alreadyLinkedViews ); - std::vector visibleGridViews; proj->allVisibleGridViews( visibleGridViews ); for ( auto gridView : visibleGridViews ) { if ( !gridView ) continue; - if ( dynamic_cast( gridView ) ) continue; - if ( dynamic_cast( gridView ) ) continue; if ( gridView->assosiatedViewLinker() ) continue; views.push_back( gridView ); diff --git a/ApplicationLibCode/Commands/ViewLink/RicLinkVisibleViewsFeature.h b/ApplicationLibCode/Commands/ViewLink/RicLinkVisibleViewsFeature.h index 32e29d854d..2914de3d9e 100644 --- a/ApplicationLibCode/Commands/ViewLink/RicLinkVisibleViewsFeature.h +++ b/ApplicationLibCode/Commands/ViewLink/RicLinkVisibleViewsFeature.h @@ -43,5 +43,4 @@ protected: private: void findLinkableVisibleViews( std::vector& views ); - void allLinkedViews( std::vector& views ); }; diff --git a/ApplicationLibCode/Commands/ViewLink/RicLinkVisibleViewsFeatureUi.cpp b/ApplicationLibCode/Commands/ViewLink/RicLinkVisibleViewsFeatureUi.cpp index d95b6fd42f..9ff3a06258 100644 --- a/ApplicationLibCode/Commands/ViewLink/RicLinkVisibleViewsFeatureUi.cpp +++ b/ApplicationLibCode/Commands/ViewLink/RicLinkVisibleViewsFeatureUi.cpp @@ -23,7 +23,6 @@ #include "RiaOptionItemFactory.h" #include "RimCase.h" -#include "RimEclipseContourMapView.h" #include "RimGridView.h" #include "RimViewLinker.h" @@ -79,17 +78,7 @@ RimGridView* RicLinkVisibleViewsFeatureUi::masterView() //-------------------------------------------------------------------------------------------------- std::vector RicLinkVisibleViewsFeatureUi::masterViewCandidates() const { - std::vector masterCandidates; - // Set Active view as master view if the active view isn't a contour map. - for ( size_t i = 0; i < m_allViews.size(); i++ ) - { - RimEclipseContourMapView* contourMap = dynamic_cast( m_allViews[i] ); - if ( contourMap == nullptr ) - { - masterCandidates.push_back( m_allViews[i] ); - } - } - return masterCandidates; + return m_allViews; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/Commands/ViewLink/RicShowAllLinkedViewsFeature.cpp b/ApplicationLibCode/Commands/ViewLink/RicShowAllLinkedViewsFeature.cpp index f22a411cef..443f21d7fc 100644 --- a/ApplicationLibCode/Commands/ViewLink/RicShowAllLinkedViewsFeature.cpp +++ b/ApplicationLibCode/Commands/ViewLink/RicShowAllLinkedViewsFeature.cpp @@ -47,23 +47,21 @@ void RicShowAllLinkedViewsFeature::onActionTriggered( bool isChecked ) std::vector managedViews; caf::SelectionManager::instance()->objectsByType( &managedViews ); - for ( size_t i = 0; i < managedViews.size(); i++ ) + for ( auto& managedView : managedViews ) { RimViewLinker* rimLinked = nullptr; - managedViews[i]->firstAncestorOrThisOfType( rimLinked ); + managedView->firstAncestorOrThisOfType( rimLinked ); CVF_ASSERT( rimLinked ); linkedViews.push_back( rimLinked ); } - for ( size_t i = 0; i < linkedViews.size(); i++ ) + for ( auto& linkedView : linkedViews ) { - std::vector views; - linkedViews[i]->allViews( views ); - - for ( size_t j = 0; j < views.size(); j++ ) + auto views = linkedView->allViews(); + for ( auto& view : views ) { - views[j]->forceShowWindowOn(); + view->forceShowWindowOn(); } } } diff --git a/ApplicationLibCode/Commands/ViewLink/RicUnLinkViewFeature.cpp b/ApplicationLibCode/Commands/ViewLink/RicUnLinkViewFeature.cpp index b399451539..60cebefdd4 100644 --- a/ApplicationLibCode/Commands/ViewLink/RicUnLinkViewFeature.cpp +++ b/ApplicationLibCode/Commands/ViewLink/RicUnLinkViewFeature.cpp @@ -22,15 +22,16 @@ #include "RiaApplication.h" #include "Rim3dView.h" +#include "RimEclipseContourMapView.h" #include "RimGridView.h" #include "RimProject.h" #include "RimViewController.h" #include "RimViewLinker.h" +#include "RimViewLinkerCollection.h" #include "cafCmdFeatureManager.h" #include "cafSelectionManager.h" -#include "RimViewLinkerCollection.h" #include CAF_CMD_SOURCE_INIT( RicUnLinkViewFeature, "RicUnLinkViewFeature" ); @@ -68,8 +69,9 @@ void RicUnLinkViewFeature::onActionTriggered( bool isChecked ) { viewController->applyCellFilterCollectionByUserChoice(); delete viewController; - viewLinker->removeViewController( nullptr ); // Remove the slots in the vector that was set to nullptr by the - // destructor + + // Remove the slots in the vector that was set to nullptr by the destructor + viewLinker->removeViewController( nullptr ); } else if ( viewLinker ) { @@ -94,6 +96,8 @@ void RicUnLinkViewFeature::onActionTriggered( bool isChecked ) activeView->updateAutoName(); } + if ( dynamic_cast( activeView ) ) activeView->zoomAll(); + RimProject::current()->viewLinkerCollection.uiCapability()->updateConnectedEditors(); RimProject::current()->uiCapability()->updateConnectedEditors(); } diff --git a/ApplicationLibCode/ModelVisualization/RivContourMapProjectionPartMgr.cpp b/ApplicationLibCode/ModelVisualization/RivContourMapProjectionPartMgr.cpp index 33fa5efd27..9897c4fced 100644 --- a/ApplicationLibCode/ModelVisualization/RivContourMapProjectionPartMgr.cpp +++ b/ApplicationLibCode/ModelVisualization/RivContourMapProjectionPartMgr.cpp @@ -479,6 +479,9 @@ std::vector> { for ( const cvf::BoundingBox& existingBBox : boxVector ) { + // Assert on invalid bounding box seen on Linux + if ( !displayBBox.isValid() || !existingBBox.isValid() ) continue; + double dist = ( displayBBox.center() - existingBBox.center() ).length(); if ( dist < segment.length() || existingBBox.intersects( displayBBox ) ) { diff --git a/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp b/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp index 2395f80291..f4dd020f24 100644 --- a/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp +++ b/ApplicationLibCode/ProjectDataModel/Rim3dView.cpp @@ -331,6 +331,8 @@ QWidget* Rim3dView::createViewWidget( QWidget* mainWindowParent ) //-------------------------------------------------------------------------------------------------- void Rim3dView::updateViewWidgetAfterCreation() { + if ( !m_viewer ) return; + m_viewer->setDefaultPerspectiveNearPlaneDistance( 10 ); this->onResetLegendsInViewer(); diff --git a/ApplicationLibCode/ProjectDataModel/Rim3dView.h b/ApplicationLibCode/ProjectDataModel/Rim3dView.h index cb2adb4f76..8c399c345d 100644 --- a/ApplicationLibCode/ProjectDataModel/Rim3dView.h +++ b/ApplicationLibCode/ProjectDataModel/Rim3dView.h @@ -230,8 +230,6 @@ protected: virtual cvf::Transform* scaleTransform() = 0; protected: - // Overridden PdmObject methods: - caf::PdmFieldHandle* userDescriptionField() override; caf::PdmFieldHandle* backgroundColorField(); @@ -242,10 +240,11 @@ protected: void setupBeforeSave() override; - // Overridden ViewWindow methods: void updateViewWidgetAfterCreation() override; QWidget* createViewWidget( QWidget* mainWindowParent ) override; + void setCameraPosition( const cvf::Mat4d& cameraPosition ) override; + protected: // Timestep Field. Children clamps this differently caf::PdmField m_currentTimeStep; @@ -271,8 +270,6 @@ private: void performAutoNameUpdate() final; // Implementation of RiuViewerToViewInterface - - void setCameraPosition( const cvf::Mat4d& cameraPosition ) override; void setCameraPointOfInterest( const cvf::Vec3d& cameraPointOfInterest ) override; void endAnimation() override; diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseContourMapView.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseContourMapView.cpp index 08069213de..cce99a8cd4 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseContourMapView.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseContourMapView.cpp @@ -35,6 +35,7 @@ #include "RimGridCollection.h" #include "RimRegularLegendConfig.h" #include "RimSimWellInViewCollection.h" +#include "RimViewLinker.h" #include "RimViewNameConfig.h" #include "cafPdmUiTreeOrdering.h" @@ -72,7 +73,7 @@ RimEclipseContourMapView::RimEclipseContourMapView() m_contourMapProjectionPartMgr = new RivContourMapProjectionPartMgr( contourMapProjection(), this ); - ( (RiuViewerToViewInterface*)this )->setCameraPosition( sm_defaultViewMatrix ); + setCameraPosition( sm_defaultViewMatrix ); cellResult()->setTernaryEnabled( false ); cellResult()->legendConfigChanged.connect( this, &RimEclipseContourMapView::onLegendConfigChanged ); @@ -410,7 +411,22 @@ void RimEclipseContourMapView::onUpdateLegends() } } - nativeOrOverrideViewer()->showScaleLegend( m_showScaleLegend() ); + // Hide the scale widget if any 3D views are present, as the display of the scale widget is only working for + // default rotation. The update is triggered in RimViewLinker::updateScaleWidgetVisibility() + + bool any3DViewsLinked = false; + + if ( auto viewLinker = assosiatedViewLinker() ) + { + auto views = viewLinker->allViews(); + for ( auto v : views ) + { + if ( dynamic_cast( v ) ) continue; + any3DViewsLinked = true; + } + } + + nativeOrOverrideViewer()->showScaleLegend( any3DViewsLinked ? false : m_showScaleLegend() ); } } @@ -569,3 +585,18 @@ RimSurfaceInViewCollection* RimEclipseContourMapView::surfaceInViewCollection() // Surfaces should not be shown in contour map. return nullptr; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimEclipseContourMapView::zoomAll() +{ + setCameraPosition( sm_defaultViewMatrix ); + isPerspectiveView = false; + + // If a 3D view has been used as the primary linked view, a contour map can be rotated in 3D. Use the following + // function to make sure view is reset to original state, with correct rotation and grid box configuration. + updateViewWidgetAfterCreation(); + + RimEclipseView::zoomAll(); +} diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseContourMapView.h b/ApplicationLibCode/ProjectDataModel/RimEclipseContourMapView.h index ed1d9f5709..85c8479ffa 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseContourMapView.h +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseContourMapView.h @@ -41,6 +41,7 @@ public: void updatePickPointAndRedraw(); RimSurfaceInViewCollection* surfaceInViewCollection() const override; + void zoomAll() override; protected: void initAfterRead() override; diff --git a/ApplicationLibCode/ProjectDataModel/RimProject.cpp b/ApplicationLibCode/ProjectDataModel/RimProject.cpp index 975cce7191..c51f66f1bd 100644 --- a/ApplicationLibCode/ProjectDataModel/RimProject.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimProject.cpp @@ -755,7 +755,7 @@ void RimProject::allNotLinkedViews( std::vector& views ) std::vector alreadyLinkedViews; if ( viewLinkerCollection->viewLinker() ) { - viewLinkerCollection->viewLinker()->allViews( alreadyLinkedViews ); + alreadyLinkedViews = viewLinkerCollection->viewLinker()->allViews(); } for ( size_t caseIdx = 0; caseIdx < cases.size(); caseIdx++ ) diff --git a/ApplicationLibCode/ProjectDataModel/RimViewController.cpp b/ApplicationLibCode/ProjectDataModel/RimViewController.cpp index 469ab0ec67..8f8d42ed36 100644 --- a/ApplicationLibCode/ProjectDataModel/RimViewController.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimViewController.cpp @@ -60,34 +60,31 @@ CAF_PDM_SOURCE_INIT( RimViewController, "ViewController" ); //-------------------------------------------------------------------------------------------------- RimViewController::RimViewController() { - // clang-format off + CAF_PDM_InitObject( "View Link" ); - CAF_PDM_InitObject("View Link"); - - CAF_PDM_InitField(&m_isActive, "Active", true, "Active"); - m_isActive.uiCapability()->setUiHidden(true); + CAF_PDM_InitField( &m_isActive, "Active", true, "Active" ); + m_isActive.uiCapability()->setUiHidden( true ); QString defaultName = "View Config: Empty view"; - CAF_PDM_InitField(&m_name, "Name", defaultName, "Managed View Name"); - m_name.uiCapability()->setUiHidden(true); + CAF_PDM_InitField( &m_name, "Name", defaultName, "Managed View Name" ); + m_name.uiCapability()->setUiHidden( true ); - CAF_PDM_InitFieldNoDefault(&m_managedView, "ManagedView", "Linked View"); - m_managedView.uiCapability()->setUiTreeChildrenHidden(true); + CAF_PDM_InitFieldNoDefault( &m_managedView, "ManagedView", "Linked View" ); + m_managedView.uiCapability()->setUiTreeChildrenHidden( true ); - CAF_PDM_InitField(&m_syncCamera, "SyncCamera", true, "Camera"); - CAF_PDM_InitField(&m_showCursor, "ShowCursor", true, " Show Cursor"); - CAF_PDM_InitField(&m_syncTimeStep, "SyncTimeStep", true, "Time Step"); - CAF_PDM_InitField(&m_syncCellResult, "SyncCellResult", false, "Cell Result"); - CAF_PDM_InitField(&m_syncLegendDefinitions, "SyncLegendDefinitions", true, " Color Legend"); - - CAF_PDM_InitField(&m_syncVisibleCells, "SyncVisibleCells", false, "Visible Cells"); + CAF_PDM_InitField( &m_syncCamera, "SyncCamera", true, "Camera" ); + CAF_PDM_InitField( &m_showCursor, "ShowCursor", true, " Show Cursor" ); + CAF_PDM_InitField( &m_syncTimeStep, "SyncTimeStep", true, "Time Step" ); + CAF_PDM_InitField( &m_syncCellResult, "SyncCellResult", false, "Cell Result" ); + CAF_PDM_InitField( &m_syncLegendDefinitions, "SyncLegendDefinitions", true, " Color Legend" ); + + CAF_PDM_InitField( &m_syncVisibleCells, "SyncVisibleCells", false, "Visible Cells" ); /// We do not support this. Consider to remove sometime - m_syncVisibleCells.uiCapability()->setUiHidden(true); + m_syncVisibleCells.uiCapability()->setUiHidden( true ); m_syncVisibleCells.xmlCapability()->disableIO(); - CAF_PDM_InitField(&m_syncCellFilters, "SyncRangeFilters", false, "Cell Filters"); - CAF_PDM_InitField(&m_syncPropertyFilters, "SyncPropertyFilters", false,"Property Filters"); - // clang-format on + CAF_PDM_InitField( &m_syncCellFilters, "SyncRangeFilters", false, "Cell Filters" ); + CAF_PDM_InitField( &m_syncPropertyFilters, "SyncPropertyFilters", false, "Property Filters" ); setDeletable( true ); } @@ -422,16 +419,6 @@ void RimViewController::updateOptionSensitivity() } } - if ( isCameraControlPossible() ) - { - this->m_syncCamera.uiCapability()->setUiReadOnly( false ); - } - else - { - this->m_syncCamera.uiCapability()->setUiReadOnly( true ); - this->m_syncCamera = false; - } - if ( isPropertyFilterControlPossible() ) { this->m_syncPropertyFilters.uiCapability()->setUiReadOnly( false ); @@ -476,7 +463,6 @@ void RimViewController::setManagedView( RimGridView* view ) m_managedView = view; updateOptionSensitivity(); - updateDefaultOptions(); updateOverrides(); updateResultColorsControl(); updateCameraLink(); @@ -574,16 +560,6 @@ void RimViewController::updateLegendDefinitions() viewLinker->updateCellResult(); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimViewController::updateDefaultOptions() -{ - m_syncCellResult = isCellResultControlAdvisable(); - m_syncCellFilters = isCellFilterControlAdvisable(); - m_syncPropertyFilters = isPropertyFilterControlAdvisable(); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -679,16 +655,6 @@ RimGridView* RimViewController::masterView() const return ownerViewLinker()->masterView(); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool RimViewController::isCameraControlPossible() const -{ - RimEclipseContourMapView* contourMapMasterView = dynamic_cast( masterView() ); - RimEclipseContourMapView* contourMapManagedView = dynamic_cast( managedEclipseView() ); - return !( contourMapMasterView || contourMapManagedView ); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -892,7 +858,7 @@ bool RimViewController::isCellResultControlAdvisable() const { bool contourMapMasterView = dynamic_cast( masterView() ) != nullptr; bool contourMapManagedView = dynamic_cast( managedEclipseView() ) != nullptr; - return !isMasterAndDepViewDifferentType() && contourMapMasterView != contourMapManagedView; + return !isMasterAndDepViewDifferentType() && ( contourMapMasterView != contourMapManagedView ); } //-------------------------------------------------------------------------------------------------- @@ -912,7 +878,7 @@ bool RimViewController::isPropertyFilterControlAdvisable() const { bool contourMapMasterView = dynamic_cast( masterView() ) != nullptr; bool contourMapManagedView = dynamic_cast( managedEclipseView() ) != nullptr; - return isPropertyFilterControlPossible() && contourMapMasterView != contourMapManagedView; + return isPropertyFilterControlPossible() && ( contourMapMasterView != contourMapManagedView ); } //-------------------------------------------------------------------------------------------------- @@ -1116,7 +1082,19 @@ void RimViewController::applyCellFilterCollectionByUserChoice() return; } - bool restoreOriginal = askUserToRestoreOriginalCellFilterCollection( m_managedView->name() ); + RimViewLinker* viewLinker = ownerViewLinker(); + RimGridView* masterView = viewLinker->masterView(); + + bool restoreOriginal = true; + + bool anyActiveFilter = !masterView->cellFilterCollection()->filters().empty() || + masterView->propertyFilterCollection()->hasActiveFilters(); + + if ( anyActiveFilter ) + { + restoreOriginal = askUserToRestoreOriginalCellFilterCollection( m_managedView->name() ); + } + if ( restoreOriginal ) { m_managedView->setOverrideCellFilterCollection( nullptr ); diff --git a/ApplicationLibCode/ProjectDataModel/RimViewController.h b/ApplicationLibCode/ProjectDataModel/RimViewController.h index 5e65cf8e0f..6150e418a5 100644 --- a/ApplicationLibCode/ProjectDataModel/RimViewController.h +++ b/ApplicationLibCode/ProjectDataModel/RimViewController.h @@ -95,9 +95,6 @@ private: void updateResultColorsControl(); void updateLegendDefinitions(); - void updateDefaultOptions(); - - bool isCameraControlPossible() const; bool isMasterAndDepViewDifferentType() const; bool isPropertyFilterControlPossible() const; bool isCellFilterMappingApplicable() const; diff --git a/ApplicationLibCode/ProjectDataModel/RimViewLinker.cpp b/ApplicationLibCode/ProjectDataModel/RimViewLinker.cpp index ad9fcb38ad..430ee8714b 100644 --- a/ApplicationLibCode/ProjectDataModel/RimViewLinker.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimViewLinker.cpp @@ -263,6 +263,25 @@ void RimViewLinker::removeOverrides() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimViewLinker::updateScaleWidgetVisibility() +{ + // Create new display model that will call RimEclipseContourMapView::onUpdateLegends() where the visibility of scale + // widgets is controlled + + if ( masterView() ) masterView()->scheduleCreateDisplayModelAndRedraw(); + + for ( RimViewController* viewLink : m_viewControllers ) + { + if ( viewLink->managedView() ) + { + viewLink->managedView()->scheduleCreateDisplayModelAndRedraw(); + } + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -349,8 +368,10 @@ RimGridView* RimViewLinker::masterView() const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimViewLinker::allViews( std::vector& views ) const +std::vector RimViewLinker::allViews() const { + std::vector views; + views.push_back( m_masterView() ); for ( const auto& viewController : m_viewControllers ) @@ -360,6 +381,8 @@ void RimViewLinker::allViews( std::vector& views ) const views.push_back( viewController->managedView() ); } } + + return views; } //-------------------------------------------------------------------------------------------------- @@ -535,6 +558,8 @@ void RimViewLinker::onChildDeleted( caf::PdmChildArrayFieldHandle* childArr RimViewLinkerCollection* viewLinkerCollection = nullptr; this->firstAncestorOrThisOfType( viewLinkerCollection ); if ( viewLinkerCollection ) viewLinkerCollection->updateConnectedEditors(); + + updateScaleWidgetVisibility(); } //-------------------------------------------------------------------------------------------------- @@ -644,6 +669,8 @@ void RimViewLinker::addDependentView( RimGridView* view ) viewContr->setManagedView( view ); } + + updateScaleWidgetVisibility(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/RimViewLinker.h b/ApplicationLibCode/ProjectDataModel/RimViewLinker.h index 633bc151ea..8c9ebb7f49 100644 --- a/ApplicationLibCode/ProjectDataModel/RimViewLinker.h +++ b/ApplicationLibCode/ProjectDataModel/RimViewLinker.h @@ -83,7 +83,7 @@ public: void scheduleGeometryRegenForDepViews( RivCellSetEnum geometryType ); void scheduleCreateDisplayModelAndRedrawForDependentViews(); - void allViews( std::vector& views ) const; + std::vector allViews() const; void updateUiNameAndIcon(); @@ -113,6 +113,7 @@ private: void allViewsForCameraSync( const RimGridView* source, std::vector& views ) const; void removeOverrides(); + void updateScaleWidgetVisibility(); private: caf::PdmChildArrayField m_viewControllers; diff --git a/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp b/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp index ad3b5694e2..c2d9ba8b85 100644 --- a/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp +++ b/ApplicationLibCode/UserInterface/RiuViewerCommands.cpp @@ -46,7 +46,6 @@ #include "RimContextCommandBuilder.h" #include "RimEclipseCase.h" #include "RimEclipseCellColors.h" -#include "RimEclipseContourMapView.h" #include "RimEclipseFaultColors.h" #include "RimEclipseView.h" #include "RimEllipseFractureTemplate.h" @@ -56,7 +55,6 @@ #include "RimFracture.h" #include "RimGeoMechCase.h" #include "RimGeoMechCellColors.h" -#include "RimGeoMechContourMapView.h" #include "RimGeoMechView.h" #include "RimIntersectionResultDefinition.h" #include "RimLegendConfig.h" @@ -108,7 +106,6 @@ #include "cvfPart.h" #include "cvfRay.h" #include "cvfScene.h" -#include "cvfTransform.h" #include #include @@ -133,6 +130,7 @@ RiuViewerCommands::RiuViewerCommands( RiuViewer* ownerViewer ) , m_currentCellIndex( -1 ) , m_currentFaceIndex( cvf::StructGridInterface::NO_FACE ) , m_currentPickPositionInDomainCoords( cvf::Vec3d::UNDEFINED ) + , m_isCurrentPickInComparisonView( false ) , m_viewer( ownerViewer ) { if ( sm_defaultPickEventHandlers.empty() ) @@ -172,8 +170,6 @@ void RiuViewerCommands::addCompareToViewMenu( caf::CmdFeatureMenuBuilder* menuBu for ( auto view : views ) { if ( !dynamic_cast( view ) ) continue; - if ( dynamic_cast( view ) ) continue; - if ( dynamic_cast( view ) ) continue; if ( view != mainGridView ) { @@ -181,7 +177,7 @@ void RiuViewerCommands::addCompareToViewMenu( caf::CmdFeatureMenuBuilder* menuBu } } - if ( validComparisonViews.size() ) + if ( !validComparisonViews.empty() ) { menuBuilder->subMenuStart( "Compare To ...", QIcon( ":/ComparisonView16x16.png" ) ); for ( auto view : validComparisonViews ) @@ -223,7 +219,7 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event ) uint firstPartTriangleIndex = cvf::UNDEFINED_UINT; m_currentPickPositionInDomainCoords = cvf::Vec3d::UNDEFINED; - if ( pickItemInfos.size() ) + if ( !pickItemInfos.empty() ) { cvf::Vec3d globalIntersectionPoint = pickItemInfos[0].globalPickedPoint(); @@ -711,7 +707,7 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard // Make pickEventHandlers do their stuff - if ( pickItemInfos.size() ) + if ( !pickItemInfos.empty() ) { Ric3dPickEvent viewerEventObject( pickItemInfos, mainOrComparisonView, keyboardModifiers ); @@ -739,7 +735,7 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard uint firstPartTriangleIndex = cvf::UNDEFINED_UINT; cvf::Vec3d globalIntersectionPoint( cvf::Vec3d::ZERO ); - if ( pickItemInfos.size() ) + if ( !pickItemInfos.empty() ) { size_t indexToFirstNoneNncItem = cvf::UNDEFINED_SIZE_T; size_t indexToNncItemNearFirstItem = cvf::UNDEFINED_SIZE_T; @@ -1129,7 +1125,7 @@ void RiuViewerCommands::findFirstItems( Rim3dView* main size_t* indexToFirstNoneNncItem, size_t* indexToNncItemNearFirsItem ) { - CVF_ASSERT( pickItemInfos.size() > 0 ); + CVF_ASSERT( !pickItemInfos.empty() ); CVF_ASSERT( indexToFirstNoneNncItem ); CVF_ASSERT( indexToNncItemNearFirsItem );