From 2c3b51ad3f1696f72067692e3956a17ff7ae455a Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Mon, 28 Oct 2019 14:08:15 +0100 Subject: [PATCH] #4857 Fix measurement picking in comparison view. --- ApplicationCode/Application/RiaApplication.cpp | 2 +- .../RicMeasurementPickEventHandler.cpp | 6 +++--- .../RicToggleMeasurementModeFeature.cpp | 3 ++- .../ProjectDataModel/Measurement/RimMeasurement.cpp | 9 ++++----- ApplicationCode/ProjectDataModel/Rim3dView.cpp | 13 ++++++++++--- ApplicationCode/ProjectDataModel/Rim3dView.h | 2 +- .../UserInterface/RiuSelectionChangedHandler.cpp | 1 + 7 files changed, 22 insertions(+), 14 deletions(-) diff --git a/ApplicationCode/Application/RiaApplication.cpp b/ApplicationCode/Application/RiaApplication.cpp index ce738ee547..edd4e041f8 100644 --- a/ApplicationCode/Application/RiaApplication.cpp +++ b/ApplicationCode/Application/RiaApplication.cpp @@ -269,7 +269,7 @@ RimGridView* RiaApplication::activeMainOrComparisonGridView() RimGridView* activeView = RiaApplication::instance()->activeGridView(); RimGridView* viewOrComparisonView = activeView; - if ( activeView->viewer()->viewerCommands()->isCurrentPickInComparisonView() ) + if ( activeView != nullptr && activeView->viewer()->viewerCommands()->isCurrentPickInComparisonView() ) { if ( RimGridView* compView = dynamic_cast( activeView->activeComparisonView() ) ) { diff --git a/ApplicationCode/Commands/MeasurementCommands/RicMeasurementPickEventHandler.cpp b/ApplicationCode/Commands/MeasurementCommands/RicMeasurementPickEventHandler.cpp index 3c02b9ec29..b51f3d7d4b 100644 --- a/ApplicationCode/Commands/MeasurementCommands/RicMeasurementPickEventHandler.cpp +++ b/ApplicationCode/Commands/MeasurementCommands/RicMeasurementPickEventHandler.cpp @@ -23,6 +23,7 @@ #include "RiuViewerCommands.h" #include "Rim3dView.h" +#include "RimGridView.h" #include "RimIntersection.h" #include "RimMeasurement.h" #include "RimProject.h" @@ -84,7 +85,7 @@ void RicMeasurementPickEventHandler::enablePolyLineMode( bool polyLineModeEnable //-------------------------------------------------------------------------------------------------- bool RicMeasurementPickEventHandler::handle3dPickEvent( const Ric3dPickEvent& eventObject ) { - auto measurement = RiaApplication::instance()->project()->measurement(); + RimMeasurement* measurement = RiaApplication::instance()->project()->measurement(); if ( measurement && measurement->measurementMode() ) { @@ -98,8 +99,7 @@ bool RicMeasurementPickEventHandler::handle3dPickEvent( const Ric3dPickEvent& ev } } - Rim3dView* rimView = RiaApplication::instance()->activeReservoirView(); - + Rim3dView* rimView = dynamic_cast( RiaApplication::instance()->activeMainOrComparisonGridView() ); if ( firstGeometryPickInfo && rimView ) { cvf::ref transForm = rimView->displayCoordTransform(); diff --git a/ApplicationCode/Commands/MeasurementCommands/RicToggleMeasurementModeFeature.cpp b/ApplicationCode/Commands/MeasurementCommands/RicToggleMeasurementModeFeature.cpp index ba69296712..81634b8df5 100644 --- a/ApplicationCode/Commands/MeasurementCommands/RicToggleMeasurementModeFeature.cpp +++ b/ApplicationCode/Commands/MeasurementCommands/RicToggleMeasurementModeFeature.cpp @@ -23,6 +23,7 @@ #include "Rim3dView.h" #include "RimMeasurement.h" #include "RimProject.h" +#include "RimGridView.h" #include "cafCmdFeatureManager.h" #include "cafPdmUiPropertyViewDialog.h" @@ -123,7 +124,7 @@ Rim3dView* RicToggleMeasurementModeFeature::activeView() const { RiaApplication* app = RiaApplication::instance(); CAF_ASSERT( app ); - auto view = app->activeReservoirView(); + auto view = dynamic_cast(app->activeMainOrComparisonGridView()); return view; } diff --git a/ApplicationCode/ProjectDataModel/Measurement/RimMeasurement.cpp b/ApplicationCode/ProjectDataModel/Measurement/RimMeasurement.cpp index 4097ed9f1e..30d856fa9d 100644 --- a/ApplicationCode/ProjectDataModel/Measurement/RimMeasurement.cpp +++ b/ApplicationCode/ProjectDataModel/Measurement/RimMeasurement.cpp @@ -21,6 +21,7 @@ #include "RiaApplication.h" #include "Rim3dView.h" +#include "RimGridView.h" #include "MeasurementCommands/RicMeasurementPickEventHandler.h" @@ -89,7 +90,7 @@ RimMeasurement::MeasurementMode RimMeasurement::measurementMode() const //-------------------------------------------------------------------------------------------------- void RimMeasurement::addPointInDomainCoords( const Vec3d& domainCoord ) { - auto activeView = RiaApplication::instance()->activeReservoirView(); + auto activeView = dynamic_cast( RiaApplication::instance()->activeMainOrComparisonGridView() ); if ( m_sourceView.p() != activeView ) { @@ -194,8 +195,6 @@ RimMeasurement::Lengths RimMeasurement::calculateLenghts() const //-------------------------------------------------------------------------------------------------- void RimMeasurement::updateView() const { - if ( m_sourceView ) - { - m_sourceView->updateMeasurement(); - } + Rim3dView* rimView = RiaApplication::instance()->activeReservoirView(); + rimView->createMeasurementDisplayModelAndRedraw(); } diff --git a/ApplicationCode/ProjectDataModel/Rim3dView.cpp b/ApplicationCode/ProjectDataModel/Rim3dView.cpp index ae2c8911ce..db906e69e2 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dView.cpp +++ b/ApplicationCode/ProjectDataModel/Rim3dView.cpp @@ -1027,11 +1027,18 @@ void Rim3dView::updateZScaleLabel() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void Rim3dView::updateMeasurement() +void Rim3dView::createMeasurementDisplayModelAndRedraw() { - if ( m_viewer ) + appendMeasurementToModel(); + + if ( Rim3dView* depView = prepareComparisonView() ) + { + depView->appendMeasurementToModel(); + restoreComparisonView(); + } + + if ( nativeOrOverrideViewer() ) { - appendMeasurementToModel(); nativeOrOverrideViewer()->update(); } } diff --git a/ApplicationCode/ProjectDataModel/Rim3dView.h b/ApplicationCode/ProjectDataModel/Rim3dView.h index f890dc6277..19618d8328 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dView.h +++ b/ApplicationCode/ProjectDataModel/Rim3dView.h @@ -161,7 +161,7 @@ public: void updateAnnotationItems(); void updateScaling(); void updateZScaleLabel(); - void updateMeasurement(); + void createMeasurementDisplayModelAndRedraw(); bool isMasterView() const; Rim3dView* activeComparisonView() const; diff --git a/ApplicationCode/UserInterface/RiuSelectionChangedHandler.cpp b/ApplicationCode/UserInterface/RiuSelectionChangedHandler.cpp index 2d1d9ee3a6..1de2e4a514 100644 --- a/ApplicationCode/UserInterface/RiuSelectionChangedHandler.cpp +++ b/ApplicationCode/UserInterface/RiuSelectionChangedHandler.cpp @@ -324,6 +324,7 @@ void RiuSelectionChangedHandler::scheduleUpdateForAllVisibleViews() const for ( size_t i = 0; i < visibleViews.size(); i++ ) { visibleViews[i]->createHighlightAndGridBoxDisplayModelWithRedraw(); + visibleViews[i]->createMeasurementDisplayModelAndRedraw(); } } }