From 4f3e62a0d612c08a4bf27753d3c4cd06655bafd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Wed, 16 Oct 2019 12:36:49 +0200 Subject: [PATCH 01/21] VizFwk: Add access method to RenderingScissor --- Fwk/VizFwk/LibViewing/cvfRendering.cpp | 8 ++++++++ Fwk/VizFwk/LibViewing/cvfRendering.h | 1 + 2 files changed, 9 insertions(+) diff --git a/Fwk/VizFwk/LibViewing/cvfRendering.cpp b/Fwk/VizFwk/LibViewing/cvfRendering.cpp index fc0a4c4aa7..678801341e 100644 --- a/Fwk/VizFwk/LibViewing/cvfRendering.cpp +++ b/Fwk/VizFwk/LibViewing/cvfRendering.cpp @@ -686,6 +686,14 @@ void Rendering::setRenderingScissor(RenderingScissor* scissor) m_renderingScissor = scissor; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::RenderingScissor* Rendering::renderingScissor() +{ + return m_renderingScissor.p(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/Fwk/VizFwk/LibViewing/cvfRendering.h b/Fwk/VizFwk/LibViewing/cvfRendering.h index bbad9858f7..79e1857aa5 100644 --- a/Fwk/VizFwk/LibViewing/cvfRendering.h +++ b/Fwk/VizFwk/LibViewing/cvfRendering.h @@ -107,6 +107,7 @@ public: void setClearMode(Viewport::ClearMode clearMode); Viewport::ClearMode clearMode() const; void setRenderingScissor(RenderingScissor* scissor); + RenderingScissor* renderingScissor(); void setEffectOverride(Effect* effect); Effect* effectOverride(); From bba8fea197e4261f23598633db16e5d15f6355a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Wed, 16 Oct 2019 12:45:13 +0200 Subject: [PATCH 02/21] #4857 Refactoring: Use legendConfigs method when removing legends on updateLegends --- .../ProjectDataModel/RimEclipseView.cpp | 16 ++++++---------- .../ProjectDataModel/RimGeoMechView.cpp | 8 ++++++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp index a34ec07e35..5251a673a1 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp @@ -1169,16 +1169,12 @@ void RimEclipseView::updateLegends() } 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() ); + std::vector legendConfs = this->legendConfigs(); + + for (auto legendConf : legendConfs) + { + nativeOrOverrideViewer()->removeColorLegend(legendConf->titledOverlayFrame()); + } } } diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp index 3d558ed31b..da712ed486 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp @@ -440,8 +440,12 @@ void RimGeoMechView::updateLegends() } else { - nativeOrOverrideViewer()->removeColorLegend( cellResult()->legendConfig->titledOverlayFrame() ); - nativeOrOverrideViewer()->removeColorLegend( m_tensorResults->arrowColorLegendConfig->titledOverlayFrame() ); + std::vector legendConfs = this->legendConfigs(); + + for (auto legendConf : legendConfs) + { + nativeOrOverrideViewer()->removeColorLegend(legendConf->titledOverlayFrame()); + } } this->updateLegendTextAndRanges( cellResult()->legendConfig(), m_currentTimeStep() ); From d438158691696e5eee995b03be31b7f393c505dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Wed, 16 Oct 2019 12:56:06 +0200 Subject: [PATCH 03/21] #4857 AppFwk: Handle picking in the comparison part of the view --- Fwk/AppFwk/cafViewer/cafViewer.cpp | 35 ++++++++++++++++++++++++++++-- Fwk/AppFwk/cafViewer/cafViewer.h | 2 ++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/Fwk/AppFwk/cafViewer/cafViewer.cpp b/Fwk/AppFwk/cafViewer/cafViewer.cpp index 95cbb5fda8..c71089f221 100644 --- a/Fwk/AppFwk/cafViewer/cafViewer.cpp +++ b/Fwk/AppFwk/cafViewer/cafViewer.cpp @@ -650,10 +650,14 @@ bool caf::Viewer::rayPick(int winPosX, int winPosY, cvf::HitItemCollection* pick int translatedMousePosX = winPosX; int translatedMousePosY = height() - winPosY; - cvf::ref ris = m_mainRendering->rayIntersectSpecFromWindowCoordinates(translatedMousePosX, translatedMousePosY); + bool mousePosIsWithinComparisonView = isMousePosWithinComparisonView(winPosX, winPosY); + + cvf::Rendering* renderingToInvestigate = mousePosIsWithinComparisonView ? m_comparisonMainRendering.p(): m_mainRendering.p(); + + cvf::ref ris = renderingToInvestigate->rayIntersectSpecFromWindowCoordinates(translatedMousePosX, translatedMousePosY); if (ris.notNull()) { - bool retVal = m_mainRendering->rayIntersect(*ris, pickedPoints); + bool retVal = renderingToInvestigate->rayIntersect(*ris, pickedPoints); if (retVal && globalRayOrigin) { CVF_ASSERT(ris->ray() != nullptr); @@ -665,8 +669,35 @@ bool caf::Viewer::rayPick(int winPosX, int winPosY, cvf::HitItemCollection* pick { return false; } +} +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool caf::Viewer::isMousePosWithinComparisonView(int winPosX, int winPosY) +{ + bool mousePosIsWithinComparisonView = false; + int translatedMousePosX = winPosX; + int translatedMousePosY = height() - winPosY; + + if ( m_comparisonMainRendering.notNull() && m_comparisonMainRendering->scene() ) + { + if ( cvf::RenderingScissor* sciss = m_comparisonMainRendering->renderingScissor() ) + { + cvf::Recti scissorRect(sciss->x(), sciss->y(), sciss->width(), sciss->height()); + if ( scissorRect.contains(cvf::Vec2i(translatedMousePosX, translatedMousePosY)) ) + { + mousePosIsWithinComparisonView = true; + } + } + else // Whole screen is covered + { + mousePosIsWithinComparisonView = true; + } + } + + return mousePosIsWithinComparisonView; } //-------------------------------------------------------------------------------------------------- diff --git a/Fwk/AppFwk/cafViewer/cafViewer.h b/Fwk/AppFwk/cafViewer/cafViewer.h index 3a3bb0c44f..e66021c93b 100644 --- a/Fwk/AppFwk/cafViewer/cafViewer.h +++ b/Fwk/AppFwk/cafViewer/cafViewer.h @@ -151,6 +151,8 @@ public: bool canRender() const; bool rayPick(int winPosX, int winPosY, cvf::HitItemCollection* pickedPoints, cvf::Vec3d* rayGlobalOrigin = nullptr) ; + bool isMousePosWithinComparisonView(int winPosX, int winPosY); + cvf::OverlayItem* overlayItem(int winPosX, int winPosY); // QPainter based drawing on top of the OpenGL graphics From e3dc32bd71e47d9bf3b72de40c1392315a1d0491 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Wed, 16 Oct 2019 14:08:16 +0200 Subject: [PATCH 04/21] #4857 AppFwk: Add handling of comparison view to the 3d navigation policies --- Fwk/AppFwk/cafViewer/cafCadNavigation.cpp | 13 +---- .../cafViewer/cafCeetronPlusNavigation.cpp | 13 +---- .../cafViewer/cafTrackBallBasedNavigation.cpp | 47 +++++++++++++------ .../cafViewer/cafTrackBallBasedNavigation.h | 7 +-- 4 files changed, 38 insertions(+), 42 deletions(-) diff --git a/Fwk/AppFwk/cafViewer/cafCadNavigation.cpp b/Fwk/AppFwk/cafViewer/cafCadNavigation.cpp index 1a5a44f5ac..abc6fd2d63 100644 --- a/Fwk/AppFwk/cafViewer/cafCadNavigation.cpp +++ b/Fwk/AppFwk/cafViewer/cafCadNavigation.cpp @@ -79,18 +79,7 @@ bool caf::CadNavigation::handleInputEvent(QInputEvent* inputEvent) if (me->button() == Qt::MidButton && me->modifiers() == Qt::NoModifier && isRotationEnabled()) { - cvf::HitItemCollection hic; - bool hitSomething = m_viewer->rayPick( me->x(), me->y(), &hic); - - if (hitSomething) - { - cvf::Vec3d pointOfInterest = hic.firstItem()->intersectionPoint(); - this->setPointOfInterest(pointOfInterest); - } - else - { - initializeRotationCenter(); - } + this->pickAndSetPointOfInterest(me->x(), me->y()); m_trackball->startNavigation(cvf::ManipulatorTrackball::ROTATE, translatedMousePosX, translatedMousePosY); m_roationSensitivityCalculator.init(me); diff --git a/Fwk/AppFwk/cafViewer/cafCeetronPlusNavigation.cpp b/Fwk/AppFwk/cafViewer/cafCeetronPlusNavigation.cpp index 5fa26f6f24..2ba9586675 100644 --- a/Fwk/AppFwk/cafViewer/cafCeetronPlusNavigation.cpp +++ b/Fwk/AppFwk/cafViewer/cafCeetronPlusNavigation.cpp @@ -81,18 +81,7 @@ bool caf::CeetronPlusNavigation::handleInputEvent(QInputEvent* inputEvent) if (me->button() == Qt::RightButton && isRotationEnabled()) { - cvf::HitItemCollection hic; - bool hitSomething = m_viewer->rayPick( me->x(), me->y(), &hic); - - if (hitSomething) - { - cvf::Vec3d pointOfInterest = hic.firstItem()->intersectionPoint(); - this->setPointOfInterest(pointOfInterest); - } - else - { - initializeRotationCenter(); - } + this->pickAndSetPointOfInterest(me->x(), me->y()); m_trackball->startNavigation(cvf::ManipulatorTrackball::ROTATE, translatedMousePosX, translatedMousePosY); m_roationSensitivityCalculator.init(me); diff --git a/Fwk/AppFwk/cafViewer/cafTrackBallBasedNavigation.cpp b/Fwk/AppFwk/cafViewer/cafTrackBallBasedNavigation.cpp index 03d7836288..9f8b41fa10 100644 --- a/Fwk/AppFwk/cafViewer/cafTrackBallBasedNavigation.cpp +++ b/Fwk/AppFwk/cafViewer/cafTrackBallBasedNavigation.cpp @@ -157,21 +157,22 @@ void caf::TrackBallBasedNavigation::setPointOfInterest(cvf::Vec3d poi) } //-------------------------------------------------------------------------------------------------- -/// +/// //-------------------------------------------------------------------------------------------------- -void caf::TrackBallBasedNavigation::updatePointOfInterestDuringZoomIfNecessary(int zoomX, int zoomY) +void caf::TrackBallBasedNavigation::pickAndSetPointOfInterest(int winPosX, int winPosY) { - bool hitSomething = false; cvf::HitItemCollection hic; - if (shouldRaytraceForNewPoiDuringWheelZoom(zoomX, zoomY)) - { - hitSomething = m_viewer->rayPick(zoomX, zoomY, &hic); - updateWheelZoomPosition(zoomX, zoomY); - } + bool hitSomething = m_viewer->rayPick( winPosX, winPosY, &hic); if (hitSomething) - { + { cvf::Vec3d pointOfInterest = hic.firstItem()->intersectionPoint(); + + if (m_viewer->isMousePosWithinComparisonView( winPosX, winPosY )) + { + pointOfInterest -= m_viewer->comparisonViewEyePointOffset(); + } + this->setPointOfInterest(pointOfInterest); } else @@ -180,6 +181,22 @@ void caf::TrackBallBasedNavigation::updatePointOfInterestDuringZoomIfNecessary(i } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void caf::TrackBallBasedNavigation::updatePointOfInterestDuringZoomIfNecessary(int winPosX, int winPosY) +{ + if (shouldRaytraceForNewPoiDuringWheelZoom(winPosX, winPosY)) + { + this->pickAndSetPointOfInterest(winPosX, winPosY); + updateWheelZoomPosition(winPosX, winPosY); + } + else + { + initializeRotationCenter(); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -271,24 +288,24 @@ cvf::ref caf::TrackBallBasedNavigation::createZoomRay(int cvfXPos, int //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void caf::TrackBallBasedNavigation::updateWheelZoomPosition(int zoomX, int zoomY) +void caf::TrackBallBasedNavigation::updateWheelZoomPosition(int winPosX, int winPosY) { - m_lastWheelZoomPosX = zoomX; - m_lastWheelZoomPosY = zoomY; + m_lastWheelZoomPosX = winPosX; + m_lastWheelZoomPosY = winPosY; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool caf::TrackBallBasedNavigation::shouldRaytraceForNewPoiDuringWheelZoom(int zoomX, int zoomY) const +bool caf::TrackBallBasedNavigation::shouldRaytraceForNewPoiDuringWheelZoom(int winPosX, int winPosY) const { // Raytrace if the last zoom position isn't set if (m_lastWheelZoomPosX == -1 || m_lastWheelZoomPosY == -1) { return true; } - int diffX = zoomX - m_lastWheelZoomPosX; - int diffY = zoomY - m_lastWheelZoomPosY; + int diffX = winPosX - m_lastWheelZoomPosX; + int diffY = winPosY - m_lastWheelZoomPosY; const int pixelThreshold = 5; if (diffX * diffX + diffY * diffY > pixelThreshold * pixelThreshold) diff --git a/Fwk/AppFwk/cafViewer/cafTrackBallBasedNavigation.h b/Fwk/AppFwk/cafViewer/cafTrackBallBasedNavigation.h index 5328b1efe1..76134408dd 100644 --- a/Fwk/AppFwk/cafViewer/cafTrackBallBasedNavigation.h +++ b/Fwk/AppFwk/cafViewer/cafTrackBallBasedNavigation.h @@ -107,7 +107,8 @@ protected: void setView( const cvf::Vec3d& alongDirection, const cvf::Vec3d& upDirection ) override; cvf::Vec3d pointOfInterest() override; void setPointOfInterest(cvf::Vec3d poi) override; - void updatePointOfInterestDuringZoomIfNecessary(int zoomX, int zoomY); + void pickAndSetPointOfInterest(int winPosX, int winPosY); + void updatePointOfInterestDuringZoomIfNecessary(int winPosX, int winPosY); void forcePointOfInterestUpdateDuringNextWheelZoom(); // Track ball navigation specific @@ -134,8 +135,8 @@ protected: bool isRotationEnabled() { return m_isRotationEnabled; } private: - void updateWheelZoomPosition(int zoomX, int zoomY); - bool shouldRaytraceForNewPoiDuringWheelZoom(int zoomX, int zoomY) const; + void updateWheelZoomPosition(int winPosX, int winPosY); + bool shouldRaytraceForNewPoiDuringWheelZoom(int winPosX, int winPosY) const; private: bool m_consumeEvents; From 39801a201832807e143bebf963ca1f59e57c421a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Wed, 16 Oct 2019 14:09:10 +0200 Subject: [PATCH 05/21] #4857 Handle comparison views in the custom 3D navigation policies --- ApplicationCode/UserInterface/RiuCadNavigation.cpp | 13 +------------ .../UserInterface/RiuGeoQuestNavigation.cpp | 13 +------------ ApplicationCode/UserInterface/RiuRmsNavigation.cpp | 13 +------------ 3 files changed, 3 insertions(+), 36 deletions(-) diff --git a/ApplicationCode/UserInterface/RiuCadNavigation.cpp b/ApplicationCode/UserInterface/RiuCadNavigation.cpp index de5d61dfeb..ee560750b6 100644 --- a/ApplicationCode/UserInterface/RiuCadNavigation.cpp +++ b/ApplicationCode/UserInterface/RiuCadNavigation.cpp @@ -55,18 +55,7 @@ bool RiuCadNavigation::handleInputEvent( QInputEvent* inputEvent ) if ( me->button() == Qt::MidButton && me->modifiers() == Qt::NoModifier && isRotationEnabled() ) { - cvf::HitItemCollection hic; - bool hitSomething = m_viewer->rayPick( me->x(), me->y(), &hic ); - - if ( hitSomething ) - { - cvf::Vec3d pointOfInterest = hic.firstItem()->intersectionPoint(); - this->setPointOfInterest( pointOfInterest ); - } - else - { - initializeRotationCenter(); - } + this->pickAndSetPointOfInterest(me->x(), me->y()); m_trackball->startNavigation( cvf::ManipulatorTrackball::ROTATE, translatedMousePosX, translatedMousePosY ); m_isNavigating = true; diff --git a/ApplicationCode/UserInterface/RiuGeoQuestNavigation.cpp b/ApplicationCode/UserInterface/RiuGeoQuestNavigation.cpp index 2d2d3107ec..c5a302e373 100644 --- a/ApplicationCode/UserInterface/RiuGeoQuestNavigation.cpp +++ b/ApplicationCode/UserInterface/RiuGeoQuestNavigation.cpp @@ -55,18 +55,7 @@ bool RiuGeoQuestNavigation::handleInputEvent( QInputEvent* inputEvent ) if ( me->button() == Qt::LeftButton && isRotationEnabled() ) { - cvf::HitItemCollection hic; - bool hitSomething = m_viewer->rayPick( me->x(), me->y(), &hic ); - - if ( hitSomething ) - { - cvf::Vec3d pointOfInterest = hic.firstItem()->intersectionPoint(); - this->setPointOfInterest( pointOfInterest ); - } - else - { - initializeRotationCenter(); - } + this->pickAndSetPointOfInterest(me->x(), me->y()); m_trackball->startNavigation( cvf::ManipulatorTrackball::ROTATE, translatedMousePosX, translatedMousePosY ); m_isNavigating = true; diff --git a/ApplicationCode/UserInterface/RiuRmsNavigation.cpp b/ApplicationCode/UserInterface/RiuRmsNavigation.cpp index f33c6ad373..f777f54a64 100644 --- a/ApplicationCode/UserInterface/RiuRmsNavigation.cpp +++ b/ApplicationCode/UserInterface/RiuRmsNavigation.cpp @@ -55,18 +55,7 @@ bool RiuRmsNavigation::handleInputEvent( QInputEvent* inputEvent ) if ( me->button() == Qt::MidButton && isRotationEnabled() ) { - cvf::HitItemCollection hic; - bool hitSomething = m_viewer->rayPick( me->x(), me->y(), &hic ); - - if ( hitSomething ) - { - cvf::Vec3d pointOfInterest = hic.firstItem()->intersectionPoint(); - this->setPointOfInterest( pointOfInterest ); - } - else - { - initializeRotationCenter(); - } + this->pickAndSetPointOfInterest(me->x(), me->y()); m_trackball->startNavigation( cvf::ManipulatorTrackball::ROTATE, translatedMousePosX, translatedMousePosY ); m_isNavigating = true; From d4ebf8d5434be24fba72a406f9ca60c5bc1a63b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Wed, 16 Oct 2019 14:12:34 +0200 Subject: [PATCH 06/21] #4857 Viewer Commands: Handle general picking in the comparison view --- ApplicationCode/ProjectDataModel/Rim3dView.h | 4 +- .../UserInterface/RiuViewerCommands.cpp | 95 +++++++++++++------ .../UserInterface/RiuViewerCommands.h | 13 ++- 3 files changed, 74 insertions(+), 38 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/Rim3dView.h b/ApplicationCode/ProjectDataModel/Rim3dView.h index 579a3b94dd..cd8161cfc7 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dView.h +++ b/ApplicationCode/ProjectDataModel/Rim3dView.h @@ -163,7 +163,8 @@ public: void updateZScaleLabel(); void updateMeasurement(); - bool isMasterView() const; + bool isMasterView() const; + Rim3dView* activeComparisonView() const; cvf::ref displayCoordTransform() const override; @@ -297,7 +298,6 @@ private: // Pure private methods : Override viewer and comparison view void setOverrideViewer( RiuViewer* overrideViewer ); - Rim3dView* activeComparisonView() const; std::set viewsUsingThisAsComparisonView(); Rim3dView* prepareComparisonView(); diff --git a/ApplicationCode/UserInterface/RiuViewerCommands.cpp b/ApplicationCode/UserInterface/RiuViewerCommands.cpp index 6dfa08ad74..f46f403017 100644 --- a/ApplicationCode/UserInterface/RiuViewerCommands.cpp +++ b/ApplicationCode/UserInterface/RiuViewerCommands.cpp @@ -165,6 +165,10 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event ) } } + bool isComparisonViewPick = m_viewer->isMousePosWithinComparisonView( event->x(), event->y() ); + Rim3dView* mainOrComparisonView = isComparisonViewPick ? m_reservoirView->activeComparisonView() + : m_reservoirView.p(); + // Find the following data const cvf::Part* firstHitPart = nullptr; @@ -202,9 +206,9 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event ) cvf::Vec3d displayModelOffset = cvf::Vec3d::ZERO; - if ( m_reservoirView.p() ) + if ( mainOrComparisonView ) { - cvf::ref transForm = m_reservoirView.p()->displayCoordTransform(); + cvf::ref transForm = mainOrComparisonView->displayCoordTransform(); m_currentPickPositionInDomainCoords = transForm->transformToDomainCoord( globalIntersectionPoint ); } } @@ -218,8 +222,8 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event ) // Check type of view - RimGridView* gridView = dynamic_cast( m_reservoirView.p() ); - Rim2dIntersectionView* int2dView = dynamic_cast( m_reservoirView.p() ); + RimGridView* gridView = dynamic_cast( mainOrComparisonView ); + Rim2dIntersectionView* int2dView = dynamic_cast( mainOrComparisonView ); if ( firstHitPart && firstPartTriangleIndex != cvf::UNDEFINED_UINT ) { @@ -250,7 +254,8 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event ) } else if ( crossSectionSourceInfo ) { - findCellAndGridIndex( crossSectionSourceInfo, + findCellAndGridIndex( mainOrComparisonView, + crossSectionSourceInfo, firstPartTriangleIndex, &m_currentCellIndex, &m_currentGridIdx ); @@ -273,7 +278,8 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event ) } else if ( intersectionBoxSourceInfo ) { - findCellAndGridIndex( intersectionBoxSourceInfo, + findCellAndGridIndex( mainOrComparisonView, + intersectionBoxSourceInfo, firstPartTriangleIndex, &m_currentCellIndex, &m_currentGridIdx ); @@ -290,12 +296,12 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event ) { // IJK -slice commands RimViewController* viewController = nullptr; - if ( m_reservoirView ) viewController = m_reservoirView->viewController(); + if ( mainOrComparisonView ) viewController = mainOrComparisonView->viewController(); if ( !viewController || !viewController->isRangeFiltersControlled() ) { size_t i, j, k; - ijkFromCellIndex( m_currentGridIdx, m_currentCellIndex, &i, &j, &k ); + ijkFromCellIndex( mainOrComparisonView, m_currentGridIdx, m_currentCellIndex, &i, &j, &k ); QVariantList iSliceList; iSliceList.push_back( 0 ); @@ -347,7 +353,7 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event ) menuBuilder.addSeparator(); - RimEclipseView* eclipseView = dynamic_cast( m_reservoirView.p() ); + RimEclipseView* eclipseView = dynamic_cast( mainOrComparisonView ); if ( eclipseView ) { // Hide faults command @@ -582,11 +588,15 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard } } + bool isComparisonViewPick = m_viewer->isMousePosWithinComparisonView( winPosX, winPosY ); + Rim3dView* mainOrComparisonView = isComparisonViewPick ? m_reservoirView->activeComparisonView() + : m_reservoirView.p(); + // Make pickEventHandlers do their stuff if ( pickItemInfos.size() ) { - Ric3dPickEvent viewerEventObject( pickItemInfos, m_reservoirView ); + Ric3dPickEvent viewerEventObject( pickItemInfos, mainOrComparisonView ); if ( sm_overridingPickHandler && sm_overridingPickHandler->handle3dPickEvent( viewerEventObject ) ) { @@ -630,7 +640,7 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard size_t indexToNncItemNearFirstItem = cvf::UNDEFINED_SIZE_T; ; - findFirstItems( pickItemInfos, &indexToFirstNoneNncItem, &indexToNncItemNearFirstItem ); + findFirstItems( mainOrComparisonView, pickItemInfos, &indexToFirstNoneNncItem, &indexToNncItemNearFirstItem ); if ( indexToFirstNoneNncItem != cvf::UNDEFINED_SIZE_T ) { @@ -716,10 +726,10 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard // Set fracture resultInfo text QString resultInfoText; - cvf::ref transForm = m_reservoirView->displayCoordTransform(); + cvf::ref transForm = mainOrComparisonView->displayCoordTransform(); cvf::Vec3d domainCoord = transForm->transformToDomainCoord( globalIntersectionPoint ); - RimEclipseView* eclView = dynamic_cast( m_reservoirView.p() ); + RimEclipseView* eclView = dynamic_cast( mainOrComparisonView ); RivWellFracturePartMgr* partMgr = fracture->fracturePartManager(); if ( eclView ) resultInfoText = partMgr->resultInfoText( *eclView, domainCoord ); @@ -763,7 +773,11 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard } else if ( crossSectionSourceInfo ) { - findCellAndGridIndex( crossSectionSourceInfo, firstPartTriangleIndex, &cellIndex, &gridIndex ); + findCellAndGridIndex( mainOrComparisonView, + crossSectionSourceInfo, + firstPartTriangleIndex, + &cellIndex, + &gridIndex ); intersectionHit = true; intersectionTriangleHit = crossSectionSourceInfo->triangle( firstPartTriangleIndex ); @@ -775,7 +789,11 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard } else if ( intersectionBoxSourceInfo ) { - findCellAndGridIndex( intersectionBoxSourceInfo, firstPartTriangleIndex, &cellIndex, &gridIndex ); + findCellAndGridIndex( mainOrComparisonView, + intersectionBoxSourceInfo, + firstPartTriangleIndex, + &cellIndex, + &gridIndex ); intersectionHit = true; intersectionTriangleHit = intersectionBoxSourceInfo->triangle( firstPartTriangleIndex ); @@ -796,7 +814,7 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard size_t globalCellIndex = wellConnectionSourceInfo->globalCellIndexFromTriangleIndex( firstPartTriangleIndex ); - RimEclipseView* eclipseView = dynamic_cast( m_reservoirView.p() ); + RimEclipseView* eclipseView = dynamic_cast( mainOrComparisonView ); if ( eclipseView ) { RimEclipseCase* eclipseCase = nullptr; @@ -875,7 +893,7 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard double connectionFactor = simWellConnectionSourceInfo->connectionFactorFromTriangleIndex( firstPartTriangleIndex ); - RimEclipseView* eclipseView = dynamic_cast( m_reservoirView.p() ); + RimEclipseView* eclipseView = dynamic_cast( mainOrComparisonView ); if ( eclipseView ) { RimEclipseCase* eclipseCase = nullptr; @@ -949,9 +967,9 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard RiuSelectionItem* selItem = nullptr; { - Rim2dIntersectionView* intersectionView = dynamic_cast( m_reservoirView.p() ); - RimEclipseView* eclipseView = dynamic_cast( m_reservoirView.p() ); - RimGeoMechView* geomView = dynamic_cast( m_reservoirView.p() ); + Rim2dIntersectionView* intersectionView = dynamic_cast( mainOrComparisonView ); + RimEclipseView* eclipseView = dynamic_cast( mainOrComparisonView ); + RimGeoMechView* geomView = dynamic_cast( mainOrComparisonView ); if ( intersectionView ) { @@ -1063,14 +1081,15 @@ void RiuViewerCommands::removeDefaultPickEventHandler( RicDefaultPickEventHandle //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuViewerCommands::findCellAndGridIndex( const RivIntersectionSourceInfo* crossSectionSourceInfo, +void RiuViewerCommands::findCellAndGridIndex( Rim3dView* mainOrComparisonView, + const RivIntersectionSourceInfo* crossSectionSourceInfo, cvf::uint firstPartTriangleIndex, size_t* cellIndex, size_t* gridIndex ) { CVF_ASSERT( cellIndex && gridIndex ); - RimCase* ownerCase = m_reservoirView->ownerCase(); + RimCase* ownerCase = mainOrComparisonView->ownerCase(); RimEclipseCase* eclipseCase = dynamic_cast( ownerCase ); RimGeoMechCase* geomCase = dynamic_cast( ownerCase ); if ( eclipseCase ) @@ -1094,15 +1113,17 @@ void RiuViewerCommands::findCellAndGridIndex( const RivIntersectionSourceInfo* c //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuViewerCommands::findCellAndGridIndex( const RivIntersectionBoxSourceInfo* intersectionBoxSourceInfo, +void RiuViewerCommands::findCellAndGridIndex( Rim3dView* mainOrComparisonView, + const RivIntersectionBoxSourceInfo* intersectionBoxSourceInfo, cvf::uint firstPartTriangleIndex, size_t* cellIndex, size_t* gridIndex ) { CVF_ASSERT( cellIndex && gridIndex ); - RimEclipseView* eclipseView = dynamic_cast( m_reservoirView.p() ); - RimGeoMechView* geomView = dynamic_cast( m_reservoirView.p() ); + RimEclipseView* eclipseView = dynamic_cast( mainOrComparisonView ); + RimGeoMechView* geomView = dynamic_cast( mainOrComparisonView ); + if ( eclipseView ) { size_t globalCellIndex = intersectionBoxSourceInfo->triangleToCellIndex()[firstPartTriangleIndex]; @@ -1121,7 +1142,8 @@ void RiuViewerCommands::findCellAndGridIndex( const RivIntersectionBoxSourceInfo //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuViewerCommands::findFirstItems( const std::vector& pickItemInfos, +void RiuViewerCommands::findFirstItems( Rim3dView* mainOrComparisonView, + const std::vector& pickItemInfos, size_t* indexToFirstNoneNncItem, size_t* indexToNncItemNearFirsItem ) { @@ -1131,7 +1153,7 @@ void RiuViewerCommands::findFirstItems( const std::vector& pick double pickDepthThresholdSquared = 0.05 * 0.05; { - RimEclipseView* eclipseView = dynamic_cast( m_reservoirView.p() ); + RimEclipseView* eclipseView = dynamic_cast( mainOrComparisonView ); if ( eclipseView && eclipseView->mainGrid() ) { @@ -1195,10 +1217,11 @@ void RiuViewerCommands::findFirstItems( const std::vector& pick //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RiuViewerCommands::ijkFromCellIndex( size_t gridIdx, size_t cellIndex, size_t* i, size_t* j, size_t* k ) +void RiuViewerCommands::ijkFromCellIndex( + Rim3dView* mainOrComparisonView, size_t gridIdx, size_t cellIndex, size_t* i, size_t* j, size_t* k ) { - RimEclipseView* eclipseView = dynamic_cast( m_reservoirView.p() ); - RimGeoMechView* geomView = dynamic_cast( m_reservoirView.p() ); + RimEclipseView* eclipseView = dynamic_cast( mainOrComparisonView ); + RimGeoMechView* geomView = dynamic_cast( mainOrComparisonView ); if ( eclipseView && eclipseView->eclipseCase() ) { @@ -1232,6 +1255,13 @@ bool RiuViewerCommands::handleOverlayItemPicking( int winPosX, int winPosY ) else { std::vector legendConfigs = m_reservoirView->legendConfigs(); + if ( m_reservoirView->activeComparisonView() ) + { + std::vector compViewLegendConfigs = m_reservoirView->activeComparisonView() + ->legendConfigs(); + legendConfigs.insert( legendConfigs.end(), compViewLegendConfigs.begin(), compViewLegendConfigs.end() ); + } + for ( const auto& legendConfig : legendConfigs ) { if ( legendConfig && legendConfig->titledOverlayFrame() == pickedOverlayItem ) @@ -1254,10 +1284,13 @@ void RiuViewerCommands::handleTextPicking( int winPosX, int winPosY, cvf::HitIte { using namespace cvf; + bool isMouseWithinComparisonView = m_viewer->isMousePosWithinComparisonView( winPosX, winPosY ); + int translatedMousePosX = winPosX; int translatedMousePosY = m_viewer->height() - winPosY; - Scene* scene = m_viewer->currentScene(); + Scene* scene = m_viewer->currentScene( isMouseWithinComparisonView ); + if ( !scene ) return; Collection partCollection; diff --git a/ApplicationCode/UserInterface/RiuViewerCommands.h b/ApplicationCode/UserInterface/RiuViewerCommands.h index 57c51d1722..4811238d5f 100644 --- a/ApplicationCode/UserInterface/RiuViewerCommands.h +++ b/ApplicationCode/UserInterface/RiuViewerCommands.h @@ -68,18 +68,21 @@ public: cvf::Vec3d lastPickPositionInDomainCoords() const; private: - void findCellAndGridIndex( const RivIntersectionSourceInfo* crossSectionSourceInfo, + void findCellAndGridIndex( Rim3dView* mainOrComparisonView, + const RivIntersectionSourceInfo* crossSectionSourceInfo, cvf::uint firstPartTriangleIndex, size_t* cellIndex, size_t* gridIndex ); - void findCellAndGridIndex( const RivIntersectionBoxSourceInfo* intersectionBoxSourceInfo, + void findCellAndGridIndex( Rim3dView* mainOrComparisonView, + const RivIntersectionBoxSourceInfo* intersectionBoxSourceInfo, cvf::uint firstPartTriangleIndex, size_t* cellIndex, size_t* gridIndex ); + void ijkFromCellIndex( + Rim3dView* mainOrComparisonView, size_t gridIdx, size_t cellIndex, size_t* i, size_t* j, size_t* k ); - void ijkFromCellIndex( size_t gridIdx, size_t cellIndex, size_t* i, size_t* j, size_t* k ); - - void findFirstItems( const std::vector& pickItemInfos, + void findFirstItems( Rim3dView* mainOrComparisonView, + const std::vector& pickItemInfos, size_t* indexToFirstNoneNncItem, size_t* indexToNncItemNearFirsItem ); From 3f203b808b1c34a9e07bd6bf3db9f7998c7089ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Wed, 16 Oct 2019 16:19:32 +0200 Subject: [PATCH 07/21] AppFwk: Viewer: Fix missing nearplane adjustments in comparison view --- Fwk/AppFwk/cafViewer/cafViewer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Fwk/AppFwk/cafViewer/cafViewer.cpp b/Fwk/AppFwk/cafViewer/cafViewer.cpp index c71089f221..426d9498ac 100644 --- a/Fwk/AppFwk/cafViewer/cafViewer.cpp +++ b/Fwk/AppFwk/cafViewer/cafViewer.cpp @@ -474,6 +474,7 @@ void caf::Viewer::optimizeClippingPlanes() camEye += m_comparisonViewOffset; camViewRefPoint += m_comparisonViewOffset; m_comparisonMainCamera->setFromLookAt(camEye, camViewRefPoint, camUp); + navPointOfinterest += m_comparisonViewOffset; if ( calculateNearFarPlanes(m_comparisonMainRendering.p(), navPointOfinterest, &farPlaneDist, &nearPlaneDist) ) { From b2015ce91b070e0a679610b50c1abd2e644218f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Wed, 16 Oct 2019 16:51:34 +0200 Subject: [PATCH 08/21] #4857 Fix missing highlight of cell in comparison view --- ApplicationCode/ProjectDataModel/Rim3dView.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ApplicationCode/ProjectDataModel/Rim3dView.cpp b/ApplicationCode/ProjectDataModel/Rim3dView.cpp index 3d19429d3b..9c3f918db7 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dView.cpp +++ b/ApplicationCode/ProjectDataModel/Rim3dView.cpp @@ -1045,6 +1045,12 @@ void Rim3dView::createHighlightAndGridBoxDisplayModelWithRedraw() { createHighlightAndGridBoxDisplayModel(); + if ( Rim3dView* depView = prepareComparisonView() ) + { + depView->createHighlightAndGridBoxDisplayModel(); + restoreComparisonView(); + } + if ( nativeOrOverrideViewer() ) { nativeOrOverrideViewer()->update(); From caed6bfa91369455fc948b349208a230cb8c254b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Thu, 17 Oct 2019 10:07:41 +0200 Subject: [PATCH 09/21] #4881 Fix crash when creation global annotations with geomech view present --- .../ProjectDataModel/Annotations/RimAnnotationCollection.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.cpp index 5bc1d95b5f..158536516a 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.cpp @@ -225,7 +225,10 @@ void RimAnnotationCollection::updateViewAnnotationCollections() for ( const auto* view : views ) { - view->annotationCollection()->onGlobalCollectionChanged( this ); + if (view->annotationCollection()) + { + view->annotationCollection()->onGlobalCollectionChanged( this ); + } } } From 5a72de405dca5a44017ffdd1f2812aa1a446f4ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Thu, 17 Oct 2019 10:35:01 +0200 Subject: [PATCH 10/21] #4857 Add support to distinguish 3D-view commands done in the main and comparison view Support annotation and rangefilter creation in the comparison view --- .../Application/RiaApplication.cpp | 22 ++++++++++++++ ApplicationCode/Application/RiaApplication.h | 1 + ...RicCreateTextAnnotationIn3dViewFeature.cpp | 23 ++++++++------ .../RicIntersectionBoxAtPosFeature.cpp | 4 ++- .../RicIntersectionBoxXSliceFeature.cpp | 3 +- .../RicIntersectionBoxYSliceFeature.cpp | 3 +- .../RicIntersectionBoxZSliceFeature.cpp | 4 ++- .../RicNewSliceRangeFilterFeature.cpp | 23 +++++++++----- .../Commands/RicNewSliceRangeFilterFeature.h | 2 +- .../Commands/RicRangeFilterNewExec.cpp | 2 +- ApplicationCode/UserInterface/RiuViewer.cpp | 8 ++--- ApplicationCode/UserInterface/RiuViewer.h | 2 +- .../UserInterface/RiuViewerCommands.cpp | 30 ++++++++++++------- .../UserInterface/RiuViewerCommands.h | 2 ++ 14 files changed, 89 insertions(+), 40 deletions(-) diff --git a/ApplicationCode/Application/RiaApplication.cpp b/ApplicationCode/Application/RiaApplication.cpp index d3a891ca3f..72e818d042 100644 --- a/ApplicationCode/Application/RiaApplication.cpp +++ b/ApplicationCode/Application/RiaApplication.cpp @@ -84,6 +84,9 @@ #include "RimWellPltPlot.h" #include "RimWellRftPlot.h" +#include "RiuViewer.h" +#include "RiuViewerCommands.h" + #include "cafPdmSettings.h" #include "cafPdmUiModelChangeDetector.h" #include "cafProgressInfo.h" @@ -258,6 +261,25 @@ RimGridView* RiaApplication::activeGridView() return dynamic_cast( m_activeReservoirView.p() ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimGridView* RiaApplication::activeMainOrComparisonGridView() +{ + RimGridView* activeView = RiaApplication::instance()->activeGridView(); + RimGridView* viewOrComparisonView = activeView; + + if ( activeView->viewer()->viewerCommands()->isCurrentPickInComparisonView() ) + { + if ( RimGridView* compView = dynamic_cast( activeView->activeComparisonView() ) ) + { + viewOrComparisonView = compView; + } + } + + return viewOrComparisonView; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Application/RiaApplication.h b/ApplicationCode/Application/RiaApplication.h index 457829bcf4..622349afba 100644 --- a/ApplicationCode/Application/RiaApplication.h +++ b/ApplicationCode/Application/RiaApplication.h @@ -112,6 +112,7 @@ public: Rim3dView* activeReservoirView(); const Rim3dView* activeReservoirView() const; RimGridView* activeGridView(); + RimGridView* activeMainOrComparisonGridView(); RimProject* project(); diff --git a/ApplicationCode/Commands/AnnotationCommands/RicCreateTextAnnotationIn3dViewFeature.cpp b/ApplicationCode/Commands/AnnotationCommands/RicCreateTextAnnotationIn3dViewFeature.cpp index 35baf8ef1e..167c3422db 100644 --- a/ApplicationCode/Commands/AnnotationCommands/RicCreateTextAnnotationIn3dViewFeature.cpp +++ b/ApplicationCode/Commands/AnnotationCommands/RicCreateTextAnnotationIn3dViewFeature.cpp @@ -28,6 +28,7 @@ #include "RiuMainWindow.h" #include "RiuViewer.h" +#include "RiuViewerCommands.h" #include "cvfBoundingBox.h" #include "cvfCamera.h" @@ -57,12 +58,14 @@ void RicCreateTextAnnotationIn3dViewFeature::onActionTriggered( bool isChecked ) if ( activeView ) { - cvf::Vec3d domainCoord = activeView->viewer()->lastPickPositionInDomainCoords(); - cvf::BoundingBox bbox = activeView->ownerCase()->activeCellsBoundingBox(); + RimGridView* viewOrComparisonView = RiaApplication::instance()->activeMainOrComparisonGridView(); + + cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords(); + cvf::BoundingBox bbox = viewOrComparisonView->ownerCase()->activeCellsBoundingBox(); if ( contMapView ) domainCoord[2] = bbox.max().z() - bbox.extent().z() * 0.2; - auto coll = activeView->annotationCollection(); + auto coll = viewOrComparisonView->annotationCollection(); if ( coll ) { @@ -70,7 +73,9 @@ void RicCreateTextAnnotationIn3dViewFeature::onActionTriggered( bool isChecked ) newAnnotation->setAnchorPoint( domainCoord ); cvf::Vec3d labelPos = domainCoord; - if ( activeView->viewer()->mainCamera()->direction().z() <= 0 ) + cvf::Camera* viewCamera = activeView->viewer()->mainCamera(); + + if ( viewCamera->direction().z() <= 0 ) { labelPos.z() = bbox.max().z(); } @@ -79,10 +84,10 @@ void RicCreateTextAnnotationIn3dViewFeature::onActionTriggered( bool isChecked ) labelPos.z() = bbox.min().z(); } - cvf::Vec3d horizontalRight = activeView->viewer()->mainCamera()->direction() ^ cvf::Vec3d::Z_AXIS; - cvf::Vec3d horizontalUp = activeView->viewer()->mainCamera()->up() - - ( cvf::Vec3d::Z_AXIS * - ( activeView->viewer()->mainCamera()->up() * cvf::Vec3d::Z_AXIS ) ); + cvf::Vec3d horizontalRight = viewCamera->direction() ^ cvf::Vec3d::Z_AXIS; + cvf::Vec3d horizontalUp = viewCamera->up() - + ( cvf::Vec3d::Z_AXIS * ( viewCamera->up() * cvf::Vec3d::Z_AXIS ) ); + bool isOk = horizontalRight.normalize(); if ( !isOk ) horizontalRight = {1.0, 0.0, 0.0}; @@ -93,7 +98,7 @@ void RicCreateTextAnnotationIn3dViewFeature::onActionTriggered( bool isChecked ) coll->scheduleRedrawOfRelevantViews(); coll->updateConnectedEditors(); - RiuMainWindow::instance()->selectAsCurrentItem( newAnnotation ); + RiuMainWindow::instance()->selectAsCurrentItem( newAnnotation, false ); } } } diff --git a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxAtPosFeature.cpp b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxAtPosFeature.cpp index 2053d51051..2023bdedf3 100644 --- a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxAtPosFeature.cpp +++ b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxAtPosFeature.cpp @@ -27,6 +27,7 @@ #include "RiuMainWindow.h" #include "RiuViewer.h" +#include "RiuViewerCommands.h" #include "cafCmdExecCommandManager.h" #include "cafSelectionManager.h" @@ -61,7 +62,8 @@ void RicIntersectionBoxAtPosFeature::onActionTriggered( bool isChecked ) coll->appendIntersectionBoxAndUpdate( intersectionBox ); - cvf::Vec3d domainCoord = activeView->viewer()->lastPickPositionInDomainCoords(); + cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords(); + intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_NONE, domainCoord ); coll->updateConnectedEditors(); diff --git a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxXSliceFeature.cpp b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxXSliceFeature.cpp index 2e06c8beaa..c51d96d512 100644 --- a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxXSliceFeature.cpp +++ b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxXSliceFeature.cpp @@ -24,6 +24,7 @@ #include "RimGridView.h" #include "RimIntersectionBox.h" #include "RimIntersectionCollection.h" +#include "RiuViewerCommands.h" #include "RiuMainWindow.h" #include "RiuViewer.h" @@ -61,7 +62,7 @@ void RicIntersectionBoxXSliceFeature::onActionTriggered( bool isChecked ) coll->appendIntersectionBoxAndUpdate( intersectionBox ); - cvf::Vec3d domainCoord = activeView->viewer()->lastPickPositionInDomainCoords(); + cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords(); intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_X, domainCoord ); coll->updateConnectedEditors(); diff --git a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxYSliceFeature.cpp b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxYSliceFeature.cpp index 111485b1d3..c8a259862d 100644 --- a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxYSliceFeature.cpp +++ b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxYSliceFeature.cpp @@ -27,6 +27,7 @@ #include "RiuMainWindow.h" #include "RiuViewer.h" +#include "RiuViewerCommands.h" #include "cafCmdExecCommandManager.h" #include "cafSelectionManager.h" @@ -61,7 +62,7 @@ void RicIntersectionBoxYSliceFeature::onActionTriggered( bool isChecked ) coll->appendIntersectionBoxAndUpdate( intersectionBox ); - cvf::Vec3d domainCoord = activeView->viewer()->lastPickPositionInDomainCoords(); + cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords(); intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_Y, domainCoord ); coll->updateConnectedEditors(); diff --git a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxZSliceFeature.cpp b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxZSliceFeature.cpp index cb10149140..6240ad7140 100644 --- a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxZSliceFeature.cpp +++ b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxZSliceFeature.cpp @@ -24,6 +24,7 @@ #include "RimGridView.h" #include "RimIntersectionBox.h" #include "RimIntersectionCollection.h" +#include "RiuViewerCommands.h" #include "RiuMainWindow.h" #include "RiuViewer.h" @@ -60,7 +61,8 @@ void RicIntersectionBoxZSliceFeature::onActionTriggered( bool isChecked ) intersectionBox->name = QString( "Z-slice (Intersection box)" ); coll->appendIntersectionBoxAndUpdate( intersectionBox ); - cvf::Vec3d domainCoord = activeView->viewer()->lastPickPositionInDomainCoords(); + cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords(); + intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_Z, domainCoord ); coll->updateConnectedEditors(); diff --git a/ApplicationCode/Commands/RicNewSliceRangeFilterFeature.cpp b/ApplicationCode/Commands/RicNewSliceRangeFilterFeature.cpp index 5a606ef1a2..bed2d163b9 100644 --- a/ApplicationCode/Commands/RicNewSliceRangeFilterFeature.cpp +++ b/ApplicationCode/Commands/RicNewSliceRangeFilterFeature.cpp @@ -26,23 +26,28 @@ #include "RimGridView.h" #include "RimViewController.h" +#include "RiuViewer.h" +#include "RiuViewerCommands.h" + #include "cafCmdExecCommandManager.h" #include #include #include -CAF_CMD_SOURCE_INIT( RicNewSliceRangeFilterFeature, "RicNewSliceRangeFilterFeature" ); +CAF_CMD_SOURCE_INIT( RicNewSliceRangeFilter3dViewFeature, "RicNewSliceRangeFilter3dViewFeature" ); //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RicNewSliceRangeFilterFeature::isCommandEnabled() +bool RicNewSliceRangeFilter3dViewFeature::isCommandEnabled() { RimGridView* view = RiaApplication::instance()->activeGridView(); if ( !view ) return false; - RimViewController* vc = view->viewController(); + RimGridView* viewOrComparisonView = RiaApplication::instance()->activeMainOrComparisonGridView(); + + RimViewController* vc = viewOrComparisonView->viewController(); if ( !vc ) return true; return ( !vc->isRangeFiltersControlled() ); @@ -51,14 +56,16 @@ bool RicNewSliceRangeFilterFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RicNewSliceRangeFilterFeature::onActionTriggered( bool isChecked ) +void RicNewSliceRangeFilter3dViewFeature::onActionTriggered( bool isChecked ) { QVariant userData = this->userData(); if ( !userData.isNull() && userData.type() == QVariant::List ) { - RimGridView* view = RiaApplication::instance()->activeGridView(); - RimCellRangeFilterCollection* rangeFilterCollection = view->rangeFilterCollection(); + RimGridView* activeView = RiaApplication::instance()->activeGridView(); + RimGridView* viewOrComparisonView = RiaApplication::instance()->activeMainOrComparisonGridView(); + + RimCellRangeFilterCollection* rangeFilterCollection = viewOrComparisonView->rangeFilterCollection(); RicRangeFilterNewExec* filterExec = new RicRangeFilterNewExec( rangeFilterCollection ); @@ -87,14 +94,14 @@ void RicNewSliceRangeFilterFeature::onActionTriggered( bool isChecked ) } caf::CmdExecCommandManager::instance()->processExecuteCommand( filterExec ); - view->setSurfaceDrawstyle(); + activeView->setSurfaceDrawstyle(); } } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RicNewSliceRangeFilterFeature::setupActionLook( QAction* actionToSetup ) +void RicNewSliceRangeFilter3dViewFeature::setupActionLook( QAction* actionToSetup ) { actionToSetup->setIcon( QIcon( ":/CellFilter_Range.png" ) ); } diff --git a/ApplicationCode/Commands/RicNewSliceRangeFilterFeature.h b/ApplicationCode/Commands/RicNewSliceRangeFilterFeature.h index c3900888e4..f7733be023 100644 --- a/ApplicationCode/Commands/RicNewSliceRangeFilterFeature.h +++ b/ApplicationCode/Commands/RicNewSliceRangeFilterFeature.h @@ -23,7 +23,7 @@ //================================================================================================== /// //================================================================================================== -class RicNewSliceRangeFilterFeature : public caf::CmdFeature +class RicNewSliceRangeFilter3dViewFeature : public caf::CmdFeature { CAF_CMD_HEADER_INIT; diff --git a/ApplicationCode/Commands/RicRangeFilterNewExec.cpp b/ApplicationCode/Commands/RicRangeFilterNewExec.cpp index 02ffface4b..da5ba3a276 100644 --- a/ApplicationCode/Commands/RicRangeFilterNewExec.cpp +++ b/ApplicationCode/Commands/RicRangeFilterNewExec.cpp @@ -73,7 +73,7 @@ void RicRangeFilterNewExec::redo() m_cellRangeFilterCollection->updateConnectedEditors(); - Riu3DMainWindowTools::selectAsCurrentItem( rangeFilter ); + Riu3DMainWindowTools::selectAsCurrentItem( rangeFilter, false ); // Trigger update of view following the range filter update RimGridView* view = nullptr; diff --git a/ApplicationCode/UserInterface/RiuViewer.cpp b/ApplicationCode/UserInterface/RiuViewer.cpp index 92df8e6cb2..c20e17109e 100644 --- a/ApplicationCode/UserInterface/RiuViewer.cpp +++ b/ApplicationCode/UserInterface/RiuViewer.cpp @@ -974,13 +974,11 @@ void RiuViewer::setAxisLabels( const cvf::String& xLabel, const cvf::String& yLa } //-------------------------------------------------------------------------------------------------- -/// +/// //-------------------------------------------------------------------------------------------------- -cvf::Vec3d RiuViewer::lastPickPositionInDomainCoords() const +RiuViewerCommands* RiuViewer::viewerCommands() const { - CVF_ASSERT( m_viewerCommands ); - - return m_viewerCommands->lastPickPositionInDomainCoords(); + return m_viewerCommands; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/UserInterface/RiuViewer.h b/ApplicationCode/UserInterface/RiuViewer.h index 729fc1c518..ce3ec3bb9a 100644 --- a/ApplicationCode/UserInterface/RiuViewer.h +++ b/ApplicationCode/UserInterface/RiuViewer.h @@ -120,7 +120,7 @@ public: void showAxisCross( bool enable ); void setAxisLabels( const cvf::String& xLabel, const cvf::String& yLabel, const cvf::String& zLabel ); - cvf::Vec3d lastPickPositionInDomainCoords() const; + RiuViewerCommands* viewerCommands() const; cvf::OverlayItem* pickFixedPositionedLegend( int winPosX, int winPosY ); diff --git a/ApplicationCode/UserInterface/RiuViewerCommands.cpp b/ApplicationCode/UserInterface/RiuViewerCommands.cpp index f46f403017..4943bf7393 100644 --- a/ApplicationCode/UserInterface/RiuViewerCommands.cpp +++ b/ApplicationCode/UserInterface/RiuViewerCommands.cpp @@ -165,9 +165,9 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event ) } } - bool isComparisonViewPick = m_viewer->isMousePosWithinComparisonView( event->x(), event->y() ); - Rim3dView* mainOrComparisonView = isComparisonViewPick ? m_reservoirView->activeComparisonView() - : m_reservoirView.p(); + m_isCurrentPickInComparisonView = m_viewer->isMousePosWithinComparisonView( event->x(), event->y() ); + Rim3dView* mainOrComparisonView = m_isCurrentPickInComparisonView ? m_reservoirView->activeComparisonView() + : m_reservoirView.p(); // Find the following data @@ -320,13 +320,13 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event ) menuBuilder.subMenuStart( "Range Filter Slice", QIcon( ":/CellFilter_Range.png" ) ); - menuBuilder.addCmdFeatureWithUserData( "RicNewSliceRangeFilterFeature", + menuBuilder.addCmdFeatureWithUserData( "RicNewSliceRangeFilter3dViewFeature", "I-slice Range Filter", iSliceList ); - menuBuilder.addCmdFeatureWithUserData( "RicNewSliceRangeFilterFeature", + menuBuilder.addCmdFeatureWithUserData( "RicNewSliceRangeFilter3dViewFeature", "J-slice Range Filter", jSliceList ); - menuBuilder.addCmdFeatureWithUserData( "RicNewSliceRangeFilterFeature", + menuBuilder.addCmdFeatureWithUserData( "RicNewSliceRangeFilter3dViewFeature", "K-slice Range Filter", kSliceList ); @@ -588,9 +588,9 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard } } - bool isComparisonViewPick = m_viewer->isMousePosWithinComparisonView( winPosX, winPosY ); - Rim3dView* mainOrComparisonView = isComparisonViewPick ? m_reservoirView->activeComparisonView() - : m_reservoirView.p(); + m_isCurrentPickInComparisonView = m_viewer->isMousePosWithinComparisonView( winPosX, winPosY ); + Rim3dView* mainOrComparisonView = m_isCurrentPickInComparisonView ? m_reservoirView->activeComparisonView() + : m_reservoirView.p(); // Make pickEventHandlers do their stuff @@ -1051,6 +1051,14 @@ cvf::Vec3d RiuViewerCommands::lastPickPositionInDomainCoords() const return m_currentPickPositionInDomainCoords; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RiuViewerCommands::isCurrentPickInComparisonView() const +{ + return m_isCurrentPickInComparisonView; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -1284,12 +1292,12 @@ void RiuViewerCommands::handleTextPicking( int winPosX, int winPosY, cvf::HitIte { using namespace cvf; - bool isMouseWithinComparisonView = m_viewer->isMousePosWithinComparisonView( winPosX, winPosY ); + m_isCurrentPickInComparisonView = m_viewer->isMousePosWithinComparisonView( winPosX, winPosY ); int translatedMousePosX = winPosX; int translatedMousePosY = m_viewer->height() - winPosY; - Scene* scene = m_viewer->currentScene( isMouseWithinComparisonView ); + Scene* scene = m_viewer->currentScene( m_isCurrentPickInComparisonView ); if ( !scene ) return; diff --git a/ApplicationCode/UserInterface/RiuViewerCommands.h b/ApplicationCode/UserInterface/RiuViewerCommands.h index 4811238d5f..0b60eb61ae 100644 --- a/ApplicationCode/UserInterface/RiuViewerCommands.h +++ b/ApplicationCode/UserInterface/RiuViewerCommands.h @@ -66,6 +66,7 @@ public: static void removePickEventHandlerIfActive( Ric3dViewPickEventHandler* pickEventHandler ); cvf::Vec3d lastPickPositionInDomainCoords() const; + bool isCurrentPickInComparisonView() const; private: void findCellAndGridIndex( Rim3dView* mainOrComparisonView, @@ -96,6 +97,7 @@ private: size_t m_currentCellIndex; cvf::StructGridInterface::FaceType m_currentFaceIndex; cvf::Vec3d m_currentPickPositionInDomainCoords; + bool m_isCurrentPickInComparisonView; caf::PdmPointer m_reservoirView; QPointer m_viewer; From 5f9424f7b76435999ad5120f42c0054918e3134f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Thu, 17 Oct 2019 15:40:36 +0200 Subject: [PATCH 11/21] #4857 Fixed RicSelectColorResult --- ApplicationCode/Commands/RicSelectColorResult.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/ApplicationCode/Commands/RicSelectColorResult.cpp b/ApplicationCode/Commands/RicSelectColorResult.cpp index 3cc239a31a..5c96030326 100644 --- a/ApplicationCode/Commands/RicSelectColorResult.cpp +++ b/ApplicationCode/Commands/RicSelectColorResult.cpp @@ -68,7 +68,9 @@ bool RicSelectColorResult::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicSelectColorResult::onActionTriggered( bool isChecked ) { - Rim3dView* activeView = RiaApplication::instance()->activeReservoirView(); + Rim3dView* activeView = RiaApplication::instance()->activeMainOrComparisonGridView(); + bool isComparisonView = (activeView != RiaApplication::instance()->activeGridView()); + Rim2dIntersectionView* int2dView = dynamic_cast( activeView ); RimGridView* gridView = nullptr; @@ -80,13 +82,13 @@ void RicSelectColorResult::onActionTriggered( bool isChecked ) RimEclipseView* eclView = dynamic_cast( gridView ); if ( eclView ) { - Riu3DMainWindowTools::selectAsCurrentItem( eclView->cellResult(), int2dView == nullptr ); + Riu3DMainWindowTools::selectAsCurrentItem( eclView->cellResult(), int2dView == nullptr && !isComparisonView ); return; } RimGeoMechView* geoMechView = dynamic_cast( gridView ); if ( geoMechView ) { - Riu3DMainWindowTools::selectAsCurrentItem( geoMechView->cellResult(), int2dView == nullptr ); + Riu3DMainWindowTools::selectAsCurrentItem( geoMechView->cellResult(), int2dView == nullptr && !isComparisonView ); } } From 03987a5f71b79e3471bceb3de46e6534df41409b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Thu, 17 Oct 2019 15:58:52 +0200 Subject: [PATCH 12/21] #4857 RicEclipsePropertyFilterNewInViewFeature, RicGeoMechPropertyFilterNewInViewFeature --- .../EclipseCommands/RicEclipsePropertyFilterFeatureImpl.cpp | 4 ++-- .../RicEclipsePropertyFilterNewInViewFeature.cpp | 4 ++-- .../Commands/RicGeoMechPropertyFilterFeatureImpl.cpp | 4 ++-- .../Commands/RicGeoMechPropertyFilterNewInViewFeature.cpp | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ApplicationCode/Commands/EclipseCommands/RicEclipsePropertyFilterFeatureImpl.cpp b/ApplicationCode/Commands/EclipseCommands/RicEclipsePropertyFilterFeatureImpl.cpp index cd499203ed..4b0b1dfca3 100644 --- a/ApplicationCode/Commands/EclipseCommands/RicEclipsePropertyFilterFeatureImpl.cpp +++ b/ApplicationCode/Commands/EclipseCommands/RicEclipsePropertyFilterFeatureImpl.cpp @@ -66,7 +66,7 @@ void RicEclipsePropertyFilterFeatureImpl::addPropertyFilter( RimEclipsePropertyF propertyFilterCollection->reservoirView()->scheduleCreateDisplayModelAndRedraw(); propertyFilterCollection->updateConnectedEditors(); - Riu3DMainWindowTools::selectAsCurrentItem( propertyFilter ); + Riu3DMainWindowTools::selectAsCurrentItem( propertyFilter, false ); } //-------------------------------------------------------------------------------------------------- @@ -83,7 +83,7 @@ void RicEclipsePropertyFilterFeatureImpl::insertPropertyFilter( RimEclipseProper propertyFilterCollection->reservoirView()->scheduleCreateDisplayModelAndRedraw(); propertyFilterCollection->updateConnectedEditors(); - Riu3DMainWindowTools::selectAsCurrentItem( propertyFilter ); + Riu3DMainWindowTools::selectAsCurrentItem( propertyFilter, false ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Commands/EclipseCommands/RicEclipsePropertyFilterNewInViewFeature.cpp b/ApplicationCode/Commands/EclipseCommands/RicEclipsePropertyFilterNewInViewFeature.cpp index f937a91973..1485811348 100644 --- a/ApplicationCode/Commands/EclipseCommands/RicEclipsePropertyFilterNewInViewFeature.cpp +++ b/ApplicationCode/Commands/EclipseCommands/RicEclipsePropertyFilterNewInViewFeature.cpp @@ -39,7 +39,7 @@ CAF_CMD_SOURCE_INIT( RicEclipsePropertyFilterNewInViewFeature, "RicEclipseProper //-------------------------------------------------------------------------------------------------- bool RicEclipsePropertyFilterNewInViewFeature::isCommandEnabled() { - Rim3dView* view = RiaApplication::instance()->activeReservoirView(); + Rim3dView* view = RiaApplication::instance()->activeMainOrComparisonGridView(); if ( !view ) return false; RimEclipseView* eclView = dynamic_cast( view ); @@ -64,7 +64,7 @@ bool RicEclipsePropertyFilterNewInViewFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicEclipsePropertyFilterNewInViewFeature::onActionTriggered( bool isChecked ) { - Rim3dView* view = RiaApplication::instance()->activeReservoirView(); + Rim3dView* view = RiaApplication::instance()->activeMainOrComparisonGridView(); if ( !view ) return; RimEclipseView* eclView = dynamic_cast( view ); if ( !eclView ) return; diff --git a/ApplicationCode/Commands/RicGeoMechPropertyFilterFeatureImpl.cpp b/ApplicationCode/Commands/RicGeoMechPropertyFilterFeatureImpl.cpp index c21f436540..1db8fcacc0 100644 --- a/ApplicationCode/Commands/RicGeoMechPropertyFilterFeatureImpl.cpp +++ b/ApplicationCode/Commands/RicGeoMechPropertyFilterFeatureImpl.cpp @@ -68,7 +68,7 @@ void RicGeoMechPropertyFilterFeatureImpl::addPropertyFilter( RimGeoMechPropertyF propertyFilterCollection->reservoirView()->scheduleCreateDisplayModelAndRedraw(); propertyFilterCollection->updateConnectedEditors(); - Riu3DMainWindowTools::selectAsCurrentItem( propertyFilter ); + Riu3DMainWindowTools::selectAsCurrentItem( propertyFilter , false); } //-------------------------------------------------------------------------------------------------- @@ -85,7 +85,7 @@ void RicGeoMechPropertyFilterFeatureImpl::insertPropertyFilter( RimGeoMechProper propertyFilterCollection->reservoirView()->scheduleCreateDisplayModelAndRedraw(); propertyFilterCollection->updateConnectedEditors(); - Riu3DMainWindowTools::selectAsCurrentItem( propertyFilter ); + Riu3DMainWindowTools::selectAsCurrentItem( propertyFilter , false); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Commands/RicGeoMechPropertyFilterNewInViewFeature.cpp b/ApplicationCode/Commands/RicGeoMechPropertyFilterNewInViewFeature.cpp index 0bd2832d1c..8a1acd4eb1 100644 --- a/ApplicationCode/Commands/RicGeoMechPropertyFilterNewInViewFeature.cpp +++ b/ApplicationCode/Commands/RicGeoMechPropertyFilterNewInViewFeature.cpp @@ -39,7 +39,7 @@ CAF_CMD_SOURCE_INIT( RicGeoMechPropertyFilterNewInViewFeature, "RicGeoMechProper //-------------------------------------------------------------------------------------------------- bool RicGeoMechPropertyFilterNewInViewFeature::isCommandEnabled() { - Rim3dView* view = RiaApplication::instance()->activeReservoirView(); + Rim3dView* view = RiaApplication::instance()->activeMainOrComparisonGridView(); if ( !view ) return false; RimGeoMechView* geoMechView = dynamic_cast( view ); @@ -62,7 +62,7 @@ bool RicGeoMechPropertyFilterNewInViewFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicGeoMechPropertyFilterNewInViewFeature::onActionTriggered( bool isChecked ) { - Rim3dView* view = RiaApplication::instance()->activeReservoirView(); + Rim3dView* view = RiaApplication::instance()->activeMainOrComparisonGridView(); if ( !view ) return; RimGeoMechView* eclView = dynamic_cast( view ); if ( !eclView ) return; From b785969d68c16048515a1843578ad201ebb01196 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Thu, 17 Oct 2019 16:39:24 +0200 Subject: [PATCH 13/21] #4857 RicNewPolylineIntersectionFeature, RicNewAzimuthDipIntersectionFeature, RicIntersectionBoxAtPosFeature --- .../RicNewAzimuthDipIntersectionFeature.cpp | 4 ++-- .../RicNewPolylineIntersectionFeature.cpp | 4 ++-- .../RicIntersectionBoxAtPosFeature.cpp | 18 +++++++----------- .../RimIntersectionCollection.cpp | 2 +- 4 files changed, 12 insertions(+), 16 deletions(-) diff --git a/ApplicationCode/Commands/CrossSectionCommands/RicNewAzimuthDipIntersectionFeature.cpp b/ApplicationCode/Commands/CrossSectionCommands/RicNewAzimuthDipIntersectionFeature.cpp index 56b1ba772a..2af8f246b4 100644 --- a/ApplicationCode/Commands/CrossSectionCommands/RicNewAzimuthDipIntersectionFeature.cpp +++ b/ApplicationCode/Commands/CrossSectionCommands/RicNewAzimuthDipIntersectionFeature.cpp @@ -58,7 +58,7 @@ bool RicNewAzimuthDipIntersectionFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicNewAzimuthDipIntersectionFeature::onActionTriggered( bool isChecked ) { - RimGridView* activeView = RiaApplication::instance()->activeGridView(); + RimGridView* activeView = RiaApplication::instance()->activeMainOrComparisonGridView(); if ( !activeView ) return; RicNewAzimuthDipIntersectionFeatureCmd* cmd = new RicNewAzimuthDipIntersectionFeatureCmd( @@ -122,7 +122,7 @@ void RicNewAzimuthDipIntersectionFeatureCmd::redo() m_intersectionCollection->appendIntersectionAndUpdate( intersection ); Riu3dSelectionManager::instance()->deleteAllItems(); - Riu3DMainWindowTools::selectAsCurrentItem( intersection ); + Riu3DMainWindowTools::selectAsCurrentItem( intersection, false ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Commands/CrossSectionCommands/RicNewPolylineIntersectionFeature.cpp b/ApplicationCode/Commands/CrossSectionCommands/RicNewPolylineIntersectionFeature.cpp index 5ba2859bf8..e08162570f 100644 --- a/ApplicationCode/Commands/CrossSectionCommands/RicNewPolylineIntersectionFeature.cpp +++ b/ApplicationCode/Commands/CrossSectionCommands/RicNewPolylineIntersectionFeature.cpp @@ -57,7 +57,7 @@ bool RicNewPolylineIntersectionFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicNewPolylineIntersectionFeature::onActionTriggered( bool isChecked ) { - RimGridView* activeView = RiaApplication::instance()->activeGridView(); + RimGridView* activeView = RiaApplication::instance()->activeMainOrComparisonGridView(); if ( !activeView ) return; RicNewPolylineIntersectionFeatureCmd* cmd = new RicNewPolylineIntersectionFeatureCmd( @@ -112,7 +112,7 @@ void RicNewPolylineIntersectionFeatureCmd::redo() Riu3dSelectionManager::instance()->deleteAllItems(); - Riu3DMainWindowTools::selectAsCurrentItem( intersection ); + Riu3DMainWindowTools::selectAsCurrentItem( intersection, false ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxAtPosFeature.cpp b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxAtPosFeature.cpp index 2023bdedf3..0fe3d7d3d8 100644 --- a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxAtPosFeature.cpp +++ b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxAtPosFeature.cpp @@ -52,9 +52,10 @@ bool RicIntersectionBoxAtPosFeature::isCommandEnabled() void RicIntersectionBoxAtPosFeature::onActionTriggered( bool isChecked ) { RimGridView* activeView = RiaApplication::instance()->activeGridView(); - if ( activeView ) + RimGridView* activeMainOrComparisonView = RiaApplication::instance()->activeMainOrComparisonGridView(); + if ( activeMainOrComparisonView ) { - RimIntersectionCollection* coll = activeView->crossSectionCollection(); + RimIntersectionCollection* coll = activeMainOrComparisonView->crossSectionCollection(); CVF_ASSERT( coll ); RimIntersectionBox* intersectionBox = new RimIntersectionBox(); @@ -67,17 +68,12 @@ void RicIntersectionBoxAtPosFeature::onActionTriggered( bool isChecked ) intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_NONE, domainCoord ); coll->updateConnectedEditors(); - RiuMainWindow::instance()->selectAsCurrentItem( intersectionBox ); + RiuMainWindow::instance()->selectAsCurrentItem( intersectionBox, false ); - RimGridView* rimView = nullptr; - coll->firstAncestorOrThisOfType( rimView ); - if ( rimView ) - { - rimView->showGridCells( false ); - RiuMainWindow::instance()->refreshDrawStyleActions(); + activeMainOrComparisonView->showGridCells(false); + RiuMainWindow::instance()->refreshDrawStyleActions(); - rimView->scheduleCreateDisplayModelAndRedraw(); - } + activeView->scheduleCreateDisplayModelAndRedraw(); } } diff --git a/ApplicationCode/ProjectDataModel/RimIntersectionCollection.cpp b/ApplicationCode/ProjectDataModel/RimIntersectionCollection.cpp index 994ac3bc88..5a418f4df3 100644 --- a/ApplicationCode/ProjectDataModel/RimIntersectionCollection.cpp +++ b/ApplicationCode/ProjectDataModel/RimIntersectionCollection.cpp @@ -255,7 +255,7 @@ void RimIntersectionCollection::appendIntersectionBoxAndUpdate( RimIntersectionB m_intersectionBoxes.push_back( intersectionBox ); updateConnectedEditors(); - Riu3DMainWindowTools::selectAsCurrentItem( intersectionBox ); + Riu3DMainWindowTools::selectAsCurrentItem( intersectionBox, false ); Rim3dView* rimView = nullptr; firstAncestorOrThisOfType( rimView ); From 4253c32dac1d2fd700ddb6e0db0089e48b30d6e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Fri, 18 Oct 2019 10:17:50 +0200 Subject: [PATCH 14/21] #4857 RicIntersectionBox[XYZ]SliceFeature --- .../CMakeLists_files.cmake | 2 + .../RicIntersectionBoxXSliceFeature.cpp | 53 +++++++++-------- .../RicIntersectionBoxYSliceFeature.cpp | 56 ++++++++++-------- .../RicIntersectionBoxZSliceFeature.cpp | 56 ++++++++++-------- .../RicIntersectionFeatureImpl.cpp | 59 +++++++++++++++++++ .../RicIntersectionFeatureImpl.h | 26 ++++++++ 6 files changed, 174 insertions(+), 78 deletions(-) create mode 100644 ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionFeatureImpl.cpp create mode 100644 ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionFeatureImpl.h diff --git a/ApplicationCode/Commands/IntersectionBoxCommands/CMakeLists_files.cmake b/ApplicationCode/Commands/IntersectionBoxCommands/CMakeLists_files.cmake index d6a827a118..8ecd003d12 100644 --- a/ApplicationCode/Commands/IntersectionBoxCommands/CMakeLists_files.cmake +++ b/ApplicationCode/Commands/IntersectionBoxCommands/CMakeLists_files.cmake @@ -1,5 +1,6 @@ set (SOURCE_GROUP_HEADER_FILES +${CMAKE_CURRENT_LIST_DIR}/RicIntersectionFeatureImpl.h ${CMAKE_CURRENT_LIST_DIR}/RicBoxManipulatorEventHandler.h ${CMAKE_CURRENT_LIST_DIR}/RicAppendIntersectionBoxFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicIntersectionBoxXSliceFeature.h @@ -9,6 +10,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RicIntersectionBoxAtPosFeature.h ) set (SOURCE_GROUP_SOURCE_FILES +${CMAKE_CURRENT_LIST_DIR}/RicIntersectionFeatureImpl.cpp ${CMAKE_CURRENT_LIST_DIR}/RicBoxManipulatorEventHandler.cpp ${CMAKE_CURRENT_LIST_DIR}/RicAppendIntersectionBoxFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicIntersectionBoxXSliceFeature.cpp diff --git a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxXSliceFeature.cpp b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxXSliceFeature.cpp index c51d96d512..0d08852e8e 100644 --- a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxXSliceFeature.cpp +++ b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxXSliceFeature.cpp @@ -18,6 +18,8 @@ #include "RicIntersectionBoxXSliceFeature.h" +#include "RicIntersectionFeatureImpl.h" + #include "RiaApplication.h" #include "RimCase.h" @@ -51,33 +53,32 @@ bool RicIntersectionBoxXSliceFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicIntersectionBoxXSliceFeature::onActionTriggered( bool isChecked ) { - RimGridView* activeView = RiaApplication::instance()->activeGridView(); - if ( activeView ) - { - RimIntersectionCollection* coll = activeView->crossSectionCollection(); - CVF_ASSERT( coll ); + RicIntersectionFeatureImpl::createIntersectionBoxSlize("X-slice (Intersection box)", RimIntersectionBox::PLANE_STATE_X); - RimIntersectionBox* intersectionBox = new RimIntersectionBox(); - intersectionBox->name = QString( "X-slice (Intersection box)" ); - - coll->appendIntersectionBoxAndUpdate( intersectionBox ); - - cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords(); - intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_X, domainCoord ); - - coll->updateConnectedEditors(); - RiuMainWindow::instance()->selectAsCurrentItem( intersectionBox ); - - RimGridView* rimView = nullptr; - coll->firstAncestorOrThisOfType( rimView ); - if ( rimView ) - { - rimView->showGridCells( false ); - RiuMainWindow::instance()->refreshDrawStyleActions(); - - rimView->scheduleCreateDisplayModelAndRedraw(); - } - } + // RimGridView* activeView = RiaApplication::instance()->activeGridView(); + // RimGridView* activeMainOrComparisonView = RiaApplication::instance()->activeMainOrComparisonGridView(); + // + // if ( activeMainOrComparisonView ) + // { + // RimIntersectionCollection* coll = activeMainOrComparisonView->crossSectionCollection(); + // CVF_ASSERT( coll ); + // + // RimIntersectionBox* intersectionBox = new RimIntersectionBox(); + // intersectionBox->name = QString( "X-slice (Intersection box)" ); + // + // coll->appendIntersectionBoxAndUpdate( intersectionBox ); + // + // cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords(); + // intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_X, domainCoord ); + // + // coll->updateConnectedEditors(); + // RiuMainWindow::instance()->selectAsCurrentItem( intersectionBox, false ); + // + // activeMainOrComparisonView->showGridCells(false); + // RiuMainWindow::instance()->refreshDrawStyleActions(); + // + // activeView->scheduleCreateDisplayModelAndRedraw(); + // } } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxYSliceFeature.cpp b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxYSliceFeature.cpp index c8a259862d..03b1f8af3f 100644 --- a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxYSliceFeature.cpp +++ b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxYSliceFeature.cpp @@ -18,6 +18,8 @@ #include "RicIntersectionBoxYSliceFeature.h" +#include "RicIntersectionFeatureImpl.h" + #include "RiaApplication.h" #include "RimCase.h" @@ -51,33 +53,35 @@ bool RicIntersectionBoxYSliceFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicIntersectionBoxYSliceFeature::onActionTriggered( bool isChecked ) { - RimGridView* activeView = RiaApplication::instance()->activeGridView(); - if ( activeView ) - { - RimIntersectionCollection* coll = activeView->crossSectionCollection(); - CVF_ASSERT( coll ); + RicIntersectionFeatureImpl::createIntersectionBoxSlize("Y-slice (Intersection box)", RimIntersectionBox::PLANE_STATE_Y); - RimIntersectionBox* intersectionBox = new RimIntersectionBox(); - intersectionBox->name = QString( "Y-slice (Intersection box)" ); - - coll->appendIntersectionBoxAndUpdate( intersectionBox ); - - cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords(); - intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_Y, domainCoord ); - - coll->updateConnectedEditors(); - RiuMainWindow::instance()->selectAsCurrentItem( intersectionBox ); - - RimGridView* rimView = nullptr; - coll->firstAncestorOrThisOfType( rimView ); - if ( rimView ) - { - rimView->showGridCells( false ); - RiuMainWindow::instance()->refreshDrawStyleActions(); - - rimView->scheduleCreateDisplayModelAndRedraw(); - } - } + //RimGridView* activeView = RiaApplication::instance()->activeGridView(); + //if ( activeView ) + //{ + // RimIntersectionCollection* coll = activeView->crossSectionCollection(); + // CVF_ASSERT( coll ); + // + // RimIntersectionBox* intersectionBox = new RimIntersectionBox(); + // intersectionBox->name = QString( "Y-slice (Intersection box)" ); + // + // coll->appendIntersectionBoxAndUpdate( intersectionBox ); + // + // cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords(); + // intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_Y, domainCoord ); + // + // coll->updateConnectedEditors(); + // RiuMainWindow::instance()->selectAsCurrentItem( intersectionBox ); + // + // RimGridView* rimView = nullptr; + // coll->firstAncestorOrThisOfType( rimView ); + // if ( rimView ) + // { + // rimView->showGridCells( false ); + // RiuMainWindow::instance()->refreshDrawStyleActions(); + // + // rimView->scheduleCreateDisplayModelAndRedraw(); + // } + //} } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxZSliceFeature.cpp b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxZSliceFeature.cpp index 6240ad7140..fd8fa59fa3 100644 --- a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxZSliceFeature.cpp +++ b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxZSliceFeature.cpp @@ -18,6 +18,8 @@ #include "RicIntersectionBoxZSliceFeature.h" +#include "RicIntersectionFeatureImpl.h" + #include "RiaApplication.h" #include "RimCase.h" @@ -51,33 +53,35 @@ bool RicIntersectionBoxZSliceFeature::isCommandEnabled() //-------------------------------------------------------------------------------------------------- void RicIntersectionBoxZSliceFeature::onActionTriggered( bool isChecked ) { - RimGridView* activeView = RiaApplication::instance()->activeGridView(); - if ( activeView ) - { - RimIntersectionCollection* coll = activeView->crossSectionCollection(); - CVF_ASSERT( coll ); + RicIntersectionFeatureImpl::createIntersectionBoxSlize("Z-slice (Intersection box)", RimIntersectionBox::PLANE_STATE_Z); - RimIntersectionBox* intersectionBox = new RimIntersectionBox(); - intersectionBox->name = QString( "Z-slice (Intersection box)" ); - - coll->appendIntersectionBoxAndUpdate( intersectionBox ); - cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords(); - - intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_Z, domainCoord ); - - coll->updateConnectedEditors(); - RiuMainWindow::instance()->selectAsCurrentItem( intersectionBox ); - - RimGridView* rimView = nullptr; - coll->firstAncestorOrThisOfType( rimView ); - if ( rimView ) - { - rimView->showGridCells( false ); - RiuMainWindow::instance()->refreshDrawStyleActions(); - - rimView->scheduleCreateDisplayModelAndRedraw(); - } - } + // RimGridView* activeView = RiaApplication::instance()->activeGridView(); + // if ( activeView ) + // { + // RimIntersectionCollection* coll = activeView->crossSectionCollection(); + // CVF_ASSERT( coll ); + // + // RimIntersectionBox* intersectionBox = new RimIntersectionBox(); + // intersectionBox->name = QString( "Z-slice (Intersection box)" ); + // + // coll->appendIntersectionBoxAndUpdate( intersectionBox ); + // cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords(); + // + // intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_Z, domainCoord ); + // + // coll->updateConnectedEditors(); + // RiuMainWindow::instance()->selectAsCurrentItem( intersectionBox ); + // + // RimGridView* rimView = nullptr; + // coll->firstAncestorOrThisOfType( rimView ); + // if ( rimView ) + // { + // rimView->showGridCells( false ); + // RiuMainWindow::instance()->refreshDrawStyleActions(); + // + // rimView->scheduleCreateDisplayModelAndRedraw(); + // } + // } } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionFeatureImpl.cpp b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionFeatureImpl.cpp new file mode 100644 index 0000000000..334607d957 --- /dev/null +++ b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionFeatureImpl.cpp @@ -0,0 +1,59 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2019- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// +#include "RicIntersectionFeatureImpl.h" + +#include "RiaApplication.h" + +#include "RimGridView.h" +#include "RimIntersectionBox.h" +#include "RimIntersectionCollection.h" + +#include "RiuMainWindow.h" +#include "RiuViewer.h" +#include "RiuViewerCommands.h" + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicIntersectionFeatureImpl::createIntersectionBoxSlize(const QString& name, RimIntersectionBox::SinglePlaneState plane) +{ + RimGridView* activeView = RiaApplication::instance()->activeGridView(); + RimGridView* activeMainOrComparisonView = RiaApplication::instance()->activeMainOrComparisonGridView(); + + if ( activeMainOrComparisonView ) + { + RimIntersectionCollection* coll = activeMainOrComparisonView->crossSectionCollection(); + CVF_ASSERT( coll ); + + cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords(); + + RimIntersectionBox* intersectionBox = new RimIntersectionBox(); + intersectionBox->name = name; + + coll->appendIntersectionBoxNoUpdate( intersectionBox ); + intersectionBox->setToDefaultSizeSlice( plane, domainCoord ); + coll->updateConnectedEditors(); + + activeMainOrComparisonView->showGridCells(false); + activeMainOrComparisonView->scheduleCreateDisplayModelAndRedraw(); + activeView->scheduleCreateDisplayModelAndRedraw(); + + RiuMainWindow::instance()->selectAsCurrentItem( intersectionBox, false ); + RiuMainWindow::instance()->refreshDrawStyleActions(); + } +} diff --git a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionFeatureImpl.h b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionFeatureImpl.h new file mode 100644 index 0000000000..20e198a92a --- /dev/null +++ b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionFeatureImpl.h @@ -0,0 +1,26 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2019- Equinor ASA +// +// ResInsight is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// +#include "RimIntersectionBox.h" + +class QString; + +class RicIntersectionFeatureImpl +{ +public : + static void createIntersectionBoxSlize(const QString& name, RimIntersectionBox::SinglePlaneState plane ); +}; From ceee8b6a8599c5fdf381cef48d59e4de54a4bf79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Fri, 18 Oct 2019 10:20:22 +0200 Subject: [PATCH 15/21] #4857 Remove obsolete code --- .../RicIntersectionBoxXSliceFeature.cpp | 25 ----------------- .../RicIntersectionBoxYSliceFeature.cpp | 28 ------------------- .../RicIntersectionBoxZSliceFeature.cpp | 28 ------------------- 3 files changed, 81 deletions(-) diff --git a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxXSliceFeature.cpp b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxXSliceFeature.cpp index 0d08852e8e..d5d97d9a68 100644 --- a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxXSliceFeature.cpp +++ b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxXSliceFeature.cpp @@ -54,31 +54,6 @@ bool RicIntersectionBoxXSliceFeature::isCommandEnabled() void RicIntersectionBoxXSliceFeature::onActionTriggered( bool isChecked ) { RicIntersectionFeatureImpl::createIntersectionBoxSlize("X-slice (Intersection box)", RimIntersectionBox::PLANE_STATE_X); - - // RimGridView* activeView = RiaApplication::instance()->activeGridView(); - // RimGridView* activeMainOrComparisonView = RiaApplication::instance()->activeMainOrComparisonGridView(); - // - // if ( activeMainOrComparisonView ) - // { - // RimIntersectionCollection* coll = activeMainOrComparisonView->crossSectionCollection(); - // CVF_ASSERT( coll ); - // - // RimIntersectionBox* intersectionBox = new RimIntersectionBox(); - // intersectionBox->name = QString( "X-slice (Intersection box)" ); - // - // coll->appendIntersectionBoxAndUpdate( intersectionBox ); - // - // cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords(); - // intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_X, domainCoord ); - // - // coll->updateConnectedEditors(); - // RiuMainWindow::instance()->selectAsCurrentItem( intersectionBox, false ); - // - // activeMainOrComparisonView->showGridCells(false); - // RiuMainWindow::instance()->refreshDrawStyleActions(); - // - // activeView->scheduleCreateDisplayModelAndRedraw(); - // } } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxYSliceFeature.cpp b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxYSliceFeature.cpp index 03b1f8af3f..276324f0f8 100644 --- a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxYSliceFeature.cpp +++ b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxYSliceFeature.cpp @@ -54,34 +54,6 @@ bool RicIntersectionBoxYSliceFeature::isCommandEnabled() void RicIntersectionBoxYSliceFeature::onActionTriggered( bool isChecked ) { RicIntersectionFeatureImpl::createIntersectionBoxSlize("Y-slice (Intersection box)", RimIntersectionBox::PLANE_STATE_Y); - - //RimGridView* activeView = RiaApplication::instance()->activeGridView(); - //if ( activeView ) - //{ - // RimIntersectionCollection* coll = activeView->crossSectionCollection(); - // CVF_ASSERT( coll ); - // - // RimIntersectionBox* intersectionBox = new RimIntersectionBox(); - // intersectionBox->name = QString( "Y-slice (Intersection box)" ); - // - // coll->appendIntersectionBoxAndUpdate( intersectionBox ); - // - // cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords(); - // intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_Y, domainCoord ); - // - // coll->updateConnectedEditors(); - // RiuMainWindow::instance()->selectAsCurrentItem( intersectionBox ); - // - // RimGridView* rimView = nullptr; - // coll->firstAncestorOrThisOfType( rimView ); - // if ( rimView ) - // { - // rimView->showGridCells( false ); - // RiuMainWindow::instance()->refreshDrawStyleActions(); - // - // rimView->scheduleCreateDisplayModelAndRedraw(); - // } - //} } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxZSliceFeature.cpp b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxZSliceFeature.cpp index fd8fa59fa3..45330fce4b 100644 --- a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxZSliceFeature.cpp +++ b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionBoxZSliceFeature.cpp @@ -54,34 +54,6 @@ bool RicIntersectionBoxZSliceFeature::isCommandEnabled() void RicIntersectionBoxZSliceFeature::onActionTriggered( bool isChecked ) { RicIntersectionFeatureImpl::createIntersectionBoxSlize("Z-slice (Intersection box)", RimIntersectionBox::PLANE_STATE_Z); - - // RimGridView* activeView = RiaApplication::instance()->activeGridView(); - // if ( activeView ) - // { - // RimIntersectionCollection* coll = activeView->crossSectionCollection(); - // CVF_ASSERT( coll ); - // - // RimIntersectionBox* intersectionBox = new RimIntersectionBox(); - // intersectionBox->name = QString( "Z-slice (Intersection box)" ); - // - // coll->appendIntersectionBoxAndUpdate( intersectionBox ); - // cvf::Vec3d domainCoord = activeView->viewer()->viewerCommands()->lastPickPositionInDomainCoords(); - // - // intersectionBox->setToDefaultSizeSlice( RimIntersectionBox::PLANE_STATE_Z, domainCoord ); - // - // coll->updateConnectedEditors(); - // RiuMainWindow::instance()->selectAsCurrentItem( intersectionBox ); - // - // RimGridView* rimView = nullptr; - // coll->firstAncestorOrThisOfType( rimView ); - // if ( rimView ) - // { - // rimView->showGridCells( false ); - // RiuMainWindow::instance()->refreshDrawStyleActions(); - // - // rimView->scheduleCreateDisplayModelAndRedraw(); - // } - // } } //-------------------------------------------------------------------------------------------------- From ab190fce8b8d0c8016fb6dd93515c1e84f011ab0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Fri, 18 Oct 2019 15:00:59 +0200 Subject: [PATCH 16/21] Fixed missing pragma once --- .../IntersectionBoxCommands/RicIntersectionFeatureImpl.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionFeatureImpl.h b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionFeatureImpl.h index 20e198a92a..c660c1c02a 100644 --- a/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionFeatureImpl.h +++ b/ApplicationCode/Commands/IntersectionBoxCommands/RicIntersectionFeatureImpl.h @@ -15,6 +15,9 @@ // for more details. // ///////////////////////////////////////////////////////////////////////////////// + +#pragma once + #include "RimIntersectionBox.h" class QString; From d8a8a615a8209293fcba7333775b8b19f24929a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Fri, 18 Oct 2019 15:11:57 +0200 Subject: [PATCH 17/21] #4900 Align name and icon of linked views with ordinary views --- .../ProjectDataModel/RimViewLinker.cpp | 30 ++----------------- 1 file changed, 2 insertions(+), 28 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimViewLinker.cpp b/ApplicationCode/ProjectDataModel/RimViewLinker.cpp index 953d882616..1e011dfe60 100644 --- a/ApplicationCode/ProjectDataModel/RimViewLinker.cpp +++ b/ApplicationCode/ProjectDataModel/RimViewLinker.cpp @@ -286,12 +286,7 @@ QString RimViewLinker::displayNameForView( RimGridView* view ) if ( view ) { - RimCase* rimCase = nullptr; - view->firstAncestorOrThisOfType( rimCase ); - if ( rimCase ) - { - displayName = rimCase->caseUserDescription() + ": " + view->name(); - } + displayName = view->autoName(); } return displayName; @@ -437,29 +432,8 @@ void RimViewLinker::findNameAndIconFromView( QString* name, caf::QIconProvider* CVF_ASSERT( name && icon ); *name = displayNameForView( view ); + *icon = view->uiIconProvider(); - if ( view ) - { - RimCase* rimCase = nullptr; - view->firstAncestorOrThisOfType( rimCase ); - - if ( dynamic_cast( rimCase ) ) - { - *icon = caf::QIconProvider( ":/GeoMechCase48x48.png" ); - } - else if ( dynamic_cast( rimCase ) ) - { - *icon = caf::QIconProvider( ":/Case48x48.png" ); - } - else if ( dynamic_cast( rimCase ) ) - { - *icon = caf::QIconProvider( ":/EclipseInput48x48.png" ); - } - } - else - { - *icon = caf::QIconProvider(); - } } //-------------------------------------------------------------------------------------------------- From 86cb90515b121f94e22d1940fc2e3808efe39efc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Mon, 21 Oct 2019 09:01:35 +0200 Subject: [PATCH 18/21] #4894 Fix missing updates when changing zscale and using linked views. Prepare for fix of scalez-problems with comparison view --- .../ProjectDataModel/Rim3dView.cpp | 41 +++++++++---------- .../ProjectDataModel/RimEclipseView.cpp | 2 +- .../ProjectDataModel/RimGeoMechView.cpp | 2 +- .../ProjectDataModel/RimGridView.cpp | 8 ---- 4 files changed, 21 insertions(+), 32 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/Rim3dView.cpp b/ApplicationCode/ProjectDataModel/Rim3dView.cpp index 9c3f918db7..42e97114f3 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dView.cpp +++ b/ApplicationCode/ProjectDataModel/Rim3dView.cpp @@ -497,7 +497,7 @@ void Rim3dView::updateCurrentTimeStepAndRedraw() } std::set containerViews = this->viewsUsingThisAsComparisonView(); - if ( !containerViews.empty() && !isUsingOverrideViewer()) + if ( !containerViews.empty() && !isUsingOverrideViewer() ) { for ( auto view : containerViews ) { @@ -912,19 +912,6 @@ void Rim3dView::addMeasurementToModel( cvf::ModelBasicList* wellPathModelBasicLi wellPathModelBasicList->updateBoundingBoxesRecursive(); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void Rim3dView::setScaleZAndUpdate( double scalingFactor ) -{ - this->scaleZ = scalingFactor; - updateScaleTransform(); - - this->updateGridBoxData(); - - this->scheduleCreateDisplayModelAndRedraw(); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -986,6 +973,16 @@ void Rim3dView::updateAnnotationItems() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void Rim3dView::setScaleZAndUpdate( double scalingFactor ) +{ + this->scaleZ = scalingFactor; + + updateScaling(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -1006,14 +1003,13 @@ void Rim3dView::updateScaling() viewer()->mainCamera()->setFromLookAt( eye, eye + dir, up ); viewer()->setPointOfInterest( poi ); - - updateScaleTransform(); - createDisplayModelAndRedraw(); - - viewer()->update(); - - updateZScaleLabel(); } + + updateScaleTransform(); + updateGridBoxData(); + updateZScaleLabel(); + + this->scheduleCreateDisplayModelAndRedraw(); } //-------------------------------------------------------------------------------------------------- @@ -1023,7 +1019,8 @@ void Rim3dView::updateZScaleLabel() { // Update Z scale label int scale = static_cast( scaleZ() ); - nativeOrOverrideViewer()->setZScale( scale ); + + if ( viewer() ) viewer()->setZScale( scale ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp index 5251a673a1..843f4b7b49 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp @@ -294,7 +294,7 @@ void RimEclipseView::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) { - Rim3dView::fieldChangedByUi( changedField, oldValue, newValue ); + RimGridView::fieldChangedByUi( changedField, oldValue, newValue ); if ( changedField == &m_showInvalidCells ) { diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp index da712ed486..72c71a70b5 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp @@ -756,7 +756,7 @@ void RimGeoMechView::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) { - Rim3dView::fieldChangedByUi( changedField, oldValue, newValue ); + RimGridView::fieldChangedByUi( changedField, oldValue, newValue ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimGridView.cpp b/ApplicationCode/ProjectDataModel/RimGridView.cpp index b75a523ecd..85fe7feaba 100644 --- a/ApplicationCode/ProjectDataModel/RimGridView.cpp +++ b/ApplicationCode/ProjectDataModel/RimGridView.cpp @@ -418,14 +418,6 @@ void RimGridView::fieldChangedByUi( const caf::PdmFieldHandle* changedField, viewLinker->updateCamera( this ); } } - else if ( changedField == &m_currentTimeStep ) - { - RimViewLinker* viewLinker = this->assosiatedViewLinker(); - if ( viewLinker ) - { - viewLinker->updateTimeStep( this, m_currentTimeStep ); - } - } } //-------------------------------------------------------------------------------------------------- From eee8467e02f7c98a2b3930a6096592d2c5705761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Mon, 21 Oct 2019 09:07:30 +0200 Subject: [PATCH 19/21] Add plantuml of view linker structure --- doc/view_linking.plantuml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 doc/view_linking.plantuml diff --git a/doc/view_linking.plantuml b/doc/view_linking.plantuml new file mode 100644 index 0000000000..806a6c6d01 --- /dev/null +++ b/doc/view_linking.plantuml @@ -0,0 +1,16 @@ +@startuml + +RimViewLinkerCollection --* "1" RimViewLinker +RimViewLinker --* "n" RimViewController +RimViewLinker "masterView" ---> RimGridView + +RimViewController "managedView" ---> RimGridView + +Rim3dView <|-- RimGridView + + +RimViewLinker .> RimViewManipulator +Rim3dView -* RiuViewer +RimViewManipulator ...> RiuViewer + +@enduml From 016f26725ada82f769077f82d48409872b3951dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Tue, 22 Oct 2019 13:39:18 +0200 Subject: [PATCH 20/21] #4862 Lock scale Z in comparison view to follow the main view. #4858 Make timestep independent in comparison view. Make Linked Views timestep linking work --- .../ProjectDataModel/Rim3dView.cpp | 28 +++++++--- ApplicationCode/ProjectDataModel/Rim3dView.h | 6 ++- .../UserInterface/RiuMainWindow.cpp | 2 +- ApplicationCode/UserInterface/RiuViewer.cpp | 13 +++++ Fwk/AppFwk/cafViewer/cafViewer.cpp | 54 ++++++++++++++++--- Fwk/AppFwk/cafViewer/cafViewer.h | 4 ++ 6 files changed, 90 insertions(+), 17 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/Rim3dView.cpp b/ApplicationCode/ProjectDataModel/Rim3dView.cpp index 42e97114f3..d5da50e0b1 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dView.cpp +++ b/ApplicationCode/ProjectDataModel/Rim3dView.cpp @@ -332,6 +332,7 @@ void Rim3dView::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOr caf::PdmUiGroup* gridGroup = uiOrdering.addNewGroup( "Grid Appearance" ); gridGroup->add( &scaleZ ); + scaleZ.uiCapability()->setUiReadOnly( !this->isScaleZEditable() ); gridGroup->add( &meshMode ); gridGroup->add( &surfaceMode ); @@ -410,6 +411,15 @@ std::set Rim3dView::viewsUsingThisAsComparisonView() return containingViews; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool Rim3dView::isScaleZEditable() +{ + return ( this->viewsUsingThisAsComparisonView().empty() || + ( this->viewController() && this->viewController()->isCameraLinked() ) ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -1005,6 +1015,11 @@ void Rim3dView::updateScaling() viewer()->setPointOfInterest( poi ); } + if (activeComparisonView()) + { + activeComparisonView()->setScaleZAndUpdate(scaleZ); + } + updateScaleTransform(); updateGridBoxData(); updateZScaleLabel(); @@ -1422,12 +1437,11 @@ Rim3dView* Rim3dView::prepareComparisonView() return nullptr; } - m_comparisonViewOrgTimestep = depView->currentTimeStep(); - depView->m_currentTimeStep = currentTimeStep(); - depView->clampCurrentTimestep(); - m_comparisonViewOrgZScale = depView->scaleZ(); - depView->scaleZ = scaleZ(); + if ( depView->scaleZ() != scaleZ() ) + { + depView->setScaleZAndUpdate( scaleZ() ); + } viewer()->setComparisonViewEyePointOffset( RimViewManipulator::calculateEquivalentCamPosOffset( this, depView ) ); @@ -1445,6 +1459,6 @@ void Rim3dView::restoreComparisonView() CVF_ASSERT( depView ); depView->setOverrideViewer( nullptr ); - depView->m_currentTimeStep = m_comparisonViewOrgTimestep; - depView->scaleZ = m_comparisonViewOrgZScale; + viewer()->setCurrentComparisonFrame(depView->currentTimeStep()); + } diff --git a/ApplicationCode/ProjectDataModel/Rim3dView.h b/ApplicationCode/ProjectDataModel/Rim3dView.h index cd8161cfc7..cc2886fa15 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dView.h +++ b/ApplicationCode/ProjectDataModel/Rim3dView.h @@ -165,6 +165,9 @@ public: bool isMasterView() const; Rim3dView* activeComparisonView() const; + bool isScaleZEditable(); + + std::set viewsUsingThisAsComparisonView(); cvf::ref displayCoordTransform() const override; @@ -297,8 +300,7 @@ private: // Pure private methods : Override viewer and comparison view - void setOverrideViewer( RiuViewer* overrideViewer ); - std::set viewsUsingThisAsComparisonView(); + void setOverrideViewer( RiuViewer* overrideViewer ); Rim3dView* prepareComparisonView(); void restoreComparisonView(); diff --git a/ApplicationCode/UserInterface/RiuMainWindow.cpp b/ApplicationCode/UserInterface/RiuMainWindow.cpp index 5e8f0a0555..c5688c58c8 100644 --- a/ApplicationCode/UserInterface/RiuMainWindow.cpp +++ b/ApplicationCode/UserInterface/RiuMainWindow.cpp @@ -1790,7 +1790,7 @@ void RiuMainWindow::updateScaleValue() { Rim3dView* view = RiaApplication::instance()->activeReservoirView(); bool isRegularReservoirView = view && dynamic_cast( view ) == nullptr; - if ( isRegularReservoirView ) + if ( isRegularReservoirView && view->isScaleZEditable() ) { m_scaleFactor->setEnabled( true ); diff --git a/ApplicationCode/UserInterface/RiuViewer.cpp b/ApplicationCode/UserInterface/RiuViewer.cpp index c20e17109e..d15c78e185 100644 --- a/ApplicationCode/UserInterface/RiuViewer.cpp +++ b/ApplicationCode/UserInterface/RiuViewer.cpp @@ -182,6 +182,7 @@ RiuViewer::RiuViewer( const QGLFormat& format, QWidget* parent ) m_scaleLegend->setOrientation( caf::OverlayScaleLegend::HORIZONTAL ); m_comparisonWindowMover = new RiuComparisonViewMover( this ); + this->setComparisonViewToFollowAnimation(false); } //-------------------------------------------------------------------------------------------------- @@ -309,6 +310,18 @@ void RiuViewer::slotSetCurrentFrame( int frameIndex ) { viewLinker->updateTimeStep( dynamic_cast( m_rimView.p() ), frameIndex ); } + + // Update views using this as comparison + Rim3dView* view = dynamic_cast( m_rimView.p() ); + if (view) + { + std::set containingViews = view->viewsUsingThisAsComparisonView(); + + for ( auto view : containingViews ) + { + view->updateCurrentTimeStepAndRedraw(); + } + } } } diff --git a/Fwk/AppFwk/cafViewer/cafViewer.cpp b/Fwk/AppFwk/cafViewer/cafViewer.cpp index 426d9498ac..a4e3b7964e 100644 --- a/Fwk/AppFwk/cafViewer/cafViewer.cpp +++ b/Fwk/AppFwk/cafViewer/cafViewer.cpp @@ -131,7 +131,8 @@ caf::Viewer::Viewer(const QGLFormat& format, QWidget* parent) m_offscreenViewportHeight(0), m_parallelProjectionLightDirection(0, 0, -1), // Light directly from behind m_comparisonViewOffset(0, 0, 0), - m_comparisonWindowNormalizedRect(0.5f, 0.0f, 0.5f, 1.0f) + m_comparisonWindowNormalizedRect(0.5f, 0.0f, 0.5f, 1.0f), + m_isComparisonFollowingAnimation(true) { #if QT_VERSION >= 0x050000 m_layoutWidget = new QWidget(parent); @@ -965,6 +966,40 @@ bool caf::Viewer::isAnimationActive() return true; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void caf::Viewer::setCurrentComparisonFrame(int frameIndex) +{ + if (m_frameScenes.size() == 0) return; + + int clampedFrameIndex = clampFrameIndex(frameIndex); + + if (m_releaseOGLResourcesEachFrame) + { + releaseOGlResourcesForCurrentFrame(); + } + + if ( m_comparisonFrameScenes.size() > clampedFrameIndex && m_comparisonFrameScenes.at(clampedFrameIndex) != nullptr ) + { + m_comparisonMainRendering->setScene(m_comparisonFrameScenes.at(clampedFrameIndex)); + } + else + { + m_comparisonMainRendering->setScene(nullptr); + } + + update(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void caf::Viewer::setComparisonViewToFollowAnimation(bool isToFollow) +{ + m_isComparisonFollowingAnimation = isToFollow; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -989,14 +1024,19 @@ void caf::Viewer::slotSetCurrentFrame(int frameIndex) { m_mainRendering->setScene(nullptr); } - if (m_comparisonFrameScenes.size() > clampedFrameIndex && m_comparisonFrameScenes.at(clampedFrameIndex) != nullptr ) + + if ( m_isComparisonFollowingAnimation ) { - m_comparisonMainRendering->setScene(m_comparisonFrameScenes.at(clampedFrameIndex)); - } - else - { - m_comparisonMainRendering->setScene(nullptr); + if ( m_comparisonFrameScenes.size() > clampedFrameIndex && m_comparisonFrameScenes.at(clampedFrameIndex) != nullptr ) + { + m_comparisonMainRendering->setScene(m_comparisonFrameScenes.at(clampedFrameIndex)); + } + else + { + m_comparisonMainRendering->setScene(nullptr); + } } + update(); } diff --git a/Fwk/AppFwk/cafViewer/cafViewer.h b/Fwk/AppFwk/cafViewer/cafViewer.h index e66021c93b..3a5472c3a6 100644 --- a/Fwk/AppFwk/cafViewer/cafViewer.h +++ b/Fwk/AppFwk/cafViewer/cafViewer.h @@ -174,6 +174,9 @@ public: static void copyCameraView(cvf::Camera* srcCamera, cvf::Camera* dstCamera); + void setCurrentComparisonFrame(int frameIndex); + void setComparisonViewToFollowAnimation(bool isToFollow); + public slots: virtual void slotSetCurrentFrame(int frameIndex); virtual void slotEndAnimation(); @@ -257,6 +260,7 @@ private: cvf::ref m_comparisonMainScene; cvf::Collection m_comparisonFrameScenes; cvf::Collection m_comparisonStaticModels; + bool m_isComparisonFollowingAnimation; cvf::Vec3d m_comparisonViewOffset; cvf::ref m_comparisonRenderingScissor; From d802edc145c475ae8a4453eeb18a26672edbd33e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Tue, 22 Oct 2019 13:54:10 +0200 Subject: [PATCH 21/21] #4858 Remove unused time step link option from comparison view settings. --- ApplicationCode/ProjectDataModel/Rim3dView.cpp | 16 +--------------- ApplicationCode/ProjectDataModel/Rim3dView.h | 1 - ApplicationCode/UserInterface/RiuViewer.cpp | 4 ++-- 3 files changed, 3 insertions(+), 18 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/Rim3dView.cpp b/ApplicationCode/ProjectDataModel/Rim3dView.cpp index d5da50e0b1..ae2c8911ce 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dView.cpp +++ b/ApplicationCode/ProjectDataModel/Rim3dView.cpp @@ -131,13 +131,6 @@ Rim3dView::Rim3dView( void ) 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" ); @@ -339,7 +332,6 @@ void Rim3dView::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOr caf::PdmUiGroup* compViewGroup = uiOrdering.addNewGroup( "Comparison View" ); compViewGroup->add( &m_isComparisonViewEnabled ); compViewGroup->add( &m_comparisonView ); - compViewGroup->add( &m_isComparisonViewLinkingTimestep ); uiOrdering.skipRemainingFields( true ); } @@ -825,13 +817,7 @@ void Rim3dView::fieldChangedByUi( const caf::PdmFieldHandle* changedField, createDisplayModelAndRedraw(); } } - else if ( changedField == &m_isComparisonViewLinkingTimestep ) - { - if ( m_isComparisonViewEnabled() && m_comparisonView() ) - { - createDisplayModelAndRedraw(); - } - } + } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Rim3dView.h b/ApplicationCode/ProjectDataModel/Rim3dView.h index cc2886fa15..f890dc6277 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dView.h +++ b/ApplicationCode/ProjectDataModel/Rim3dView.h @@ -321,5 +321,4 @@ private: caf::PdmField m_showZScaleLabel; caf::PdmField m_isComparisonViewEnabled; caf::PdmPtrField m_comparisonView; - caf::PdmField m_isComparisonViewLinkingTimestep; }; diff --git a/ApplicationCode/UserInterface/RiuViewer.cpp b/ApplicationCode/UserInterface/RiuViewer.cpp index d15c78e185..986fbf5a7a 100644 --- a/ApplicationCode/UserInterface/RiuViewer.cpp +++ b/ApplicationCode/UserInterface/RiuViewer.cpp @@ -317,9 +317,9 @@ void RiuViewer::slotSetCurrentFrame( int frameIndex ) { std::set containingViews = view->viewsUsingThisAsComparisonView(); - for ( auto view : containingViews ) + for ( auto contView : containingViews ) { - view->updateCurrentTimeStepAndRedraw(); + contView->updateCurrentTimeStepAndRedraw(); } } }