From 3feaa55d02db39701b977e45bd021454b2461744 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Jensen?= Date: Thu, 8 Mar 2018 13:08:06 +0100 Subject: [PATCH] #2549 2dIntersectionView. Update when modifying SimWellInView --- .../ProjectDataModel/RimSimWellInView.cpp | 56 +++++++++++++++++-- .../ProjectDataModel/RimSimWellInView.h | 2 + 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimSimWellInView.cpp b/ApplicationCode/ProjectDataModel/RimSimWellInView.cpp index 997a26e42c..bf2bda91c9 100644 --- a/ApplicationCode/ProjectDataModel/RimSimWellInView.cpp +++ b/ApplicationCode/ProjectDataModel/RimSimWellInView.cpp @@ -35,6 +35,8 @@ #include "RimSimWellFracture.h" #include "RimSimWellFractureCollection.h" #include "RimSimWellInViewCollection.h" +#include "RimIntersection.h" +#include "Rim2dIntersectionView.h" #include "RiuMainWindow.h" @@ -43,6 +45,13 @@ #include "cafPdmUiTreeOrdering.h" #include "cvfMath.h" + +//-------------------------------------------------------------------------------------------------- +/// Internal functions +//-------------------------------------------------------------------------------------------------- +Rim2dIntersectionView* corresponding2dIntersectionView(RimSimWellInView *simWellInView); + + CAF_PDM_SOURCE_INIT(RimSimWellInView, "Well"); //-------------------------------------------------------------------------------------------------- @@ -110,6 +119,7 @@ void RimSimWellInView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, &wellPipeColor == changedField) { reservoirView->scheduleCreateDisplayModelAndRedraw(); + schedule2dIntersectionViewUpdate(); } else if (&showWell == changedField || &showWellCells == changedField || @@ -118,15 +128,14 @@ void RimSimWellInView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, { reservoirView->scheduleGeometryRegen(VISIBLE_WELL_CELLS); reservoirView->scheduleCreateDisplayModelAndRedraw(); + schedule2dIntersectionViewUpdate(); } else if ( &pipeScaleFactor == changedField || &wellHeadScaleFactor == changedField) { - if (reservoirView) - { - reservoirView->scheduleSimWellGeometryRegen(); - reservoirView->scheduleCreateDisplayModelAndRedraw(); - } + reservoirView->scheduleSimWellGeometryRegen(); + reservoirView->scheduleCreateDisplayModelAndRedraw(); + schedule2dIntersectionViewUpdate(); } } @@ -352,6 +361,18 @@ bool RimSimWellInView::intersectsWellCellsFilteredCells(const RigWellResultFrame return false; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSimWellInView::schedule2dIntersectionViewUpdate() +{ + Rim2dIntersectionView* intersectionView = corresponding2dIntersectionView(this); + if (intersectionView) + { + intersectionView->scheduleCreateDisplayModelAndRedraw(); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -607,3 +628,28 @@ size_t RimSimWellInView::resultWellIndex() const return m_resultWellIndex; } +//-------------------------------------------------------------------------------------------------- +/// Internal functions +//-------------------------------------------------------------------------------------------------- +Rim2dIntersectionView* corresponding2dIntersectionView(RimSimWellInView *simWellInView) +{ + Rim3dView* tdView; + simWellInView->firstAncestorOrThisOfType(tdView); + + std::vector intersectionColls; + if (tdView) + { + tdView->descendantsIncludingThisOfType(intersectionColls); + if (intersectionColls.size() == 1) + { + for (const auto intersection : intersectionColls[0]->intersections()) + { + if (intersection->simulationWell() == simWellInView) + { + return intersection->correspondingIntersectionView(); + } + } + } + } + return nullptr; +} diff --git a/ApplicationCode/ProjectDataModel/RimSimWellInView.h b/ApplicationCode/ProjectDataModel/RimSimWellInView.h index b2a0dc94c8..7026720870 100644 --- a/ApplicationCode/ProjectDataModel/RimSimWellInView.h +++ b/ApplicationCode/ProjectDataModel/RimSimWellInView.h @@ -103,6 +103,8 @@ private: bool intersectsWellCellsFilteredCells(const RigWellResultFrame &wrsf, size_t frameIndex) const; + void schedule2dIntersectionViewUpdate(); + private: cvf::ref m_simWellData; size_t m_resultWellIndex;